articles:archiva

Apache Archivaで自前のMavenリポジトリを作る

Apache Archivaは、Apache Mavenのリポジトリマネージャ。 リポジトリマネージャを使用すると、CentralのようなMavenリポジトリを自前で用意できる。

競合製品には、Nexus Repository Manager OSSJFrog Artifactoryがある。

CentOS 7.7のminimal-installへのインストール。ホストのIPアドレスは``192.168.0.11``とする。

ArchivaはLinuxのほかにWindowsやSolarisにも対応している。 また、インストールしたディレクトリと別のディレクトリから実行したり、リポジトリのバックエンドにCassandraを使用したりもできる。 warファイルもあるのでサーブレットとして配備も出来る。

Java 1.8をインストールする。 Java 11をインストールすると、Archivaの起動に失敗する。

yum -y install java-1.8.0-openjdk-headless

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
cd /opt/apache-archiva-2.2.4
bin/archiva start

停止はbin/archiva stop

firewall-cmd --add-port 8080/tcp
firewall-cmd --runtime-to-permanent
  1. http://192.168.0.11:8080/にアクセス
  2. Create Admin Userをクリック
  3. パスワードとメールアドレスを設定する
  • 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がついているプロジェクトの成果物の配備先
  1. GUIに管理者ユーザでログイン
  2. GUIの左にあるメニューから、USERSの下のManageを選択
  3. Users Listの下のAddを選択してユーザを追加、Validatedはチェックしておいた方が良さそう、必要事項を記入したらSaveをクリック
  4. 追加したユーザのEditをクリック、さらにEdit Rolesを選択、参照するリポジトリのRepository Observerをチェック、更新するリポジトリのRepository Managerをチェック、Updateをクリック

settings.xmlにリポジトリやミラー、ユーザ名/パスワードを設定。 各プロジェクトのpom.xmlで配備先のリポジトリを指定する。 配備はmvn deploy

settings.xml

settings.xmlは通常${user.home}/.m2/settings.xmlにある。 mvnのオプション-sで指定可能。 詳細はhttps://maven.apache.org/settings.htmlを参照。

settings.xml
<settings>
  <servers>
    <!-- リポジトリごとに、ユーザの認証情報を記述 -->
    <!-- ここのserver/idが、後続のmirror/idやprofile/idと一致していること -->
    <server>
      <id>archiva.internal</id>
      <username>username</username>
      <password>password</password>
    </server>
    <server>
      <id>archiva.snapshots</id>
      <username>username</username>
      <password>password</password>
    </server>
  </servers>
 
  <!-- Maven CentralのミラーとしてRELEASE用リポジトリを設定 -->
  <mirrors>
    <mirror>
      <id>archiva.internal</id>
      <name>Archiva Managed Internal Release Repository</name>
      <url>http://192.168.0.11:8080/repository/internal</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
 
  <!-- 配備先のリポジトリを登録 -->
  <profiles>
    <profile>
      <id>archiva repo</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repositories>
        <repository>
          <id>archiva.internal</id>
          <name>Archiva Managed Internal Release Repository</name>
          <url>http://192.168.0.11:8080/repository/internal</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
        <repository>
          <id>archiva.snapshots</id>
          <name>Archiva Managed Internal Snapshot Repository</name>
          <url>http://192.168.0.11:8080/repository/snapshots</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>
</settings>

pom.xml

pom.xml
<project>
 
  <!-- その他の設定は割愛 -->
 
  <!-- RELEASE用とSNAPSHOT用のリポジトリを設定 -->
  <!-- repository/idを、settings.xmlの*/idと一致させること -->
  <!-- 配備が失敗する場合は、まずidの不一致を疑う -->
  <distributionManagement>
    <repository>
      <id>archiva.internal</id>
      <name>Archiva Managed Internal Release Repository</name>
      <url>http://192.168.0.11:8080/repository/internal</url>
    </repository>
    <snapshotRepository>
      <id>archiva.snapshots</id>
      <name>Archiva Managed Internal Snapshot Repository</name>
      <url>http://192.168.0.11:8080/repository/snapshots</url>
    </snapshotRepository>
  </distributionManagement>
</project>

配備

mvn deploy

deployを実行するプラグインの詳細はApache Maven Deploy Pluginを参照。

GUIのhttp://192.168.169.206:8080/#searchhttp://192.168.0.11:8080/#browseから配備されたファイルを確認できる。

RELEASEの成果物を、まずはStaging用リポジトリに配備。 Staging用リポジトリを指定して成果物を取得し、テストする。 動作を確認した後にリリース用リポジトリにマージする。 ユーザはリリース用リポジトリから成果物を取得する。

まずは、リポジトリの準備が必要。 リポジトリ作成時に、Staging Repositoryにチェックを付ける。 <id><id>-stageのリポジトリができる。

Mavenで配備するときは、<id>-stageの方に配備。 <id>-stageから成果物を取得してテストする。 テストが完了したら、GUIのRepositoriesから、 <id>-stageActionsをクリックしMerge this repositoryを選択。 リリース用のリポジトリ<id>を選択してマージする。 実際にはリポジトリ内の成果物を全てコピーしている。

ユーザの権限設定がリポジトリ単位であることを考えると、 グループごとにリポジトリを作成した方が運用方法として正しそう。

Virtual Repositoryとも呼んでいる。 複数のリポジトリを一つのリポジトリに見せる。 このリポジトリは参照のみ可能。

Staging Repositoriesで書いたようにプロジェクトごとに複数のリポジトリを作成すると、 Mavenのsettings.xmlにすべてのリポジトリを設定して最新に保つのが大変。 Repository Gorupsでまとめておくと、参照に関しては一つのリポジトリを設定するだけで済む。

RELEASEの配備先はプロジェクトのStage用リポジトリを設定。 最後のマージはGUIから。

settings.xml
<settings>
  <servers>
    <!-- virtual repository、ゲストが必要なリポジトリを参照可能なら認証情報は不要 -->
    <server>
      <id>archiva.repo</id>
      <username>username</username>
      <password>password</password>
    </server>
    <!-- SNAPSHOT用 -->
    <server>
      <id>archiva.snapshots</id>
      <username>username</username>
      <password>password</password>
    </server>
    <!-- RELEASEのstaging用 -->
    <server>
      <id>project.staging</id>
      <username>username</username>
      <password>password</password>
    </server>
  </servers>
 
  <mirrors>
    <!-- ミラーはvirtural repositoryを指定 -->
    <mirror>
      <id>archiva.repo</id>
      <name>Archiva Managed Internal Release Repository</name>
      <url>http://192.168.0.11:8080/repository/maven2</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
 
  <profiles>
    <profile>
      <id>archiva repo</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repositories>
        <repository>
          <id>archiva.repo</id>
          <name>Archiva Managed Virtual Release Repository</name>
          <url>http://192.168.0.11:8080/repository/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
        <repository>
          <id>archiva.snapshots</id>
          <name>Archiva Managed Internal Snapshot Repository</name>
          <url>http://192.168.0.11:8080/repository/snapshots</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
        <repository>
          <id>project.staging</id>
          <name>Archiva Managed Internal Release Repository</name>
          <url>http://192.168.0.11:8080/repository/project-stage</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>
</settings>
pom.xml
  <distributionManagement>
    <!-- RELEASEのstaging用 -->
    <repository>
      <id>project.staging</id>
      <url>http://192.168.0.11:8080/repository/project-stage</url>
    </repository>
    <!-- SNAPSHOT用 -->
    <snapshotRepository>
      <id>archiva.snapshots</id>
      <url>http://192.168.0.11:8080/repository/snapshots</url>
    </snapshotRepository>
  </distributionManagement>
  • 最終更新: 2020-04-04 04:59
  • by nabium