Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
先取りMaven4 ~16年ぶりのメジャーアップデート、その進化とは?~
Search
荻原利雄
May 31, 2026
Technology
320
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
先取りMaven4 ~16年ぶりのメジャーアップデート、その進化とは?~
荻原利雄
May 31, 2026
More Decks by 荻原利雄
See All by 荻原利雄
実践ArchUnit ~実例による検証パターンの紹介~
ogiwarat
2
1.7k
Spring Frameworkの新標準!? ~ RestClientとHTTPインターフェース入門 ~
ogiwarat
4
3.1k
Spring Boot vs MicroProfile ~クラウドネイティブにおけるフレームワークの比較と選択~
ogiwarat
2
2.8k
第1回 AWSとGitHub勉強会 - キックオフ -
ogiwarat
0
1.2k
第2回 AWSとGitHub勉強会 - CodespacesとHelidonの利用 -
ogiwarat
0
1.2k
第3回 AWSとGitHub勉強会 - GitHub Actionsを使ったCI環境の構築 -
ogiwarat
0
1.2k
第4回 AWSとGitHub勉強会 - GitHub Actionsを使ったCD環境の構築 -
ogiwarat
0
1.2k
第5回 AWSとGitHub勉強会 - AWS EC2環境の構築 -
ogiwarat
0
1.1k
第6回 AWSとGitHub勉強会 - AWS ECS Fargate環境の構築 -
ogiwarat
0
1.4k
Other Decks in Technology
See All in Technology
AI Made Us Faster at Solving the Wrong Problems
marceloancelmo
0
160
サーバーフルコンピューティング?AWS Lambda
iwatatomoya
1
240
OpenSharing について熱く語る〜AI アセットの共有について〜
kameitomohiro
0
230
freeeらしさをAIとともに作る / Creating the freee Experience with AI
ymrl
0
190
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
120
ミイダス株式会社 テックチームのご紹介 / MIIDAS Tech Team
miidas
0
150
More Freedom on the Same Shared GPU Cluster: A Small Team’s Experience with vCluster
nttcom
0
130
生成AIで高い生産性を求められて、 悩み、乗り越えた話
mot_techtalk
2
130
ファミコンでPHPを動かす / PHP on the Famicom side b
tomzoh
0
130
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
310
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
280
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
260
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.1k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
550
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
720
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
580
The agentic SEO stack - context over prompts
schlessera
0
960
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
450
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Transcript
先取りMaven 4 ~16年ぶりのメジャーアップデート、その進化とは?~ 株式会社 豆蔵 執行役員 主幹ソフトウェアエンジニア 荻原 利雄 2026/5/30
JJUG CCC 2026 Spring
2 荻原 利雄(オギワラ トシオ) • 所属 / 職種 - 株式会社豆蔵
- デジタルアーキテクチャ事業部 - 主幹ソフトウェアエンジニア • プロフィール - オブジェクト指向とともにエンタープライズ なJavaアプリを作りつづけて25年のアラフィ フエンジニア - ここ数年は大規模基幹システムを支える JakartaEEフルスタックなフレームワークや Spring Bootを使ったフロントシステムの開発 を行ってましたが、年貢の納め時で2026年度 からは事業部長をやっています extact-io 豆蔵デベロッパーサイト 豆蔵デベロッパーサイトで色々執筆中! toshio-ogiwara
Agenda 1. Maven4に行く前にMavenのおさらい 2. Maven4におけるブレイクスルー 3. Maven4の新機能 3
本日の説明は • Maven4でこんなことができるようになったよ!の紹介が主な目的となります • なので、依存関係の解決やビルドライフサイクルなどMavenの詳細な仕組みは 説明しません(キチンと説明すると2日間研修コースができます) • 説明はしませんが、サンプルや図解をいれているので雰囲気で理解していただけると思い ます •
スライドの説明に使った完全なサンプルは動作可能な状態で一式GitHubにアッ プしています。違いがわかるようにMaven3とMaven4それぞれの実装を入れてい ます。 4 ←サンプルのアクセスはこちら https://github.com/extact-io/jjug-ccc-2026-spring • なお、サンプルも含め本スライドの 内容は、maven-4.0.0-rc-5をもとに 作成しています。 • GA版では内容が変更なる可能性があり ますので、その点はご留意ください
5 1. Maven4に行く前にMavenのおさらい
Mavenの概要と仕組み 6
7 2. Maven4におけるブレイクスルー
Maven4に込められた思い — Hervé Boutemy (in Javaadvent 2021) 8 どういうこと..?
1つのPOMが抱えていた「2つの矛盾する役割」 9 <project> <groupId>com.mamezou.sample</groupId> <artifactId>maven3-order-parent</artifactId> <version>${revision}${changelist}</version> <packaging>pom</packaging> <properties> <dependencies> <build>
</project> ライブラリを作成・配布する側 ライブラリを利用する側 とはいえ…
「琥珀に閉じ込められた」Mavenとエコシステムの呪縛 10 なにかいい方法はないか、あっ、それだ
ブレイクスルー:用途に応じた「POMの分離」 11 ビルド専用情報と 親POM参照を削ぎ落とす Mavenが生成 このブレイクスルーをもとにこれまで手がつけられなかった課題が改善の実施が可能に!
12 3. Maven4の新機能-Maven3との比較を添えて
1. 公開用POMをきれいにできるようになった 13 Maven3での困りごと order-app/ ├── pom.xml ├── testdata/ │
└── order_test.csv ├── web/ │ └── pom.xml ├── infra/ │ └── pom.xml └── application/ └── pom.xml • ビルドに使うPOMと利用者が依存解決に使うPOMが同じ • ライブラリ利用者に不要なビルド用設定が大量に含まれる <project> <parent> <groupId>com.mamezou.sample</groupId> <artifactId>maven3-order-parent</artifactId> <version>${revision}</version> </parent> <artifactId>order-web</artifactId> <properties> <revision>1.0.0-SNAPSHOT</revision> <openapi.generator.version>7.13.0</openapi.generator.version> </properties> <build> <plugins> <plugin> <artifactId>openapi-generator-maven-plugin</artifactId> ... </plugin> </plugins> </build> </project> ビルド用plugin設定 親POM参照 BOM import 未使用のdependencyManagement ${revision} のようなプロパティ このまま deploy すると、利用者に とって不要な情報まで公開POMに そのまま出ていく たとえば order-web/pom.xml に、ビルド用 の設定が大量に入って、ライブラリの利用者 は見たくない情報が沢山...
1. 公開用POMをきれいにできるようになった 14 Maven4での新機能 • Build POMとConsumer POMが明確に分離 • Cunsumer
POMはBuild POMをフラット化し、親POM参照を解決済みしに、 BOM importも展開した「利用者向け」の綺麗な依存情報にする <project xmlns="http://maven.apache.org/POM/4.1.0"> <modelVersion>4.1.0</modelVersion> <parent> <groupId>com.mamezou.sample</groupId> <artifactId>maven4-order-parent</artifactId> <version>${revision}</version> </parent> <artifactId>order-web</artifactId> <properties> <revision>1.0.0-SNAPSHOT</revision> <openapi.generator.version>7.13.0</openapi.generator.version> </properties> <dependencies> <dependency> <groupId>com.mamezou.sample</groupId> <artifactId>order-application</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>openapi-generator-maven-plugin</artifactId> ... </plugin> </plugins> </build> </project> <project> <modelVersion>4.0.0</modelVersion> <groupId>com.mamezou.sample</groupId> <artifactId>order-web</artifactId> <version>1.0.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.mamezou.sample</groupId> <artifactId>order-application</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> </dependencies> </project> ビルドに使うPOM mvn deploy -Dmaven.consumer.pom.flatten=true デプロイ Build POMから生成 ビルドに必要な情報は削 られてスッキリ
2. ルートディレクトリを安全に参照できるようになった 15 Maven3での困りごと • マルチモジュール構成で、 ${project.basedir}を使うと、Mavenを実行した階層(全体ルート 化か、個別ルート)によって指すディレクトリ位置がずれる。 • 環境依存を排除するための不自然な工夫や回避策が必要だった。
order-app/ ├── pom.xml ├── testdata/ │ └── order_test.csv ├── web/ │ └── pom.xml ├── infra/ │ └── pom.xml └── application/ └── pom.xml ${basedir}/testdata/order_test.csv order-app/application/testdata/order_test.csv application/pom.xml で 実行すると このプロジェクト構成で この定義を すべてのモジュールを一括ビルドする order-app ディレクトリでMavenを実行した場合 と、個別にモジュールをビルドする order-app/application で実行した場合とでディ レクトリの位置がズレる問題があった <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <additionalClasspathElements> <additionalClasspathElement>${project.basedir}/testdata</…> <additionalClasspathElement>${project.basedir}/../testdata</…> </additionalClasspathElements> </configuration> </plugin> <プロジェクト内のリソースを環境依存を排除して定義する工夫の例>
16 Maven4での新機能 • プロジェクトルートを明示する root属性が導入される。 • ルートディレクトリを常に正確に参照するための公式プロパティ <project xmlns="http://maven.apache.org/POM/4.1.0" root="true">
<modelVersion>4.1.0</modelVersion> <groupId>com.mamezou.sample</groupId> <artifactId>maven4-order-parent</artifactId> <version>1.0.0-SNAPSHOT</version> </project> 追加されたプロパティ 2. ルートディレクトリを安全に参照できるようになった ${project.rootDirectory} ${session.topDirectory} ${session.rootDirectory} root属性を定義 <configuration> <additionalClasspathElements> <additionalClasspathElement>${project.rootDirectory}/testdata</…> </additionalClasspathElements> </configuration> 子POMで次のように定義可能 これで order-app から実行しても、 order-app/application から実行し ても、常に次を指せる order-app/testdata/order_test.csv
17 3.マルチモジュールのバージョン記述が減った
18 4. <modules>より意味が分かりやすい<subprojects>が使 えるようになっただけでなくさらに便利に!
19 5. classpath と module-path の扱いを明示できるよう になった <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId>
<version>6.2.0</version> <type>classpath-jar</type> </dependency>
20 6. 失敗したところから安全に再開できるようになった
21 7. ビルドが早くなったー! mnvn install –T 4 じゃダメ
22 8. フェーズがわかりやすくなったー! mnvn install –T 4 じゃダメ
23 ご清聴ありがとうございました