我正在学习Gradle,来自Ant + Ivy和Maven背景,我正试图围绕正确的方式来使用gradle发布我的软件的发布版本。我还需要不断地集成我的项目,而不必不断发布独立的工件。
Ant + Ivy
在Ant + Ivy世界中,我可以创建publishSnapshot和publishRelease目标。这些可以使用不同的常春藤解析器来解析和发布到我在Nexus中的单独快照或发布存储库。
的Maven
使用Maven,我可以在snapshotRepository
部分中定义repository
或distributionManagement
,以便将maven发布到我在Nexus中的单独快照或发布存储库。
摇篮
现在输入gradle。我怎样才能实现同样的功能?我正在使用常春藤风格的存储库。
感谢您提供的任何见解。
ANSWER
感谢René在下面的回答,我终于能够创建一个可行的解决方案。问题的关键在于我需要不断整合我的所有项目。为此,我认为使用版本号latest.integration
声明依赖是获取最新版本库的唯一方法,因此我需要使用常春藤样式存储库。
事实上,还有其他方法可以引入最新版本的库,以便在所有项目中持续集成我的软件。解决方案是完全按照下面列出的René使用uploadArchives
(另请注意,您需要apply plugin: 'maven'
才能使用此工具。确保您的存储库也是maven样式,并且在声明依赖关系时,可以使用here所示的动态版本号。在我的例子中,我在common.gradle和下游项目中列出了一个全局版本号,我用version: version
来引用全局版本变量。这样,我的系统中的每个工件都有相同的版本。当需要发布时,我可以将其从1.0-SNAPSHOT更改为1.0并按顺序构建每个工件。
答案 0 :(得分:48)
您可以在“上传”任务(例如uploadArchives
)任务中配置快照和发布存储库:
uploadArchives {
repositories {
mavenDeployer {
repository(url: 'http://myCompanyRepo.com:8081/releases') {
authentication(userName: 'admin', password: 'password');
}
snapshotRepository(url: 'http://myCompanyRepo.com:8081/snapshots') {
authentication(userName: 'admin', password: 'password');
}
}
}
}
对于*-SNAPSHOT
版本,使用snapshotRepository
。否则使用版本 repo。
答案 1 :(得分:44)
如果您想使用新的maven-publish
插件,可以使用if
声明上传到不同的存储库:
apply plugin: 'maven-publish'
...
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
repositories {
maven {
credentials {
username "anonymous"
}
if(project.version.endsWith('-SNAPSHOT')) {
url "http://example/artifactory/libs-snapshot-local"
} else {
url "http://example/artifactory/libs-release-local"
}
}
}
}
参考:maven-publish and setting snapshotRepository and releaseRepository