はじめに
Maven Central でライブラリを公開しようとしたところ、
Dependencies to SNAPSHOT versions not allowed for dependency: <GroupID>
と言われて公開が拒否されたことがありました。
最終的には大きな変更を入れることなく公開できたので手順をまとめました。
発生と原因
Maven Central でバージョン名が SNAPSHOT で終わる依存関係を持つライブラリを公開しようとしたら拒否されました。
どうやら SNAPSHOT 状態のライブラリを含んでいると Maven Central の検証で弾かれるようです。
対処法
依存関係のバージョンを SNAPSHOT バージョンではなくカレンダーバージョニングによるバージョン文字列にします。
具体的には、当初利用していた paper-api:1.21.4-R0.1-SNAPSHOT ではなく paper-api:1.21.4-R0.1-20250925.065901-231 で指定しました。
これは paper-api の配布元で当該バージョンの最新ビルドを探して直接持ってきたバージョン文字列です。
paper-api:1.21.4 のアクティブな開発はすでに停止しており、最新版が 20250925.065901-231 なので
1.21.4-R0.1-SNAPSHOT1.21.4-R0.1-20250925.065901-231
のどちらで指定しても同じアーティファクトを参照していることになります。
この変更によりバージョン文字列の末尾から SNAPSHOT を抜くことができたのでデプロイも通るようになりました。
なんでこんな制限が
SNAPSHOT は頻繁なリリースによるバージョン文字列更新の手間を削減するために導入されており、検証されていないリリースのことを指します。
Maven Central としては
- 「SNAPSHOT で指定するとビルドする時期によっては依存先のバージョンが変わってビルドに悪影響が出てしまうかもしれないから弾いておくよ」
- 「検証されてないリリースを含んでいるのに安定リリースとして検証されているとマークするのは矛盾しているよね」
というロジックがあり、タイトルのような処置を実施しているのだと考えられます。
(SNAPSHOT 内でのバージョンを指定すると公開できてしまうことから後者は正しくないように思えますが、これは正式版と SNAPSHOT でのいちビルド番号かを機械的に判定することが難しいことによるものであって、そこの区別ができるのであれば SNAPSHOT 版を正式ビルドに含むことは全面的に禁止されているだろう、と私は考えています。)
参考
