Apacheで開発されているAntに代わるJavaのビルドツール。リポジトリがあるのでいいかもしれない。
プラグインで機能を拡張できるがいろいろ複雑にも見える。
CLASSPATHを指定したいよ
<classpath>
セントラルリポジトリ編?
maven.apache.org からダウンロードします Download ページのFiles Link からWindows なら zip版、Linuxならtar.gz 版などをダウンロードして適度な場所に展開します。
Windows
[設定]から[システム]の[バージョン情報]を開くか、Windowsアイコンの右クリックから[システム]を開きます。
関連リンクから[システムの詳細設定]を開きます。
システムのプロパティが開き、[詳細設定]タブから[環境変数(N)...]を開きます。
[ユーザー環境変数]の方の変数 Path にMavenのbinへのPATH を通します。
Mavenはパッケージ管理システムで、ソース管理はできません。基本的にソースコードはGitなどで管理します。リリース時などのバージョンをMavenのリポジトリで管理する形になります。
リリース版は基本的に変更せず次のバージョンを更新します。開発中のバージョンをMavenリポジトリで共有する場合、SNAPSHOTなどのリリースバージョンをつける方法があります。
Maven の公開リポジトリは Central Repository などがあり、sonatype というところで申請すると使えるようになります。難しくはなさそうです。
https://central.sonatype.org/publish/publish-guide/ 公開手順のはじめかた Publishing my artifact Getting Started
https://central.sonatype.org/publish/requirements/gpg/
Maven centralではコード署名が必要になるのでコードの署名に使うGnuPGの鍵がない場合はつくります。ツールなどは違いますが、SSL/TLSなPKI系やOpenSSH用の鍵と基本的な役割は同じです。おまけでGitHubの方にも録してみます。
名前とメールアドレスのデジタル署名で使えるものです。
https://www.gnupg.org/download/ からgpg をインストールします。
Windowsの場合 Gpg4win や Simple installer for the current GunPG のどちらでもいいのかもしれません。 1.4 はやめておきます。
> gpg --version gpg (GnuPG) 2.4.3 libcrypt 1.10.2 Copyright (C) 2023 g10 Code GmbH License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the ectent permitted by law. Home: C:\Users\okome\AppData\Roaming\gnupg Supported algorithms: Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 Hash: SHA1, RIMEMD160, SHA256. SHA384, SHA512, SHA224 Compression: Uncompressed, ZIP, ZLIB, BZIP2
こんなかんじ version は 2.1.17以降であること。
とりあえず sonatypeの説明では gpg --gen-key とされているが古いので新しい方で作る
> gpg --full-generate-key
目安
作った鍵があればこんなふうに出てくる 例 rsaとeddsaの2つ、ドメインはexample.com に変えてある
> gpg --list--keys C:\Users\okome\AppData\Roaming\gnupg\pubring.kbk ------------------------------------------------ pub rsa3072 2021-11-05 [SC] [expires: 2024-11-04] 89F649264BDF2BA4B97F2E69BB673015B2AA838C
uid [ultimate] 名前 <user@example.com>
sub rsa3072 2021-11-05 [E] [expires: 2024-11-04] pub ed25519 2023-11-05 [SC] [expires: 2026-11-04]
2B28E9DC385FA43B207688ED93AFFA7659CC439C
uid [ultimate] 名前 <siisise@example.com>
sub cv25519 2023-11-05 [E] [expires: 2026-11-04]
pub の下の行がKey IDっぽい 短縮して右側の方を使う場合がある
gpg -ab ファイル名 で拡張子.asc の署名を作れる
公開鍵を公開できるところに登録する Mavenで必要なのは次の3つのどれか。Key IDは自分のものと入れ換えて。
> gpg --keyserver keyserver.ubuntu.com --send-keys 2B28E9DC385FA43B207688ED93AFFA7659CC439C
> gpg --keyserver keys.openpgp.org --send-keys 2B28E9DC385FA43B207688ED93AFFA7659CC439C
> gpg --keyserver pgp.mit.edu --send-keys 2B28E9DC385FA43B207688ED93AFFA7659CC439C
3箇所がMavenのsonatypeから参照されるようなので全部登録してみた
keys.openpgp.org からメールで確認が届くので開いてURLをつついておく。1回目は確認(メールは英語、Webは日本語対応)。2回目のメール(日本語)をクリックすると公開完了。本人のメールアドレスである証明になります。
おまけでGitHubでもgpgが使えるので登録する
github.com の 右上の自分のアイコン開いて Settings > SSH and GPG keys と進む
GPG keys の [New GPG key] を開いて次のコマンドで出てくる長いコードをコピー ペーストする (別途メールアドレスの確認は必要) TitleはMavenでもなんでもいい
> gpg --armor --export 2B28E9DC385FA43B207688ED93AFFA7659CC439C -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEZZkT1hYJKwYBBAHaRw8BAQdAwhluw2eGRh5Mv3c+7hyN6Yuvc8tCCvjKgX7h z7meeDS0IlNBVE8gTWFzYXRvc2hpIDxva29tZUBzaWlzaXNlLm5ldD6ImQQTFgoA QRYhBCso6dw4X6Q7IHaI7ZOv+nZZzEOcBQJlmRPWAhsDBQkFo5qABQsJCAcCAiIC BhUKCQgLAgQWAgMBAh4HAheAAAoJEJOv+nZZzEOcT4UBAIKUaKJEcNK0U8aVEzRD LYSW5wmPZLcyA/KYUCzRNpN9AP9nC3/BbIUPlEkE/rWr7UNp0d7LZUK17HWpHEdW Gj3iDbg4BGWZE9YSCisGAQQBl1UBBQEBB0CgNvpN/+OuKuVQZdFbf9HhtY5E6LCC 8/GVBI71wSosNAMBCAeIfgQYFgoAJhYhBCso6dw4X6Q7IHaI7ZOv+nZZzEOcBQJl mRPWAhsMBQkFo5qAAAoJEJOv+nZZzEOcevUA/2f4jUsNAbxMdmCBzMsac6Vo5zvK 5bmTTDB+0UeSdfB7APsG3wrp04x6EwqYh2nsLXvsWoIRSKEAedO0ysxgaBl0BA== =AwzV -----END PGP PUBLIC KEY BLOCK-----
RSAだとこれより長くなる
長いKey ID の右の方がKey IDとして表示されている。
https://central.sonatype.org/publish/publish-guide/ の続き
メールアドレス、フルネーム、ユーザ名、パスワードを決めます。
ログインした状態でプロジェクトを登録します。
Project URL は本人証明が必要になるのでGitHubなどにしておくと比較的楽かもしれません。自ドメインの場合はTXTレコードかWebかどちらかをつついたかもしれません。
どこかのSNSっぽいところに投稿されるかたちになります。他の人が投稿しているのを眺めて内容を決めてもいいのかもしれません。説明は比較的短くても承認されたりします。
本人確認が必要な場合は一度止まるので修正したらコメントか何か追加して確認してもらいました。botか人かはよくわかりません。
(略)
Mavenのpom.xml と settings.xml の編集
pom.xml は個別のファイル、settings.xml は共通のファイル
jlink はJava 9以降のmodule systemを使って最小構成の配布用Java (JRE) を作る機能のようなものです。JREはJDK 9以降くらいには含まれていません。java.base ぐらいしか使っていないものだとフルJDKの1/3くらいのサイズになります。実行可能なコマンドやパッケージを作るにはjpackager が別にあります。
maven から使いたかったのにそれっぽい情報が全くない気がするので苦しみながらお気楽メモしてみました。
本当は複数ProjectをMavenでまとめているときに使えるのかも?
とりあえずNetBeansからは動かなかった maven-jlink-plugin、いろいろ条件があるようなのでメモ
基本ですが、module-info.java が必要です。JDK 1.8ではmodule-info.javaが使えないので分けて管理するなどが必要になるのかもしれません。main class の指定などは不要です。依存関係はjdepsなどで確認します。
module softlib { requires java.base; requires java.logging; }
module名はjar名になる artifactIdと同じにします。配布用artifactIdに大文字が使えないので小文字推奨です。
リリースバージョンを指定します。SNAPSHOTを振っていたりするとjar名からmodule名が探せなくなるのか使えません。
NetBeansからは使えないのでコマンドラインなどから使います。
<project><build><plugins> の中
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jlink-plugin</artifactId>
<version>3.1.0</version>
<executions> <execution> <!--
<phase>verify</phase> <goals> <goal>jlink</goal> </goals> --> <configuration> <addModules> <module>java.base</module> <module>java.logging</module> </addModules> </configuration> </execution> </executions> </plugin>
phaseはとりあえずverify。packageにできるのか不明。phaseとgoalを指定しないことにした。
configuration のmodule指定部分はmodule-infoでも指定してあるので必要なのか不明です。
<project>直下の最後ぐらいにJDKのバージョンを指定しているかと思うので11以降くらいにします。
<properties>
<maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target>
</properties>
mvn package を事前に実行する必要があるようです。
mvn jlink:jlink を実行します。
softlib-1.x.x.jar の他に softlib-1.x.x.zip が作られて、JRE相当のセットが入っています。
外部ライブラリを利用する場合はまだ未検証です。
参考