我想将我的工件上传到远程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配置中的一个,那么构建是有效的,但不能作为一个整体。
有关如何在一个构建文件中配置两个目标归档的任何想法吗?
答案 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)
}
}