====== Apache Archivaで自前のMavenリポジトリを作る ======
{{tag>java maven centos7}}
[[https://archiva.apache.org/|Apache Archiva]]は、[[https://maven.apache.org/|Apache Maven]]のリポジトリマネージャ。
リポジトリマネージャを使用すると、[[https://repo1.maven.org/maven2/|Central]]のようなMavenリポジトリを自前で用意できる。
競合製品には、[[https://www.sonatype.com/nexus-repository-oss|Nexus Repository Manager OSS]]や[[https://jfrog.com/open-source/#artifactory|JFrog Artifactory]]がある。
===== CentOS 7へArchiva 2.2.4をインストール =====
CentOS 7.7のminimal-installへのインストール。ホストのIPアドレスは``192.168.0.11``とする。
ArchivaはLinuxのほかにWindowsやSolarisにも対応している。
また、インストールしたディレクトリと別のディレクトリから実行したり、リポジトリのバックエンドにCassandraを使用したりもできる。
warファイルもあるのでサーブレットとして配備も出来る。
==== Javaのインストール ====
Java 1.8をインストールする。
Java 11をインストールすると、Archivaの起動に失敗する。
yum -y install java-1.8.0-openjdk-headless
==== Archivaをダウンロードして展開する ====
[[https://archiva.apache.org/download.cgi]]からダウンロード。
cd /opt
curl -O http://ftp.kddilabs.jp/infosystems/apache/archiva/2.2.4/binaries/apache-archiva-2.2.4-bin.tar.gz
tar xzf apache-archiva-2.2.4-bin.tar.gz
rm apache-archiva-2.2.4-bin.tar.gz
===== Quick Startで試してみる =====
* [[https://archiva.apache.org/docs/2.2.4/quick-start.html|Quick Start]]
==== バックグラウンドで起動 ====
cd /opt/apache-archiva-2.2.4
bin/archiva start
停止は''bin/archiva stop''。
==== ファイアウォールの例外に8080番ポートを追加 ====
firewall-cmd --add-port 8080/tcp
firewall-cmd --runtime-to-permanent
==== Archivaにアクセスして、管理者のアカウントを作成する ====
- ''http://192.168.0.11:8080/''にアクセス
- ''Create Admin User''をクリック
- パスワードとメールアドレスを設定する
==== この時点で出来ること ====
* [[https://repo1.maven.org/maven2/|Maven Central]]のミラー
* RELEASE用のリポジトリへのアクセス
* SNAPSHOT用のリポジトリへのアクセス
* 管理者(admin)ユーザはリポジトリの更新と参照が可能
* ゲスト(guest)ユーザはリポジトリの参照が可能
==== デフォルトで用意されているリポジトリ ====
=== RELEASE用リポジトリ ===
* ''http://192.168.0.11:8080/repository/internal''
* バージョンに''-SNAPSHOT''がついていないプロジェクトの成果物の配備先
* Maven Centralからミラーしたファイルの保管
=== SNAPSHOT用のリポジトリ ===
* ''http://192.168.0.11:8080/repository/snapshots''
* バージョンに''-SNAPSHOT''がついているプロジェクトの成果物の配備先
==== プロジェクトを配備するためのユーザを追加 ====
- GUIに管理者ユーザでログイン
- GUIの左にあるメニューから、''USERS''の下の''Manage''を選択
- ''Users List''の下の''Add''を選択してユーザを追加、''Validated''はチェックしておいた方が良さそう、必要事項を記入したら''Save''をクリック
- 追加したユーザの''Edit''をクリック、さらに''Edit Roles''を選択、参照するリポジトリの''Repository Observer''をチェック、更新するリポジトリの''Repository Manager''をチェック、''Update''をクリック
==== Mavenでプロジェクトを配備する ====
''settings.xml''にリポジトリやミラー、ユーザ名/パスワードを設定。
各プロジェクトの''pom.xml''で配備先のリポジトリを指定する。
配備は''mvn deploy''。
=== settings.xml ===
''settings.xml''は通常''${user.home}/.m2/settings.xml''にある。
''mvn''のオプション''-s''で指定可能。
詳細は[[https://maven.apache.org/settings.html]]を参照。
archiva.internal
username
password
archiva.snapshots
username
password
archiva.internal
Archiva Managed Internal Release Repository
http://192.168.0.11:8080/repository/internal
central
archiva repo
true
archiva.internal
Archiva Managed Internal Release Repository
http://192.168.0.11:8080/repository/internal
true
false
archiva.snapshots
Archiva Managed Internal Snapshot Repository
http://192.168.0.11:8080/repository/snapshots
false
true
=== pom.xml ===
archiva.internal
Archiva Managed Internal Release Repository
http://192.168.0.11:8080/repository/internal
archiva.snapshots
Archiva Managed Internal Snapshot Repository
http://192.168.0.11:8080/repository/snapshots
=== 配備 ===
mvn deploy
''deploy''を実行するプラグインの詳細は[[http://maven.apache.org/plugins/maven-deploy-plugin/index.html|Apache Maven Deploy Plugin]]を参照。
GUIの''http://192.168.169.206:8080/#search''や''http://192.168.0.11:8080/#browse''から配備されたファイルを確認できる。
===== Staging Repositories =====
RELEASEの成果物を、まずはStaging用リポジトリに配備。
Staging用リポジトリを指定して成果物を取得し、テストする。
動作を確認した後にリリース用リポジトリにマージする。
ユーザはリリース用リポジトリから成果物を取得する。
まずは、リポジトリの準備が必要。
リポジトリ作成時に、''Staging Repository''にチェックを付ける。
''''と''-stage''のリポジトリができる。
Mavenで配備するときは、''-stage''の方に配備。
''-stage''から成果物を取得してテストする。
テストが完了したら、GUIの''Repositories''から、
''-stage''の''Actions''をクリックし''Merge this repository''を選択。
リリース用のリポジトリ''''を選択してマージする。
実際にはリポジトリ内の成果物を全てコピーしている。
ユーザの権限設定がリポジトリ単位であることを考えると、
グループごとにリポジトリを作成した方が運用方法として正しそう。
===== Repository Groups =====
Virtual Repositoryとも呼んでいる。
複数のリポジトリを一つのリポジトリに見せる。
このリポジトリは参照のみ可能。
Staging Repositoriesで書いたようにプロジェクトごとに複数のリポジトリを作成すると、
Mavenの''settings.xml''にすべてのリポジトリを設定して最新に保つのが大変。
Repository Gorupsでまとめておくと、参照に関しては一つのリポジトリを設定するだけで済む。
RELEASEの配備先はプロジェクトのStage用リポジトリを設定。
最後のマージはGUIから。
archiva.repo
username
password
archiva.snapshots
username
password
project.staging
username
password
archiva.repo
Archiva Managed Internal Release Repository
http://192.168.0.11:8080/repository/maven2
central
archiva repo
true
archiva.repo
Archiva Managed Virtual Release Repository
http://192.168.0.11:8080/repository/maven2
true
false
archiva.snapshots
Archiva Managed Internal Snapshot Repository
http://192.168.0.11:8080/repository/snapshots
false
true
project.staging
Archiva Managed Internal Release Repository
http://192.168.0.11:8080/repository/project-stage
true
false
project.staging
http://192.168.0.11:8080/repository/project-stage
archiva.snapshots
http://192.168.0.11:8080/repository/snapshots