发布 gradle 个没有来源的工件

Publish gradle artifact whitout source

我正在为我的公司开发 Android 图书馆。该存储库是私有的,但我们希望开发人员可以访问该库以在他们的应用程序中使用。 据我所知,发布@aar 时,源代码会同时发布。我对吗?

发布到 bintray Professional 帐户是否允许这样做?

我已经切换到 Bintray Pro 帐户,因为 Bintray 免费插件不允许私有源代码。我现在正在使用官方 Bintray gradle 插件 (classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0')。这允许我更改 artifacts 并且不发布 sourceJar.

所以我有以下 config for Bintray :

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

bintray {
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")

    configurations = ['archives']
    pkg {
        repo = "youreponame" // repo name
        userOrg = 'org'
        name = "name" // Package name
        desc = "desc"
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        publish = true
    }
}

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    failOnError false
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}
artifacts {
    archives javadocJar
}

@aar 已发布,javadocJar 也已发布,但不是 sourceJar

如果有人偶然发现这个问题,请尝试用 maven-publish 解决它:

您可以定制发布的工件。这可能不是最好的方法,但以下方法适用于 Gradle 5.6+ :

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.android
                // don't publish source packages
                (getArtifacts() as Set<MavenArtifact>).removeIf { it.classifier == 'sources'}
            }
        }
    }
}