【问题标题】:Upload sources to nexus repository with gradle使用 gradle 将源上传到 nexus 存储库
【发布时间】:2015-04-22 05:16:45
【问题描述】:

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

【问题讨论】:

    标签: java gradle nexus


    【解决方案1】:

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

    使用新的maven-publish 插件时情况也没有改变。在这里,您还需要显式定义其他工件:

    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
      

      【讨论】:

      • 一个好的答案应该包括所有相关信息,而不是链接到外部资源:“始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。”
      • 抱歉,这与我发布的解决方案相同。我正在寻找更短的东西。可能是 mavenDeployer 上的配置。
      • 已更新。就像添加插件并注册您的存储库一样简单。
      【解决方案3】:

      Nexus 用于保存工件,而不是源代码。

      对于上传编译的工件我做:

      apply plugin: 'java'
      apply plugin: 'maven'
      
      uploadArchives {
          repositories {
              mavenDeployer {
                  repository(url: "http://nexus-server:8081/nexus/content/repositories/snapshots") {
                      authentication(userName: "admin", password: "secret")
                  }
                  pom.version = "1.0.0-SNAPSHOT"
                  pom.artifactId = "${project.name}"
                  pom.groupId = "path.to.artifact"
              }
          }
      }
      

      并从控制台调用上传

      $ gradle upload
      

      对于源代码使用 maven 或 git 存储库

      【讨论】:

      • 我想上传工件的来源,而不是版本我的源代码
      • 这个答案是非常错误的。上传属于工件存储库的源代码和 javadocs 是一个非常方便的功能。您的 IDE 可以下载这些工件以向您显示库的源代码。只需尝试使用任何第三方开源库,如 Apache Commons。您可以查看他们的源代码而无需获得他们的完整仓库。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多