2021年11月7日日曜日

GitHub に Mavenリポジトリ公開してみたら失敗した

 GitHub PackagesでMavenリポジトリ?がつかえるようになっていたということで挑戦していたが、しばらくいろいろと不明でつかえなかった。

今回 GitHub Actions は使わない。非公式の方法も使わない。

https://docs.github.com/ja/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry

日本語の説明はあるが、例がてきとーすぎて不明点が多い。

いろいろわからない部分が明確になったので、ざっくりなんとかしていくかもしれない。

完全な公開ではなく、管理にもダウンロードにもTOKENが必要なので使い道は特定のもののみで微妙。

OWNER/REPOSITORY

これは、https://github.com/okomeki/SoftLibREST の場合は OWNER が okomeki REPOSITORY が softlibrest となる。

大文字がつかえないのがまず引っかかっていたのと、REPOSITORY に何を指定していいのかわからないのでエラーの意味から何も読み取れず引っかかっていた。

OWNER は GitHub のアカウントまたは組織単位の場合は組織名(Organization)で指定する。大文字は使えないので小文字にする。

REPOSITORY は 何でも指定していいわけではなく、GitHubで使っている Repository名、かつ大文字は小文字に変えるという制約がある。サンプルが test なのでいろいろ不明だったり。

Maven では pom.xml に公開先 repository を指定する。pom.xml の artifactId とはあわせておきたいが、あわせなくてもいいかもしれない。

groupId, artifactId も仮で大文字など使っていたら小文字とハイフンぐらいに変更する。artifactId が大文字制限に引っかかっているようなので SoftLibABNF から softlib-abnf に変更してみた。

アカウントが okomeki, Repository名が SoftLibABNF、pom.xml の groupId を net.siisise、 artifactId を softlib-abnf とした場合。

次のものをpom.xml の <project>の中に追加する。 

url は OWNER/REPOSITORY

<distributionManagement>
 <repository>
  <id>github</id>
  <name>GitHub okomeki Apache Maven SoftLib Packages</name>
  <layout>default</layout>
  <url>https://maven.pkg.github.com/okomeki/softlibabnf</url>
  <releases>
   <enabled>true</enabled>
  </releases>
  <snapshots>
   <enabled>true</enabled>
  </snapshots>
 </repository>
<distributionManagement>

~/.m2/settings.xml の方に、デフォルトのprofile指定と対応するアカウントを紐づけるための serverも追加する。

<activeProfiles>
 <activeProfile>github</activeProfile>
</activeProfiles>
<servers>
  <server>
   <id>github</id>
   <username>okomeki</username>
   <password>TOKEN</password>
 </server>
</servers>

ここのTOKENは、アカウントのパスワードではなく特定の権限を持つaccess tokenというものを指定する。

作り方は GitHubの右上のアカウントアイコンから Settings を開き、左のメニューから Developer settings を開く。

Personal access tokens を開いて Generate new token で新しいトークンを発行しよう。

期限無しで発行されているものは使わないほうがよいのでつくり直すのがいい。

権限(scope)は repo の全部と write:packages, delete:packages を付けていればいいかな。

access tokenが発行されたら、それをTOKENとして使う。pom.xml の方に追加して公開してしまわないようにしよう。

依存関係はRepositoryを分けていたら個別に指定しないといけないのか?  settings.xml に追加する。

url は OWNER/REPOSITORY

<profiles>
  <profile>
    <id>github</id>
    <repository>
     <id>githubsoftlibabnf</id>
     <name>略</name>
     <url>https://maven.pkg.github.com/okomeki/softlibabnf</url>
     <layout>default</layout>
    </repository>
  </profile>
</profiles>

 こんなのでいいのかどうか。

でぷろい

あとはビルドと公開をすると、pom.xml の groupId, artifactId, version に対応するものが公開される。snapshotは上書きできるので何度でも書き直せるが、リリースバージョンを付けると上書きはできない。どうしてもという場合は削除することはできるらしい。

コマンドの場合

mvn deploy

NetBeansの場合

プロジェクトのRun maven から Goals... を開く。

Goals: に deploy

Profiles: に github (省略可)

再利用するなら Remember as: に deploy githib などと登録して

OK

GitHub の Repository を開くとそれっぽいところにそれっぽいものが増えているはず。

次回はMaven側に公開か?


 

 

0 件のコメント:

コメントを投稿

GitHub に Mavenリポジトリ公開してみたら失敗した

 GitHub PackagesでMavenリポジトリ?がつかえるようになっていたということで挑戦していたが、しばらくいろいろと不明でつかえなかった。 今回 GitHub Actions は使わない。非公式の方法も使わない。 https://docs.github.com/ja/...