35

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

蚂蚁+常春藤

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

马文

使用 Maven,我可以在我的部分中定义一个snapshotRepositoryor来让 Maven 发布到我单独的快照或 Nexus 中的发布存储库。repositorydistributionManagement

摇篮

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

感谢您提供的任何见解。

回答

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

事实上,还有其他方法可以引入最新版本的库,以便在所有项目中持续集成我的软件。解决方案是uploadArchives完全按照 René 下面列出的方式使用(另请注意,您需apply plugin: 'maven'要这样做才能工作。确保您的存储库也是 maven 样式,并且在声明依赖项时,您可以使用如下所示的动态版本号在我的情况,我在common.gradle中列出了一个全局版本号,在下游项目中,我曾经version: version引用全局版本变量。这样,我系统中的每个工件都有相同的版本。到发布的时候,我可以将其从 1.0-SNAPSHOT 更改为 1.0 并按顺序构建每个。

4

2 回答 2

55

您可以在“上传”任务(例如)任务中配置快照发布存储库: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使用。否则使用发布仓库。

于 2013-05-27T05:41:57.577 回答
51

如果要使用新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 和设置 snapshotRepository 和 releaseRepository

于 2014-02-13T16:34:36.457 回答