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
120
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
理解した気になるApplication Signing
jmatsu
1
310
Gradle Convention Plugins
jmatsu
1
1.5k
Look Back Over Deep Links
jmatsu
0
460
Considerate App Update Delivery at DroidKaigi 2022
jmatsu
0
500
TechFeed Conference 2022 - Kotlin Experimental
jmatsu
0
1.5k
DroidKaigi 2021 - A Practical Guide to Building Mobile App Distribution Workflows
jmatsu
1
1.4k
Serialization in Kotlin World
jmatsu
3
710
Deep Dive into Kotlin DSL
jmatsu
6
1.8k
[日本語注釈つき] Deep Dive into Kotlin DSL
jmatsu
2
790
Other Decks in Technology
See All in Technology
地理空間データ可視化・解析・活用ソリューション Pacific Spatial Solutions (PSS)
pacificspatialsolutions
0
330
障害対応をちょっとずつよくしていくための 演習の作りかた
heleeen
1
1.6k
開発生産性大幅アップ!Postman VS Code拡張機能
nagix
3
630
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
2.1k
AOAI をきっかけに 社内の Azure 管理を見直した話
recruitengineers
PRO
1
450
How to do well in consulting–Balkan Ruby 2024
irinanazarova
0
130
Improve Your Development Workflow with Gemini Code Assist
meteatamel
0
120
家族アルバム みてねにおけるGrafana活用術 / Grafana Meetup Japan Vol.1 LT
isaoshimizu
1
910
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
3
270
How to Lead? Testimonial of a Lead Android Engineer
oleur
1
110
競技としてのKaggle、役に立つKaggle
yu4u
6
2.3k
Cloud Service Mesh に触れ合う
phaya72
1
160
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1357
200k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
Web Components: a chance to create the future
zenorocha
306
41k
What the flash - Photography Introduction
edds
64
11k
Thoughts on Productivity
jonyablonski
59
3.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
126
32k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
22
1.6k
Building Adaptive Systems
keathley
32
1.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
228
130k
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) に感謝の気持ちを忘れずに - でも早くやめましょう まとめ