かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

共有ライブラリを管理するために Sonatype の Nexus Repository Manager OSS を使用する ( その9 )( 1.0-SNAPSHOT のバージョンのまま Nexus にアップロードできるのか? )

概要

共有ライブラリを管理するために Sonatype の Nexus Repository Manager OSS を使用する ( その8 )( build.gradle に 1.0-SNAPSHOT のバージョンで記述している時にライブラリを更新するとすぐに反映されるのか? ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • バージョンが 1.0-SNAPSHOT の ksbysample-library-simpleutils ライブラリを uploadArchives タスクで Nexus に登録すると、Nexus の管理画面で見た時に 1.0-20160723.060157-5 のように timestamp が付いたバージョンに変わっており、かつ以前アップロードしたファイルが上書きされずに残ってしまうのですが、前のファイルをいちいち削除するのも手間なので 1.0-SNAPHOST のバージョン番号で Nexus に登録する方法がないか調べます。

参照したサイト・書籍

  1. 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

  2. Interface MavenDeployer
    https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/maven/MavenDeployer.html

    • gradle の MavenDeployer インターフェースのマニュアルです。閲覧時のマニュアルの gradle のバージョンは 2.14.1 でした。

目次

  1. Nexus に 1.0-SNAPSHOT のバージョン番号のまま登録するには?
    1. build.gradle を変更する
    2. Nexus に登録済の 1.0-20160716.025552-1 ~ 1.0-20160723.060157-5 を削除する
    3. Nexus に 1.0-SNAPSHOT で登録する
    4. ksbysample-webapp-demo プロジェクトでダウンロードしてみる
  2. 結論

手順

Nexus に 1.0-SNAPSHOT のバージョン番号のまま登録するには?

上の2つの Webページを見ると、1) uniqueVersion = false を設定すれば timestampe が付かなくなる、2) uniqueVersion は MavenDeployer に設定することができる、ようです。

build.gradle を変更する

  1. ksbysample-library-simpleutils プロジェクトを開きます。

  2. build.gradle を リンク先の内容 に変更します。

  3. Gradle projects View の左上にある「Refresh all Gradle projects」ボタンをクリックして build.gradle を反映します。

Nexus に登録済の 1.0-20160716.025552-1 ~ 1.0-20160723.060157-5 を削除する

  1. Nexus の管理画面 ( http://localhost:8081/ ) にアクセスし、画面右上の「Sign in」ボタンを押してから admin / admin123 でログインします。

  2. maven-snapshots の component 一覧を表示した後、ksbysample-library-simpleutils ライブラリの 1.0-20160723.060157-5 の行をクリックします。

    f:id:ksby:20160724194822p:plain

  3. クリックした component の画面が表示されますので、「Delete component」ボタンをクリックして削除します。

    f:id:ksby:20160724195152p:plain

  4. 上の操作を繰り返して、残りの 1.0-20160716.025552-1 ~ 1.0-20160723.053434-4 を削除します。削除し終わると、maven-snapshot repository は以下の画像のように何も component が登録されていない状態になります。

    f:id:ksby:20160724195552p:plain

Nexus に 1.0-SNAPSHOT で登録する

  1. Gradle projects View の uploadArchives タスクをダブルクリックして登録します。

    f:id:ksby:20160724200053p:plain

  2. Nexus の管理画面で maven-snapshots repository を表示すると 1.0-SNAPSHOT で登録されていることが確認できます。

    f:id:ksby:20160724200235p:plain

    f:id:ksby:20160724200358p:plain

    ※管理画面上にいつ更新されたのかの情報が出ていないことに気付きました。timestamp を付けないといつ更新されたのか全然分からなさそうです。

ksbysample-webapp-demo プロジェクトでダウンロードしてみる

  1. ksbysample-library-simpleutils プロジェクトを閉じて、ksbysample-webapp-demo プロジェクトを開きます。

  2. コマンドプロンプトから gradlew.bat build --refresh-dependencies コマンドを実行します。が、エラーが出て更新できませんでした。

    f:id:ksby:20160726003009p:plain

  3. gradle の cache を削除してみます。C:\Users\root.gradle\caches フォルダを削除します。

  4. IntelliJ IDEA のメイン画面に切り替えると、画面右下に Indexing... の表示が出るので処理が終了するまで待機します。

    f:id:ksby:20160726003632p:plain

  5. 処理が終了すると Project View の External Libraries に Java SE しか表示されなくなります。

    f:id:ksby:20160726003949p:plain

  6. Gradle projects View の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。

    更新が終了しても ksbysample-library-simpleutils ライブラリに赤の波線が表示されています。更新されていないようです。

    f:id:ksby:20160726004420p:plain

  7. 再度コマンドプロンプトから gradlew.bat build --refresh-dependencies コマンドを実行してみます。が、やっぱりダメでした。。。

    f:id:ksby:20160726005349p:plain

  8. 登録した 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
初版発行。