Ant + IvyとMavenの両方のバックグラウンドから来たGradleを学んでおり、Gradleを使用してソフトウェアのリリースバージョンを公開するための適切な方法を頭に入れようとしています。また、独立したアーティファクトを絶えずリリースすることなく、プロジェクトを絶えず統合する必要があります。
アント+アイビー
Ant + Ivyの世界では、publishSnapshotおよびpublishReleaseターゲットを作成できます。これらはそれぞれ異なるIvyリゾルバーを使用して、Nexusの個別のスナップショットまたはリリースリポジトリを解決および公開できます。
Maven
Mavenを使用すると、snapshotRepository
セクションでrepository
またはdistributionManagement
を定義して、MavenをNexusの個別のスナップショットまたはリリースリポジトリに公開できます。
Gradle
Gradleを入力します。これと同じ機能をどのように実現できますか?私はアイビースタイルのリポジトリを使用しています。
ご意見をお寄せいただきありがとうございます。
[〜#〜] answer [〜#〜]
以下のルネの回答のおかげで、私はついに実行可能なソリューションを作成することができました。問題の核心は、すべてのプロジェクトで絶えず統合する必要があるということでした。これを行うには、バージョン番号を使用して依存関係を宣言すると考えましたlatest.integration
は私のライブラリの最新バージョンを取り込む唯一の方法であったため、ivyスタイルのリポジトリを使用する必要がありました。
実際、すべてのプロジェクトにわたってソフトウェアを継続的に統合するために、ライブラリの最新バージョンを取り込む他の方法があります。解決策は、Reneが以下にリストしたとおりにuploadArchives
を使用することです(また、apply plugin: 'maven'
これが機能するため。リポジトリもMavenスタイルであることを確認してください。依存関係を宣言するときは、 here のように動的バージョン番号を使用できます。私の場合、common.gradleにグローバルバージョン番号をリストし、ダウンストリームプロジェクトではversion: version
は、グローバルバージョン変数を参照します。このようにして、システム内の各アーティファクトは同じバージョンになります。リリースするときは、これを1.0-SNAPSHOTから1.0に変更して、それぞれを順番にビルドできます。
「アップロード」タスク(例:uploadArchives
)タスクでsnapshotおよびreleaseリポジトリを設定できます:
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
が使用されます。それ以外の場合は、releasesリポジトリが使用されます。
新しい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