18
3

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 3 years have passed since last update.

MavenでGitHub PackagesへJARをデプロイする

Last updated at Posted at 2020-12-05

同じ内容をZennにも投稿しました。


概要

GitHub PackagesへJARをデプロイする方法を書きます。

基本的なことは次の公式ドキュメントに書かれています。

公式ドキュメントの内容と重なる部分もありますが、ローカルから手動でJARをデプロイする方法とデプロイしたJARを使う方法、それからGitHub Actionsでデプロイする方法を書きます。

とりあえずローカルから手動でデプロイする

手順は次の通りです。

  1. Personal access tokenを作る
  2. ~/.m2/settings.xmlへデプロイ先となるMavenリポジトリの認証情報を書く
  3. pom.xmlへデプロイ先となるMavenリポジトリ情報を書く
  4. デプロイする

1. Personal access tokenを作る

https://github.com/settings/tokens からPersonal access tokenを作ります。
デプロイしたいので、write:packagesスコープにチェックしてください。

2. ~/.m2/settings.xmlへデプロイ先となるMavenリポジトリの認証情報を書く

username要素にはGitHubのアカウント名を、password要素には先ほど作ったPersonal access tokenを記載します(ここではユーザー名はbackpaper0とします)。

<server>
    <id>github</id>
    <username>backpaper0</username>
    <password>※ここにPersonal access tokenを書く</password>
</server>

~/.m2/settings.xmlが無い場合は作成してください。
Mavenのconfディレクトリにあるものをコピーすると良いです。
Mavenのホームディレクトリはmvn --versionすればわかります(どこにあるかわかっていなかった、、、)。

また、Personal access tokenを平文で書きたくない場合はmvn -epで暗号化できます。
詳しくはMaven – Password Encryptionを参照ください。

3. pom.xmlへデプロイ先となるMavenリポジトリ情報を書く

MavenリポジトリのURLはユーザー名、Gitリポジトリ名によって変わります。
ここではユーザー名はbackpaper0、Gitリポジトリ名はdemoとします(GitHubにはdemoというGitリポジトリを作成していることとします)。

<distributionManagement>
    <repository>
        <id>github</id>
        <name>GitHub OWNER Apache Maven Packages</name>
        <url>https://maven.pkg.github.com/backpaper0/demo</url>
    </repository>
</distributionManagement>

4. デプロイする

mvnコマンドでデプロイできます。

mvn deploy

ソースコードとJavadocもデプロイする

ちなみに、pom.xmlに次のようにmaven-source-pluginmaven-javadoc-pluginの設定をすればソースコードのJARとJavadocのJARもデプロイできます。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

デプロイしたJARを使用する

手順は次の通りです。

  1. pom.xmlへMavenリポジトリ情報を書く
  2. dependencyを追加する

ちなみに、認証は必要なのでPersonal access tokenと~/.m2/settings.xmlの準備をしていない場合はしておいてください。
なお、デプロイするのではなく参照するだけならPersonal access tokenのスコープはread:packagesで大丈夫です。

1. pom.xmlへMavenリポジトリ情報を書く

Mavenリポジトリの情報はデプロイの際に書いたものと同じです。
SNAPSHOTバージョンも使用する場合はsnapshots要素内のenabled要素へtrueを書いておきましょう。

<repositories>
    <repository>
        <id>github</id>
        <name>GitHub OWNER Apache Maven Packages</name>
        <url>https://maven.pkg.github.com/backpaper0/demo</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

2. dependencyを追加する

あとはpom.xmlへデプロイしたJARの情報を書いたdependency要素を追加すると使えます。

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

GitHub Actionsでデプロイする

手順は次の通りです。

  1. 専用のsettings.xmlを用意する
  2. ワークフローのYAMLを書く

1. 専用のsettings.xmlを用意する

GitHub Actionsでデプロイする場合、ローカルの~/.m2/settings.xmlは使えないためsettings.xmlもGitリポジトリへ追加します。

Personal access tokenを書くわけにはいかないので、環境変数から読み取るようにします。
ここでは環境変数GITHUB_TOKENとします。

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <servers>
        <server>
            <id>github</id>
            <username>backpaper0</username>
            <password>${env.GITHUB_TOKEN}</password>
        </server>
    </servers>
</settings>

2. ワークフローのYAMLを書く

GitHub Actionsで次のコマンドを実行するとデプロイできます。

GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} mvn -B -s settings.xml deploy

ポイントは次の通りです。

  • Personal access tokenをsecretsコンテキストから読み取って環境変数GITHUB_TOKENへセットする(settings.xmlへ渡すため)
  • -sでGitリポジトリへ追加したsettings.xmlを使用する

secrets.GITHUB_TOKENについて詳しくはワークフローで認証するを参照してください。

YAMLファイル全体は次のようになります。

name: Java CI with Maven

on:
  push:
    branches: [ master ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11

      - name: Cache local Maven repository
        uses: actions/cache@v2
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-

      - name: Release Maven package
        run: GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} mvn -B -s settings.xml deploy

以上です。

18
3
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
18
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?