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
Dependency Management for Java - Code Remix Sum...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
sullis
May 12, 2026
Programming
8
0
Share
Dependency Management for Java - Code Remix Summit 2026-05-12
May 12 2026
Code Remix Summit Miami
#openrewrite
#java
sullis
May 12, 2026
More Decks by sullis
See All by sullis
AI Assisted Software Development - Portland Java User Group - 2026-04-14
sullis
0
47
Dependency Management for Java - Seattle 2025-11-18
sullis
0
45
Dependency Management for Java - Portland - 2025-11-04
sullis
0
28
Dependency management for Java applications 2025-09-11
sullis
0
47
S3 NYC Iceberg meetup 2025-07-10
sullis
0
56
Amazon S3 Chicago 2025-06-04
sullis
0
130
Amazon S3 Boston 2025-05-07
sullis
0
100
Netty ConFoo Montreal 2025-02-27
sullis
0
160
GitHub Actions ConFoo Montreal 2025-02-26
sullis
0
110
Other Decks in Programming
See All in Programming
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
460
🦞OpenClaw works with AWS
licux
1
320
AI-DLC Deep Dive
yuukiyo
9
5.3k
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
290
Spec-Driven Development with AI Agents (Workshop, May 2026)
antonarhipov
2
260
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
0
720
Back to the roots of date
jinroq
0
620
My daily life on Ruby
a_matsuda
2
130
2026年のソフトウェア開発を考える(2026/05版) / Software Engineering Scrum Fest Niigata 2026 Edition
twada
PRO
19
9.4k
エラー処理の温故知新 / history of error handling technic
ryotanakaya
7
1.8k
Programming with a DJ Controller — not vibe coding
m_seki
3
730
From Formal Specification to Property Based Test
ohbarye
0
650
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.9k
The SEO Collaboration Effect
kristinabergwall1
1
440
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
360
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
340
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
200
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
110
Heart Work Chapter 1 - Part 1
lfama
PRO
6
35k
Building an army of robots
kneath
306
46k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
220
Transcript
None
About me OpenRewrite contributor Java since 1996 platform engineer
Platform engineering @ Grubhub 🟢 minimize undifferentiated heavy lifting 🟢
provide application building blocks 🟢 enable Continuous Delivery 🟢 accelerate migration campaigns
Migration campaigns @ Grubhub 🟢 legacy Guice apps → Spring
Framework 🟢 Spring Boot 2 → Spring Boot 3 🟢 Gradle 8 → Gradle 9
None
None
None
OpenRewrite Dependency Management
JUnit migration - October 2022
🟢 hundreds of libraries on the classpath 🟢 open source
libraries 🟢 internal libraries Modern Java applications
Gradle blog November 2019 “The larger the project and its
dependency graph, the harder it is to maintain”
“Dependency issues can cause many problems” Gradle blog November 2019
“If you are lucky, you would get a compile time
error” Gradle blog November 2019
“it is common to only see problems occurring when executing
tests or even at production runtime” Gradle blog November 2019
NoClassDefFoundError ClassNotFoundException
NoSuchMethodError NoSuchFieldError
UnsatisfiedLinkError AbstractMethodError
Java dependency conflicts
Let’s talk about dependency resolution
dependencies { implementation( “foo:liba:1.5.2” ) implementation( “foo:libz:0.2.1” ) implementation( “com.google.guava:guava:28.2”
) }
liba 1.5.2 app 1.0.0 libz 0.2.1 guava 19.0 guava 33.4.8
guava 28.2
liba 1.5.2 app 1.0.0 libz 0.2.1 guava 19.0 guava 33.4.8
guava 28.2
Maven: “nearest wins” Gradle: “highest version wins” guava 28.2 guava
33.4.8
Java classpath
what Java libraries do you have in production right now?
do you have outdated libraries in production?
do you have SNAPSHOT libraries in production?
Microservice app:1.5.2 sharedlib:1.8.3 swagger-annotations:2.2.31-SNAPSHOT
“Let’s add one more Java library ” Java library
None
Dependency Hell
Dependency Hell is a common problem
Taming dependency hell
Pin dependency to a specific version?
configurations.all { resolutionStrategy { force 'com.example:foobar:0.9.2' } }
Mike McGarr Netflix, 2017
Gradle User Guide
“Gradle’s optimistic dependency resolution may inadvertently upgrade dependencies, causing compatibility
issues” Gradle User Guide
Gradle User Guide
Gradle User Guide
Gradle User Guide
Gradle User Guide
Gradle User Guide
Common problems with Java dependencies
Compilation failure [ERROR] bad class file: /Users/skywalker/.m2/repository/org/apache/iceberg/iceberg-api/1.9. 2/iceberg-api-1.9.2.jar(org/apache/iceberg/IcebergBuild.class) [ERROR] class
file has wrong version 55.0, should be 52.0
class file has wrong version 61.0, should be 52.0
Dependency misalignment jackson-databind:2.19.2 jackson-core:2.19.0
Scala sadness jackson-module-scala_2.12-2.19.2.jar jackson-module-scala_2.13-2.19.2.jar 🚩 what if both of these
jars are on the classpath?
🔵 dependencyConvergence 🔵 requireUpperBoundDeps 🔵 banDuplicateClasses Maven Enforcer plugin
Gradle Enforcer plugin
Let’s talk about OpenRewrite
🟢 AddDependency 🟢 RemoveDependency 🟢 ChangeDependency 🟢 UpgradeDependencyVersion
AddDependency 🟢 org.openrewrite.maven.AddDependency 🟢 org.openrewrite.gradle.AddDependency 🟢 org.openrewrite.java.dependencies.AddDependency
RemoveDependency 🟢 org.openrewrite.maven.RemoveDependency 🟢 org.openrewrite.gradle.RemoveDependency 🟢 org.openrewrite.java.dependencies.RemoveDependency
ChangeDependency 🟢 org.openrewrite.maven.ChangeDependency 🟢 org.openrewrite.gradle.ChangeDependency 🟢 org.openrewrite.java.dependencies.ChangeDependency
Let’s talk about Jackson
Jackson 2.x → Jackson 3.x
Jackson library
OpenRewrite recipe
Jackson 2 to Jackson 3
Jackson 2 to Jackson 3
Final thoughts
🟢 Build often 🟢 Release often 🟢 use OpenRewrite for
complex migrations
The End
Tuesday at 12:30 PM
Wednesday at 10:30 AM
Bonus
None
Let’s talk about Netty
Netty dependencies 🔵 some Netty artifacts are platform dependent 🔵
use artifact classifiers
Example: artifact <classifier> Linux x86
Linux ARM 64 Example: artifact <classifier>