Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JCenterをちゃんと差し替える
Search
Matsuda Jumpei
September 01, 2023
Technology
0
490
JCenterをちゃんと差し替える
Shibuya.apk#44 で発表したスライド
https://shibuya-apk.connpass.com/event/292311/
お世話になった JCenter 依存を剥がすための話
Matsuda Jumpei
September 01, 2023
Tweet
Share
More Decks by Matsuda Jumpei
See All by Matsuda Jumpei
Deep Dive into Kotlin Flow
jmatsu
1
310
Select API from Kotlin Coroutine
jmatsu
2
270
Getting Started of Getting Started: Delivery Speed Improvements
jmatsu
0
15
Debugging: A Few Things You Should Know
jmatsu
1
310
Debugging: All you need to know (for simultaneous interpreting)
jmatsu
2
2.8k
Debugging: All you need to know (English Only)
jmatsu
0
310
理解した気になるApplication Signing
jmatsu
1
380
Gradle Convention Plugins
jmatsu
1
2.4k
Look Back Over Deep Links
jmatsu
0
620
Other Decks in Technology
See All in Technology
20250903_1つのAWSアカウントに複数システムがある環境におけるアクセス制御をABACで実現.pdf
yhana
3
540
JTCにおける内製×スクラム開発への挑戦〜内製化率95%達成の舞台裏/JTC's challenge of in-house development with Scrum
aeonpeople
0
200
Obsidian応用活用術
onikun94
1
470
オブザーバビリティが広げる AIOps の世界 / The World of AIOps Expanded by Observability
aoto
PRO
0
350
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
11
4.6k
Webブラウザ向け動画配信プレイヤーの 大規模リプレイスから得た知見と学び
yud0uhu
0
230
会社紹介資料 / Sansan Company Profile
sansan33
PRO
6
380k
新アイテムをどう使っていくか?みんなであーだこーだ言ってみよう / 20250911-rpi-jam-tokyo
akkiesoft
0
170
KotlinConf 2025_イベントレポート
sony
1
110
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
140
roppongirb_20250911
igaiga
1
210
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
530
Featured
See All Featured
Optimizing for Happiness
mojombo
379
70k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
A Tale of Four Properties
chriscoyier
160
23k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.8k
What's in a price? How to price your products and services
michaelherold
246
12k
The Art of Programming - Codeland 2020
erikaheidi
55
13k
Done Done
chrislema
185
16k
RailsConf 2023
tenderlove
30
1.2k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Transcript
JCenterをちゃんと差し替える Shibuya.apk #44 @red_fat_daruma
- Jumpei Matsuda (@red_fat_daruma) - DeployGate で働いています - お酒が飲みたいです じこしょうかい
- そう思う方も一部にはいると思いますが・・・ - 実際、障害が発生する度に話題に上がるので使ってる人はまだいそう え、今更じゃないの?
- 高速で reliable な Maven Repository - Maven Central の
mirror - 独自 artifact の配布 - 各自の Bintray スペースで配布した artifact を promote できた - Maven Central より圧倒的簡単に配布可能 - ⇒ 配布する・される、どちらの界隈でもポピュラーに JCenter powered by JFrog
https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/
- 2021 Feb 03: 🗣 終了予定のアナウンス(初回) - 2021 Mar 31:
🗓 新規アップロードの停止 - 2021 Apr 27: 🗣 終了撤回 & read-only でずっと存続する、と宣言 - 2021 May 01: 🗓 jcenter 以外の dl.bintray.com/* の停止 - 2022 Nov 26: ❌ jcenter.bintray.com の証明書が切れる - 2023 Jun 23: ❌ JCenter が Maven Central へ redirect JCenter の Sunsetting と Troubles
- 2021 Feb 03: 終了予定のアナウンス(初回) - 2021 Mar 31:
新規アップロードの停止 - 2021 Apr 27: 終了撤回 & read-only でずっと存続する、と宣言 - 2021 May 01: jcenter 以外の dl.bintray.com/* の停止 - 2022 Nov 26: ❌ jcenter.bintray.com の証明書が切れる - 2023 Jun 23: JCenter が Maven Central へ redirect これはまあ分かる
- 2021 Feb 03: 終了予定のアナウンス(初回) - 2021 Mar 31:
新規アップロードの停止 - 2021 Apr 27: 終了撤回 & read-only でずっと存続する、と宣言 - 2021 May 01: jcenter 以外の dl.bintray.com/* の停止 - 2022 Nov 26: jcenter.bintray.com の証明書が切れる - 2023 Jun 23: ❌ JCenter が Maven Central へ redirect 分からない、どうして・・・
- 多大な恩恵を受けた - 爆速で安定した最高体験な MavenCentral Mirror だった - ストレージ代はじめ、保守コストが高そうなのに無料 -
ライブラリ開発者から見て利用ハードルが低かった - 何か問題を感じても、責任は自分たちサイドにある - MavenCentral より高速な mirror - 安定版でも JCenter にしか配布しない開発者 - JCenter にしかない artifact を利用し続ける利用者 分からないけど、そう批判するものではない
- artifact + α を決められた位置に配置してね、のみ - 配置方法はなんでもいい - 実ファイルでもリダイレクトでも Proxy
でもなんでもいい - Relay Server や P2P のような分散システムではない - artifact は直接配布した Repository にのみ存在すればよい - (プロトコルを除き)セキュリティ要件は特にない - 一度配布した artifact の差し替えを禁止していない - 署名による所有者確認は不要 Maven Repositoryの最低要件
- Google Maven Repository - Artifact の差し替えが”あった” (現在も可能かどうかは不明) - JCenter
- 署名なしにアップロードが可能だった - Gradle Plugin Portal - 裏側に JCenter がいる - jitpack.io - 都度ビルドなので環境ロックが不十分だと冪等性がない 有名な Maven Repository にある(あった)こと
- 不安定な Maven Repository でも概ね同様 - ライブラリ開発者がやること - Maven Central
への配布し直し - ライブラリ利用者がやること - 安定した MavenCentral Mirror 探し - JCenter から※配布される artifact から乗り換える JCenter をやめてみる ※ Maven Central や Google Maven などに含まれないが、 JCenter にある artifact
- Maven Central への配布し直し - JCenter から artifact (stableのみ) を取り出す
- javadoc/source.jar、pom を Maven Central 用に用意する - jar や pom に署名する - Sonatype に申請する - 各手順は次の記事を読んで下さい(省略) - https://zenn.dev/red_fat_daruma/articles/0f3a01a53dc4fd ライブラリ開発者向け
ライブラリ利用者向け - まずは・・・ - 安定した Maven Central Mirror 探し -
最近もちょいちょい Maven Central がエラーを吐く - ❌ 自分で JFrog Artifactory などを使って用意する - ✅ Google がホストしてるマルチリージョン用 Repository - https://storage-download.googleapis.com/maven-central/index.html - Edge Location の自動解決はない点に注意
- JCenter でのみ配布された artifact を乗り換えるために指定を削除! ライブラリ利用者向け - 次に・・・
- ❌ JCenter を指定しているか - ✅ 推移的に見て、JCenter で resolve される
artifact はないか - Gradle Resolution API でも難しい(とりあえずできなかった) - JCenter を Remote Repository にする Maven Repo は? - e.g. Gradle Plugin Portal そんな簡単な話ではない
Gradle Plugin Portal の例
- ❌ JCenter を指定しているか - ✅ 推移的に見て、JCenter で resolve される
artifact はないか - Gradle Resolution API でも難しい(とりあえずできなかった) - JCenter を Remote Repository にする Maven Repo は? - e.g. Gradle Plugin Portal そんな簡単な話ではない
- jmatsu/maven-repo-interceptor-for-gradle - localhost:3000/repos にロギング用の Repo が立てられる Fake Maven Repository
を立てればいいじゃない
- 「この Repo までで解決してくれ」の次に挿入する - http://localhost:3000 をブラウザで開いておく Fake Maven Repository
を立てればいいじゃない
- 強制的にすべての dependency を resolve する Fake Maven Repository を立てればいいじゃない
- Fake Maven Repository へのアクセスが記録される
- 同 or 新バージョンが Maven Central などで配布されてないか探す - 保守を考慮すると理想的 ✅
- 配布されていてもマイナーな Repository は ❌ - 該当バージョンが他 Maven Repository から配布されてないか探す - ただし Redirect されていたら意味がないので要チェック - ローカル埋め込みまたは Remote Maven Repository を用意する - 現状も移行できない人たちは大体これになる JCenter からの artifact を特定したら
- ✅ ローカル埋め込み (Local Maven Repository 含) - 新バージョンはどうあっても JCenter
以外なので手間は変わらない - ✅ Remote Maven Repository - 複数プロジェクトから利用するならローカル埋め込みより有り - 省エネ重視なら GitHub Pages を使えばいい Maven Repository を作成する
- URL を指定すると Maven Repository の形式でダウンロード可能 - 指定 URL の
Repo に入ってない artifact も炙り出せる Maven Repository を作成する(e.g. 前述のツール)
- 頑張ってやめましょう - JFrog(JCenter) に感謝の気持ちを忘れずに - でも早くやめましょう まとめ