下記のような記事を書いていて、
恐怖を煽りすぎてもよくないから本体には書くべきでないと思ったけど こういうこともあるよね、みたいなパターンをいくつか思いついてしまった為ここに書いていく。
BintrayやGitHub Packagesは、利用者ごとにリポジトリの名前空間を分けている。そのため別のユーザが作成したリポジトリからライブラリを参照する場合、それらは都度都度参照元のリポジトリとして書き足していくことになる。
もしあらゆるライブラリ作者がそうしたサービスに移転した場合どうなるか?当然参照先リポジトリ一覧はライブラリの数だけ記述が増える。
参照先リポジトリが増えることには弊害があって、
という懸念を持っている。
2の話については下記の記事で書いている。
今Bintray上でホストされているバイナリをすべて移転してさえくれれば、長期間メンテナンスされていないアプリでもリポジトリだけ書き換えればうまいこと動くだろう。
しかしもし古いバージョンは移転せず最近のバージョンのみ移転された場合は?そしてその間に破壊的変更があった場合には?
もしかしたら、リポジトリの移行だけでなく最新バージョンへの追従とそのための動作確認、のようなタスクが急遽入ってくるかもしれない。
ただ、これは珍しいケースになりそうだ。
JCenterやBintrayでホストされているライブラリというのはビルド済のバイナリなので、当然ソースコードがメンテナンスされていなくても基本的にはダウンロードできる。
しかしもし随分昔に公開されたまま最近はメンテナンスされていなかったら?そのメンテナが移行作業を行わなかったら?
これはそのアプリの性質によってはかなりの割合で起きそうだ。年単位でメンテナンスされておらず移行作業もされそうにないライブラリはかなりある。もしそのようなライブラリを使用していた場合、最悪関連するコードを全部剥がして再実装することになるかもしれない。
現行の依存関係すべてを解決し、jarファイル(aarファイル)をキャッシュしておいたほうがいいかもしれない。
まさにSonatype Nexusなどはこれに相当する機能を持っていて、Nexusがプロキシとなり各リポジトリから取得したアーティファクトをキャッシュできた記憶がある。
追記。そのほか興味深い指摘を頂いているのでここに列挙させていただく。
・依存している各社が「これはヤバい」とみんなが独自forkを作ってついでに修正を加えた結果互換性の無い{(a) artifactIdだけ同じやつ | (b) artifactIdが違うけど.classの名前が同じやつ}がビルド時/実行時に競合して解消できない
— Atsushi Eno (@atsushieno) 2021年2月4日
(b)が本丸かな〜 https://t.co/OAXsg3EGKa
> しかしもし古いバージョンは移転せず最近のバージョンのみ移転された場合は?
— ちばっちんぐ (@chibatching) 2021年2月5日
> ただ、これは珍しいケースになりそうだ
JCenterと比べてMaven Centralでvalidなアーティファクトの条件がだいぶ厳しいので個人開発ライブラリだと割と発生するんじゃないかなーと思うhttps://t.co/qCj0kPKupx
雑に検索して「おっCentralにもあるやん!」と思って移行したら、実は別人が配布してた悪意あるライブラリだった。という可能性もあるはず。バイナリ等価か確認しような。 https://t.co/ylWGtDYlDW
— 正月と正月のあいだ (@Kengo_TODA) 2021年2月5日
これmavenCentralに申請する関係で依存先のgroup idが変更されたらかなりしんどいなぁ。使う側がちゃんとdependency resolver書けばいいけど、そうじゃないなら404になりそう。
— 🦉だるま (@red_fat_daruma) 2021年2月5日