使用Maven Publish时如何避免发布Sources文件
解决Maven发布时不生成-sources文件的问题
针对你不想发布包含未混淆代码的-sources文件需求,提供两种可行方案:
方案一:直接禁用Sources构件生成(推荐)
默认情况下,Android Gradle插件会自动为Maven发布任务关联生成源码Jar的任务。你可以通过两种方式禁用:
方式1:全局禁用所有sourcesJar任务
在你的build.gradle脚本中添加以下代码,直接让所有源码Jar生成任务失效:
// 禁用所有生成sources Jar的任务 tasks.withType(Jar) { if (name.contains("sources")) { enabled = false } }
方式2:在单个Publication中移除Sources构件
如果你只想针对特定发布任务禁用,可在对应的MavenPublication块中添加移除逻辑:
def VERSION_NAME = "1.0.0" publishing { publications { release(MavenPublication) { groupId = 'com.sdk' artifactId = 'sdk' version = VERSION_NAME afterEvaluate { from components.release // 移除当前发布中的sources构件 artifacts.removeIf { it.classifier == 'sources' } } } debug(MavenPublication) { groupId = 'com.sdk' artifactId = 'sdk' version = VERSION_NAME + "-debug" afterEvaluate { from components.debug // 移除当前发布中的sources构件 artifacts.removeIf { it.classifier == 'sources' } } } } repositories { maven { name = 'MySdk' url = "../maven-local-repo" } } }
方案二:发布完成后自动删除Sources文件
如果不想修改任务配置,可在发布任务执行完毕后,自动删除本地仓库中的-sources.jar文件:
def VERSION_NAME = "1.0.0" publishing { // 你的原有配置... publications { release(MavenPublication) { // 原有代码不变 } debug(MavenPublication) { // 原有代码不变 } } repositories { maven { name = 'MySdk' url = "../maven-local-repo" } } } // 为所有Maven发布任务添加后置删除动作 tasks.withType(PublishToMavenRepository) { doLast { def repoPath = "../maven-local-repo/com/sdk/sdk" def versions = [VERSION_NAME, VERSION_NAME + "-debug"] versions.each { version -> def sourcesFile = file("${repoPath}/${version}/sdk-${version}-sources.jar") if (sourcesFile.exists()) { sourcesFile.delete() println "已删除源码文件:${sourcesFile.path}" } } } }
方案一更彻底,从根源上避免生成源码文件;方案二则适合需要保留源码生成任务但不想发布的场景,按需选择即可。
内容的提问来源于stack exchange,提问作者Jesus Dimrix
相关产品推荐
相关产品推荐

