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
390
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
Debugging: A Few Things You Should Know
jmatsu
1
190
Debugging: All you need to know (for simultaneous interpreting)
jmatsu
2
1.9k
Debugging: All you need to know (English Only)
jmatsu
0
230
理解した気になるApplication Signing
jmatsu
1
360
Gradle Convention Plugins
jmatsu
1
2.1k
Look Back Over Deep Links
jmatsu
0
560
Considerate App Update Delivery at DroidKaigi 2022
jmatsu
0
580
TechFeed Conference 2022 - Kotlin Experimental
jmatsu
0
1.7k
DroidKaigi 2021 - A Practical Guide to Building Mobile App Distribution Workflows
jmatsu
1
1.5k
Other Decks in Technology
See All in Technology
20241220_S3 tablesの使い方を検証してみた
handy
4
590
KnowledgeBaseDocuments APIでベクトルインデックス管理を自動化する
iidaxs
1
270
2024年にチャレンジしたことを振り返るぞ
mitchan
0
140
ブラックフライデーで購入したPixel9で、Gemini Nanoを動かしてみた
marchin1989
1
540
組織に自動テストを書く文化を根付かせる戦略(2024冬版) / Building Automated Test Culture 2024 Winter Edition
twada
PRO
17
4.5k
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
460
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
160
統計データで2024年の クラウド・インフラ動向を眺める
ysknsid25
2
850
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
480
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
200
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
250
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
590
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
Building an army of robots
kneath
302
44k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Side Projects
sachag
452
42k
Code Reviewing Like a Champion
maltzj
520
39k
RailsConf 2023
tenderlove
29
940
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) に感謝の気持ちを忘れずに - でも早くやめましょう まとめ