2013-02-08 24 views
3

我想将我的工件上传到远程Nexus存储库。因此我在Nexus中配置了快照和发布回购。部署到两个作品。在Gradle构建中配置多个上传存储库

现在,我想我的生成配置,所以我可以决定在回购我想部署:

  • gradle uploadArchives应该部署到我的快照回购
  • gradle release uploadArchives应该部署到我发布回购

这是我尝试:

apply plugin: 'war' 
apply plugin: 'maven' 

group = 'testgroup' 
version = '2.0.0' 
def release = false 

repositories { 
    mavenCentral() 
    mavenLocal() 
} 

dependencies{ providedCompile 'javax:javaee-api:6.0' } 

task release <<{ 
    release = true; 
    println 'releasing!' 
} 

uploadArchives { 
    repositories { 

     mavenDeployer { 
      repository(url: "http://.../nexus/content/repositories/releases"){ 
       authentication(userName: "admin", password: "admin123") 
      } 
      addFilter('lala'){ x, y -> release } 
     } 
     mavenDeployer { 
      repository(url: "http://.../nexus/content/repositories/snapshots"){ 
       authentication(userName: "admin", password: "admin123") 
      } 
      addFilter('lala'){ x, y ->!release} 
      pom.version = version + '-SNAPSHOT' 
     } 
    } 
} 

如果我注释掉两个mavenDeployer配置中的一个,但不能作为一个整体,构建工作。
任何想法如何在一个构建文件中配置两个目标档案?

回答

5

一个解决方案是添加一个if-else语句,根据具体情况确切地添加两个展开程序中的一个。例如:

// should defer decision until end of configuration phase 
gradle.projectsEvaluated { 
    uploadArchives { 
     repositories { 
      mavenDeployer { 
       if (version.endsWith("-SNAPSHOT")) { ... } else { ... } 
      }    
     } 
    } 
} 

如果确实需要改变基于某些任务是否是“存在”的配置,你可以让基于gradle.startParameter.taskNames热切的决定(但你只会赶上被指定的任务作为Gradle调用的一部分),或使用gradle.taskGraph.whenReady回调(而不是gradle.projectsEvaluated)并检查任务是否计划执行。

+0

我想我找到了一个更好的解决方案(纠正我,如果我错了):只需添加另一个配置(例如releaseArchives)。然后,我可以添加两个回购站,一个用于uploadArchives(快照),另一个用于uploadReleaseArchives(刚发布)。另一个优点是,我不必在发布时更改项目版本。也许你可以告诉我,我的解决方案是否不好,然后我会接受你的答案,或者我的解决方案是好的/更好的,然后我会回答我的问题并接受我的答案。由于我是新来的Stackoverflow,我不知道接受自己的答案是不好的做法.... – huzi 2013-02-11 15:51:33

+0

只要您将其配置为包含相同的工件,添加其他配置也应该工作。无论如何,您必须使用快照工件的快照版本。否则,客户不会认识到这一点。 – 2013-02-11 18:30:30

+0

@huzi能否请您发表您自己的答案,而不必更改版本代码会好得多 – 2015-05-18 09:29:49

5

纠正我,如果我错了,但不应该在这种情况下使用单独的snapshotRepository(而不是if语句)?例如,

mavenDeployer { 

    repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { 
    authentication(userName: sonatypeUsername, password: sonatypePassword) 
    } 

    snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") { 
    authentication(userName: sonatypeUsername, password: sonatypePassword) 
    } 
} 
+0

工作的很好,谢谢! – 2014-08-22 15:06:09

+3

mavenDeployer知道何时/如何使用快照vs发布? – 2016-11-16 23:32:26

相关问题