共有ライブラリを管理するために Sonatype の Nexus Repository Manager OSS を使用する ( その9 )( 1.0-SNAPSHOT のバージョンのまま Nexus にアップロードできるのか? )
概要
- 今回の手順で確認できるのは以下の内容です。
- バージョンが 1.0-SNAPSHOT の ksbysample-library-simpleutils ライブラリを uploadArchives タスクで Nexus に登録すると、Nexus の管理画面で見た時に 1.0-20160723.060157-5 のように timestamp が付いたバージョンに変わっており、かつ以前アップロードしたファイルが上書きされずに残ってしまうのですが、前のファイルをいちいち削除するのも手間なので 1.0-SNAPHOST のバージョン番号で Nexus に登録する方法がないか調べます。
参照したサイト・書籍
Apache Maven Project - Disable timestamps suffix in an artifact
http://maven.apache.org/plugins-archives/maven-deploy-plugin-2.7/examples/disabling-timestamps-suffix.htmlInterface MavenDeployer
https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/maven/MavenDeployer.html- gradle の MavenDeployer インターフェースのマニュアルです。閲覧時のマニュアルの gradle のバージョンは 2.14.1 でした。
目次
手順
Nexus に 1.0-SNAPSHOT のバージョン番号のまま登録するには?
- Apache Maven Project - Disable timestamps suffix in an artifact
http://maven.apache.org/plugins-archives/maven-deploy-plugin-2.7/examples/disabling-timestamps-suffix.html - Interface MavenDeployer
https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/maven/MavenDeployer.html
上の2つの Webページを見ると、1) uniqueVersion = false を設定すれば timestampe が付かなくなる、2) uniqueVersion は MavenDeployer に設定することができる、ようです。
build.gradle を変更する
ksbysample-library-simpleutils プロジェクトを開きます。
build.gradle を リンク先の内容 に変更します。
Gradle projects View の左上にある「Refresh all Gradle projects」ボタンをクリックして build.gradle を反映します。
Nexus に登録済の 1.0-20160716.025552-1 ~ 1.0-20160723.060157-5 を削除する
Nexus の管理画面 ( http://localhost:8081/ ) にアクセスし、画面右上の「Sign in」ボタンを押してから admin / admin123 でログインします。
maven-snapshots の component 一覧を表示した後、ksbysample-library-simpleutils ライブラリの 1.0-20160723.060157-5 の行をクリックします。
クリックした component の画面が表示されますので、「Delete component」ボタンをクリックして削除します。
上の操作を繰り返して、残りの 1.0-20160716.025552-1 ~ 1.0-20160723.053434-4 を削除します。削除し終わると、maven-snapshot repository は以下の画像のように何も component が登録されていない状態になります。
Nexus に 1.0-SNAPSHOT で登録する
Gradle projects View の uploadArchives タスクをダブルクリックして登録します。
Nexus の管理画面で maven-snapshots repository を表示すると 1.0-SNAPSHOT で登録されていることが確認できます。
※管理画面上にいつ更新されたのかの情報が出ていないことに気付きました。timestamp を付けないといつ更新されたのか全然分からなさそうです。
ksbysample-webapp-demo プロジェクトでダウンロードしてみる
ksbysample-library-simpleutils プロジェクトを閉じて、ksbysample-webapp-demo プロジェクトを開きます。
コマンドプロンプトから
gradlew.bat build --refresh-dependencies
コマンドを実行します。が、エラーが出て更新できませんでした。gradle の cache を削除してみます。C:\Users\root.gradle\caches フォルダを削除します。
IntelliJ IDEA のメイン画面に切り替えると、画面右下に Indexing... の表示が出るので処理が終了するまで待機します。
処理が終了すると Project View の External Libraries に Java SE しか表示されなくなります。
Gradle projects View の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。
更新が終了しても ksbysample-library-simpleutils ライブラリに赤の波線が表示されています。更新されていないようです。
再度コマンドプロンプトから
gradlew.bat build --refresh-dependencies
コマンドを実行してみます。が、やっぱりダメでした。。。登録した 1.0-SNAPSHOT の ksbysample-library-simpleutils ライブラリは Nexus の管理画面から削除しておきます。
結論
build.gradle に uniqueVersion = false
を記述することで Nexus に 1.0-SNAPSHOT で登録することはできますが、別のプロジェクトでダウンロードして利用できませんでした。uniqueVersion = false
は設定したらダメそうです。
アップロードした日時が分かるのでやっぱり timestamp が付いた方が運用しやすそうとは思うのですが、過去のバージョンを管理画面ではなく gradle のスクリプトで削除したりできないものでしょうか。。。
ソースコード
build.gradle
uploadArchives { def nexusUrl = "http://localhost:8081" def nexusUsername = "admin" def nexusPassword = "admin123" repositories { mavenDeployer { repository(url: "${nexusUrl}/repository/maven-releases") { authentication(userName: nexusUsername, password: nexusPassword) } snapshotRepository(url: "${nexusUrl}/repository/maven-snapshots") { authentication(userName: nexusUsername, password: nexusPassword) } uniqueVersion = false } } }
- uploadArchives タスク内の mavenDeployer に
uniqueVersion = false
を追加します。
履歴
2016/07/26
初版発行。