使用持续集成在Gradle中发布快照与发布版本

dev*_*dev 33 nexus dependency-management gradle

我正在学习Gradle,来自Ant + Ivy和Maven背景,我正试图围绕正确的方式来使用gradle发布我的软件的发布版本.我还需要不断地集成我的项目,而不必不断发布独立的工件.

Ant +常春藤

在Ant + Ivy世界中,我可以创建publishSnapshot和publishRelease目标.这些可以使用不同的常春藤解析器来解析和发布到我在Nexus中的单独快照或发布存储库.

Maven的

使用Maven,我可以定义一个snapshotRepositoryrepository在我的distributionManagement部分中将maven发布到我的单独快照或在Nexus中发布存储库.

摇篮

现在输入gradle.我怎样才能实现同样的功能?我正在使用常春藤风格的存储库.

感谢您提供的任何见解.

回答

感谢René在下面的回答,我终于能够创建一个可行的解决方案.问题的关键在于我需要不断整合我的所有项目.为此,我认为使用版本号声明依赖latest.integration是获取最新版本库的唯一方法,因此我需要使用常春藤样式存储库.

实际上,还有其他方法可以引入最新版本的库,以便在所有项目中不断集成我的软件.解决的办法是使用uploadArchives完全一样勒列出以下(也请注意,您将需要apply plugin: 'maven'为此工作.确保你的资料库也Maven的风格,并宣布的依赖时,您可以使用动态版本号如图所示这里.在我的情况是,我在common.gradle和下游项目中列出了一个全局版本号,我曾经version: version引用过全局版本变量.这样,我系统中的每个工件都有相同的版本.当它需要发布时,我可以将此值从1.0-SNAPSHOT更改为1.0并按顺序构建每个.

Ren*_*hke 51

您可以在"上载"任务(例如)任务中配置快照发布存储库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');  
            }  
        }  
    }  
}
Run Code Online (Sandbox Code Playgroud)

对于*-SNAPSHOT版本,snapshotRepository使用.否则使用版本 repo.


Pao*_*oni 48

如果要使用新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"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

参考:maven-publish和设置snapshotRepository和releaseRepository

  • 那么与仅使用 maven 插件相比,此解决方案的优势是什么? (2认同)