You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:16:16