使用 gradle 将源上传到 nexus 存储库

2022-09-01 21:22:59

我使用 gradle 的 maven 插件成功地将我的 jar 上传到 nexus 存储库,但它没有上传源代码。这是我的配置:

uploadArchives {
    repositories{
        mavenDeployer {
            repository(url: "http://...") {
                 authentication(userName: "user", password: "myPassword")
            }
        }
    }
}

我搜索并发现我可以通过添加新任务来添加源。

task sourcesJar(type: Jar, dependsOn:classes) {
     classifier = 'sources'
     from sourceSets.main.allSource
}

artifacts {
     archives sourcesJar
}

这工作正常,但我认为通过配置maven插件必须有更好的解决方案,例如uploadSource = true,如下所示:

uploadArchives {
    repositories{
        mavenDeployer {
            repository(url: "http://...") {
                 authentication(userName: "user", password: "myPassword")
            }
            uploadSources = true
        }
    }
}

答案 1

没有比你自己描述的更好的解决方案了。gradle maven 插件正在上传当前项目中生成的所有工件。这就是为什么你必须显式创建一个“源”工件。

使用新的 maven 发布插件时,情况也不会改变。在这里,您还需要显式定义其他工件:

task sourceJar(type: Jar) {
    from sourceSets.main.allJava
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java

            artifact sourceJar {
                classifier "sources"
            }
        }
    }
}

原因是 gradle 更像是一个通用的构建工具,而不是局限于纯 Java 项目。


答案 2

您可以使用 gradle-nexus-plugin

为了使用插件,请添加以下行并导入插件

buildscript {
     repositories {
         mavenLocal()
         jcenter {
            url "http://jcenter.bintray.com/"
        }
     }
     dependencies {
         classpath 'com.bmuschko:gradle-nexus-plugin:2.3'
     }
 }

apply plugin: 'com.bmuschko.nexus'

添加此部分,您将在其中配置要部署的 url

nexus {
     sign = false
     repositoryUrl = 'http://localhost:8081/nexus/content/repositories/releases/'
     snapshotRepositoryUrl = 'http://localhost:8081/nexus/content/repositories/internal-snapshots/'
 }

注意:您必须具有 ~/.gradle/gradle.properties

nexusUsername = deployment
nexusPassword = deployment123

推荐