Skip to main content

Apache Mavenレジストリの利用

GitHub Packages にパッケージを公開するよう Apache Mavenを設定し、GitHub Packages に保存されたパッケージを依存関係としてJavaプロジェクトで利用できます。

Note

サイト管理者はサポートされている各パッケージの種類を有効または無効にできるので、このパッケージの種類はインスタンスで利用できない可能性があります。 詳しくは、「Enterprise 向けのパッケージエコシステムサポートを設定する」を参照してください。

GitHub Packages への認証を行う

Note

GitHub Packages では、personal access token (classic)を使用した認証のみがサポートされています。 詳しくは、「個人用アクセス トークンを管理する」を参照してください。

非公開パッケージ、内部パッケージ、公開パッケージを発行、インストール、削除するには、アクセス トークンが必要です。

personal access token (classic) を使って、GitHub Packages または GitHub Enterprise Server API の認証を受けることができます。 personal access token (classic) を作成するときは、必要に応じてさまざまなスコープをトークンに割り当てることができます。 personal access token (classic) のパッケージ関連のスコープの詳細については、「GitHub Packagesの権限について」を参照してください。

GitHub Actionsワークフロー内でGitHub Packagesレジストリに認証を受けるには、以下の方法が使えます。

  • GITHUB_TOKEN では、ワークフロー リポジトリに関連付けられているパッケージを発行します。
  • read:packages 以上のスコープが設定された personal access token (classic) では、他のプライベート リポジトリ (GITHUB_TOKEN ではアクセスできない) に関連付けられているパッケージがインストールされます。

GitHub Actions ワークフローで使われる GITHUB_TOKEN の詳細については、「自動トークン認証」を参照してください。

personal access token

で認証を行う

GitHub Packages でパッケージを発行およびインストールするには、適切なスコープで personal access token (classic) を使う必要があります。 詳しくは、「GitHub Packages の概要」を参照してください。

~/.m2/settings.xml ファイルを編集して personal access token (classic) を含めることで、Apache Maven で GitHub Packages の認証を受けられます。 ~/.m2/settings.xml ファイルが存在しない場合は新しく作成します。

servers タグで id のある子 server タグを追加し、USERNAME はご自分の GitHub ユーザー名と、TOKEN はご自分の personal access token と置き換えます。

repositories タグで、リポジトリの id を、資格情報を含む server タグ追加した id にマッピングして、リポジトリを構成します。 HOSTNAME は お使いの GitHub Enterprise Server インスタンス のホスト名に、 OWNER はリポジトリを所有している個人アカウントまたは Organization の名前に置き換えます。 大文字はサポートされていないため、仮にGitHubのユーザあるいはOrganization名が大文字を含んでいても、リポジトリオーナーには小文字を使わなければなりません。

複数のリポジトリとやりとりする場合は、各リポジトリを repositories タグ内の個別の repository の子に追加し、それぞれの idservers タグ内の資格情報にマッピングします。

GitHub Packages では Apache Maven の SNAPSHOT バージョンがサポートされています。 SNAPSHOT 成果物のダウンロードに GitHub Packages リポジトリを使用するには、それを使用するプロジェクトまたは ~/.m2/settings.xml ファイルの POM で SNAPSHOTS を有効にします。

インスタンスで Subdomain Isolation が有効になっている場合:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <activeProfiles>
    <activeProfile>github</activeProfile>
  </activeProfiles>

  <profiles>
    <profile>
      <id>github</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>https://repo1.maven.org/maven2</url>
        </repository>
        <repository>
          <id>github</id>
          <url>https://maven.HOSTNAME/OWNER/REPOSITORY</url>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>

  <servers>
    <server>
      <id>github</id>
      <username>USERNAME</username>
      <password>TOKEN</password>
    </server>
  </servers>
</settings>

インスタンスで Subdomain Isolation が無効になっている場合:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <activeProfiles>
    <activeProfile>github</activeProfile>
  </activeProfiles>

  <profiles>
    <profile>
      <id>github</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>https://repo1.maven.org/maven2</url>
        </repository>
        <repository>
          <id>github</id>
          <url>HOSTNAME/_registry/maven/OWNER/REPOSITORY</url>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>

  <servers>
    <server>
      <id>github</id>
      <username>USERNAME</username>
      <password>TOKEN</password>
    </server>
  </servers>
</settings>

パッケージの公開

デフォルトでは、GitHubはパッケージはそのままの名前で既存のリポジトリに公開されます。 たとえば、GitHubは OWNER/test というリポジトリ内の com.example:test という名前のパッケージを公開します。

複数のパッケージを同じリポジトリに公開する場合は、リポジトリの URL を pom.xml ファイルの <distributionManagement> 要素に含めることができます。 GitHub は、このこのフィールドを元にしてリポジトリを照合します。 リポジトリ名も distributionManagement 要素の一部なので、複数のパッケージを同じリポジトリに公開するための追加手順はありません。

パッケージの作成について詳しくは、maven.apache.org のドキュメントを参照してください。

  1. パッケージ ディレクトリにある pom.xml ファイルの distributionManagement 要素を編集し、HOSTNAME は お使いの GitHub Enterprise Server インスタンス のホスト名に、OWNER はリポジトリを所有している個人アカウントまたは組織の名前に、REPOSITORY はプロジェクトを含むリポジトリ名に置き換えます。

    もしもインスタンスでSubdomain Isolationが有効化されているなら:

    <distributionManagement>
       <repository>
         <id>github</id>
         <name>GitHub OWNER Apache Maven Packages</name>
         <url>https://maven.HOSTNAME/OWNER/REPOSITORY</url>
       </repository>
    </distributionManagement>
    

    If your instance has subdomain isolation disabled:

    <distributionManagement>
       <repository>
         <id>github</id>
         <name>GitHub OWNER Apache Maven Packages</name>
         <url>https://HOSTNAME/_registry/maven/OWNER/REPOSITORY</url>
       </repository>
    </distributionManagement>
    
  2. Publish the package.

    mvn deploy
    

パッケージを公開した後は、GitHub上でそのパッケージを見ることができます。 詳しくは、「パッケージの表示」を参照してください。

パッケージのインストール

Apache Maven パッケージを GitHub Packages 空インストールするには、パッケージを依存関係として含めるように pom.xml ファイルを編集します。 指定したリポジトリ所有者の任意のリポジトリからパッケージをインストールする場合は、https://maven.HOSTNAME/OWNER/* のようなリポジトリ URL を使います。 プロジェクトで pom.xml ファイルを使用する方法の詳細については、Apache Maven ドキュメントの「Introduction to the POM」(POM の概要) を参照してください。

  1. GitHub Packagesに認証を受けてください。 詳細については、「GitHub Packages への認証」を参照してください。

  2. パッケージの依存関係をプロジェクト pom.xml ファイルの dependencies 要素に追加し、com.example:test をご自分のパッケージに置き換えます。

    <dependencies>
     <dependency>
        <groupId>com.example</groupId>
        <artifactId>test</artifactId>
        <version>1.0.0-SNAPSHOT</version>
      </dependency>
    </dependencies>
    
  3. パッケージをインストールします。

    mvn install
    

参考資料