3

我想将我的工件上传到远程 Nexus 存储库。因此,我在 Nexus 中配置了快照和发布仓库。部署到这两个作品。

现在我想配置我的构建,以便我可以决定要部署在哪个 repo 中:

  • 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 配置之一,则构建工作,但不是作为一个整体。
任何想法如何在一个构建文件中配置两个目标档案?

4

2 回答 2

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)并检查任务是否计划执行。

于 2013-02-09T08:00:49.090 回答
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)
  }
}
于 2013-07-13T13:30:04.917 回答