概要
GitHub PackagesへJARをデプロイする方法を書きます。
基本的なことは次の公式ドキュメントに書かれています。
公式ドキュメントの内容と重なる部分もありますが、ローカルから手動でJARをデプロイする方法とデプロイしたJARを使う方法、それからGitHub Actionsでデプロイする方法を書きます。
とりあえずローカルから手動でデプロイする
手順は次の通りです。
- Personal access tokenを作る
-
~/.m2/settings.xml
へデプロイ先となるMavenリポジトリの認証情報を書く -
pom.xml
へデプロイ先となるMavenリポジトリ情報を書く - デプロイする
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-plugin
とmaven-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を使用する
手順は次の通りです。
-
pom.xml
へMavenリポジトリ情報を書く -
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でデプロイする
手順は次の通りです。
- 専用の
settings.xml
を用意する - ワークフローの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
以上です。