35

Ant+Ivy と Maven の両方のバックグラウンドから来て、Gradle を学習しているだけで、gradle を使用してソフトウェアのリリース バージョンを公開する適切な方法に頭を悩ませようとしています。また、独立したアーティファクトを常にリリースしなくても、プロジェクトを常に統合する必要があります。

アリ + アイビー

Ant + Ivy の世界では、publishSnapshot および publishRelease ターゲットを作成できます。これらはそれぞれ異なる Ivy リゾルバーを使用して、Nexus の個別のスナップショットまたはリリース リポジトリに解決して公開できます。

メイヴン

Maven を使用すると、自分のセクションでsnapshotRepositoryorを定義して、maven を別のスナップショットに公開したり、Nexus のリポジトリをリリースしたりできます。repositorydistributionManagement

グラドル

ここでgradleに入ります。これと同じ機能を実現するにはどうすればよいですか? アイビースタイルのリポジトリを使用しています。

あなたが提供できる洞察をありがとう。

答え

以下のルネの回答のおかげで、最終的に実行可能なソリューションを作成することができました。問題の核心は、すべてのプロジェクトを常に統合する必要があるということでした。これを行うには、バージョン番号を使用して依存関係を宣言することlatest.integrationが、ライブラリの最新バージョンを取得する唯一の方法であると考えたため、ivy スタイルのリポジトリを使用する必要がありました。

実際、すべてのプロジェクトでソフトウェアを継続的に統合するために、最新バージョンのライブラリを取り込む方法は他にもあります。解決策は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 に答える