1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【JFrog】maven用のプライベートリポジトリをSonatype Nexus Repository ManagerからJFrog Artifactoryに移行した話

Last updated at Posted at 2023-11-06

やること

ASIS TOBE
2023RepoLogo.png logo-jfrog-artifactory-885x240-1.png

Maven用のプライベートリポジトリの移行を行います。

背景

会社の都合です。
Nexus用のサーバがEOLになるためです。
これを機にJFrogに移行したいとの要望がありました。

事前準備

あらかじめNexusを使ってビルドします。その際に作成されたローカルリポジトリ~/.m2/repositoryDesktopあたりに逃しておきます。この中のアーティファクトをこれからJFrogへアップロードしていきます。

STEP1:JFrog Artifactoryへリポジトリを作成

まずログインするためのアカウント登録とプライベートリポジトリの登録を行います。

JFrog ArtifactoryへログインしAPI KEYを確認します

スクリーンショット 2023-11-06 23.31.07.png

STEP2:settings.xmlの設定

settings.xmlに以下を追加します

<servers>
  <server>
    <id>リポジトリID</id>
    <username>あなたのアカウント</username>
    <password>あなたのAPI KEY</password>
  </server>
</servers>

これが作成したアーティファクトをアップロードする際の認証の役割を果たします。

<mirrors>
  <mirror>
    <id>central-mirror</id>
    <mirrorOf>central</mirrorOf>
    <url>https://repo.maven.apache.org/maven2/</url>
  </mirror>
  <mirror>
    <id>何でも</id>
    <mirrorOf>ミラーの名前</mirrorOf>
    <url>https://artifactoryのリポジトリURL</url>
  </mirror>
</mirrors>

mirrorで指定している場合はこのように設定します。
2021年以降、セントラルの取得先URLにデフォルトのhttpを指定できなくなりました。なのでセントラルの取得先URL(https)をここに指定します。プライベートなアーティファクトの取得先はhttps://artifactoryのリポジトリURLになります。

<distributionManagement>
  <repository>
    <id>リポジトリID</id>
    <name>何でも</name>
	<url>作ったアーティファクトJARのアップロード先</url>
  </repository>
</distributionManagement>

<distributionManagement>を記載すればビルドしたときにできたJARとPOMをどのリポジトリにアップロードするかを指定できます。

STEP3:ビルドとアーティファクトのアップロード

ビルドしてみましょう。

mvn clean package install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -s settings.xml

-s settings.xml を指定すればデフォルトの~/.m2/settings.xmlではなく、POMと同ディレクトリに置いたsettings.xmlを利用することができます。

この時点で

Downloading: https://artifactory/xxxx/yyyy.pom
Downloading: https://repo.maven.apache.org/zzzz.pom

のように指定したプライベートリポジトリとmaven-centralからアーティファクトを取得しようとします。

サードパーティ製のアーティファクトはhttps://repo.maven.apache.org/からダウンロードされます。

まだこの時点でJFrog Artiact上に何もアーティファクトを置いていないので

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  13.399 s
[INFO] Finished at: 2023-10-27T14:59:28+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project ...... Could not find artifact (アーティファクト) in リポジトリ名

みたいなエラーが出ます。

(アーティファクト)がなくてビルドできないと言われているので、これからそのないと言われているJARまたはPOMファイルをJFrog Artifactのリポジトリにアップロードします。

ここで使用するのがあらかじめ事前準備で退避しておいたrepositoryディレクトリです。

まず
https://jfrog.com/ja/getcli/

でJFrogのためのCLIをインストールします。

デスクトップに退避しておいたrepositoryディレクトリに移動したら

jfrog rt upload <アーティファクトのパス> <Jfrog Artifactryのリポジトリ名>

でアーティファクト(JAR・POM)をコマンドラインからアップロードします。

そしてローカルリポジトリ~/.m2/repository(アーティファクトを取得できなかった履歴が残っているから)を削除してから再度ビルドし、先ほどエラーで指摘されたアーティファクトが正常にJfrogからローカルへダウンロードされ、エラーの内容が変わったことを確認します。

同様に、ビルドが成功するまで

  • ビルド
  • エラー表示
  • エラーで指摘されたアーティファクト(JAR・POM)をCLIでアップロード
  • ~/.m2/repositoryを削除

を繰り返します。私の場合はアップロードすべきアーティファクトが多いのでPythonでこの繰り返しを自動化しました。mavenのtreeコマンドで依存アーティファクトの一覧を取得してまとめてアップロードするのも別の方法として考えたのですが、treeコマンドはparentまで表示してくれないのと、必要最低限のアップロードにしたかったのでこのアプローチでプライベートリポジトリの移行を行いました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?