Skip to main content

Apache Mavenレジストリの利用

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

GitHub Packages は、GitHub Free、GitHub Pro、Organization の GitHub Free、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 3.0 以降、GitHub AE で利用できます。 GitHub Enterprise Server インスタンスのアップグレードについて詳しくは、「新しいリリースへのアップグレードについて」を参照してください。また、現在のリリース バージョンからのアップグレード パスについては、アップグレード アシスタント を参照してください。

注: サイト管理者はそれぞれのサポートされているパッケージの種類を有効化あるいは無効化できるので、このパッケージの種類はインスタンスで利用できないかもしれません。 詳細については、「エンタープライズ向けのパッケージ サポートの構成」を参照してください。

GitHub Packages への認証を行う

パッケージを発行、インストール、および削除するには、アクセス トークンが必要です。

個人アクセス トークン (PAT) を使用し、GitHub Packages または GitHub Enterprise Server API の認証を受けることができます。 個人トークンを作成する際には、必要に応じて様々なスコープをトークンに割り当てできます。 PAT のパッケージ関連のスコープの詳細については、「GitHub パッケージのアクセス許可について」を参照してください。

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

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

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

個人アクセストークンでの認証

GitHub Packages内でパッケージを公開及びインストールするためには、適切なスコープで個人アクセストークンを使わなければなりません。 詳しくは、「GitHub Packages について」をご覧ください。

~/.m2/settings.xml ファイルを編集して個人アクセストークンを含めることで、Apache Maven でGitHub Packagesの認証を受けられます。 ~/.m2/settings.xml ファイルが存在しない場合は新しく作成します。

servers タグでid のある子serverタグを追加し、USERNAME はご自分の GitHub ユーザー名と、TOKEN はご自分の個人アクセス トークンと置き換えます。

repositories タグで、リポジトリの id を、資格情報を含む server タグ追加した id にマッピングして、リポジトリを構成します。 HOSTNAME を your GitHub Enterprise Server instance のホスト名に置き換え、 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 を your GitHub Enterprise Server instance のホスト名に、OWNER をリポジトリを所有するユーザーまたは Organization のアカウント名に、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 ファイルを編集します。 複数のリポジトリからパッケージをインストールしたい場合は、それぞれについて repository タグを追加します。 プロジェクトで pom.xml ファイルを使用する方法について詳しくは、Apache Maven ドキュメントの「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

参考資料