在Gradle构建中配置多个上载存储库

时间:2013-02-08 12:03:45

标签: repository release gradle

我想将我的工件上传到远程Nexus仓库。因此,我在Nexus中配置了snaphot和release repo。部署到两个工作。

现在我想配置我的构建,以便我可以决定要部署哪个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配置中的一个,那么构建是有效的,但不能作为一个整体。
有关如何在一个构建文件中配置两个目标归档的任何想法吗?

2 个答案:

答案 0 :(得分: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)并检查任务是否已安排执行。

答案 1 :(得分: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)
  }
}