如何使用Gradle将依赖项Artifact上传到Maven Repository(NEXUS)?

问题描述:

我想从一个Nexus存储库下载一个工件,并使用Gradle将其上传到另一个工作站。如何使用Gradle将依赖项Artifact上传到Maven Repository(NEXUS)?

我的摇篮建立文件如下:

dependencies { 
    compile group: ARTIFACT_GROUP_ID, name: ARTIFACT_ARTIFACT_ID, version: ARTIFACT_VERSION 
} 

// Get dependency Artifact file 
task upload_artifact(type: Jar){ 
    from(file(project.configurations.compile.find { it.name.startsWith(ARTIFACT_ARTIFACT_ID+"-"+ARTIFACT_VERSION) })) 
} 

// Finally publish the artifact 
publishing { 
    repositories{ 
      maven{ 
       url NEXUS_URL 
       credentials { 
        username NEXUS_USER 
        password NEXUS_PASSWORD 
       } 

      } 
     } 
    publications { 
     maven_artifact(MavenPublication) { 

      //GAV Co-ordinates to use to publish the artifact 
      artifact upload_artifact 
      groupId ARTIFACT_GROUP_ID 
      artifactId ARTIFACT_ARTIFACT_ID 
      version ARTIFACT_UPLOAD_VERSION 


     } 
    } 
} 

的上传作品,它与上传正确的组,工件ID和版本罐子。它还将其上传到正确的位置。

问题:

上传的罐子是将要上传包含实际罐子一个归档。

例如,如果我想下载artifact.jar并上传到另一个关系库,脚本上传的artifact.jar正确的关系库,但如果我下载上传artifact.jar并打开压缩包,我发现在它的下载artifact.jar

我弄明白了。更新后的脚本如下:

dependencies { 
    compile group: ARTIFACT_GROUP_ID, name: ARTIFACT_ARTIFACT_ID, version: ARTIFACT_VERSION 
} 

// Finally publish the artifact 
publishing { 
    repositories{ 
      maven{ 
       url NEXUS_URL 
       credentials { 
        username NEXUS_USER 
        password NEXUS_PASSWORD 
       } 

      } 
     } 
    publications { 
     maven_artifact(MavenPublication) { 

      //GAV Co-ordinates to use to publish the artifact 
      artifact file(project.configurations.compile.find { it.name.startsWith(ARTIFACT_ARTIFACT_ID+"-"+ARTIFACT_VERSION) }) 
      groupId ARTIFACT_GROUP_ID 
      artifactId ARTIFACT_ARTIFACT_ID 
      version ARTIFACT_UPLOAD_VERSION 


     } 
    } 
} 

而不是使用“upload_artifact”任务,以指定的神器被上传,我直接通过文件作为参数传递给maven_artifact任务的artifact方法。

我,因为扩展了这一解决方案,包括所有的文物

apply plugin: 'java' 
apply plugin: 'maven-publish' 

dependencies { 
    runtime 'log4j:log4j:1.2.17' 
    runtime 'junit:junit:4.12' 
} 

repositories { 
    flatDir { 
     dirs project.projectDir 
    } 
} 

publishing { 
    repositories { 
     maven { 
      url 'http://example.org/nexus/content/repositories/foo-releases' 
      credentials { 
       username 'username' 
       password 'password' 
      } 
     } 
    } 

    configurations.runtime.allDependencies.each { 
     def dep = it 
     def file = file(configurations.runtime.find { it.name.startsWith("${dep.name}-${dep.version}") }) 

     publications.create(it.name, MavenPublication, { 
      artifact file 
      groupId dep.group 
      artifactId dep.name 
      version dep.version 
     }) 
    } 
}