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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
荻原利雄
May 31, 2026
Technology
290
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.7k
第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駆動開発で仕様はどこまで書くべきか? ― 人とAIの責務境界から考える開発プロセスの実践
takahiromatsui
1
300
AI臭い文章とは何なのか
nasuvitz
38
77k
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
390
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
320
形式手法を使って仕様をコーディングしよう
mikanichinose
0
160
Account Factory for Terraformによる 標準化されたアカウント発行の自動化
pensuke628
0
120
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
2
300
Claude起点の仕様駆動開発
tanakaseiya
0
300
KanaAI
shreyas1009
0
140
『GOエコノミー 』(相乗りサービス) におけるスペック駆動開発
mot_techtalk
1
220
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
230
The seven pitfalls of AI (revised version)
ufried
0
210
Featured
See All Featured
Odyssey Design
rkendrick25
PRO
2
850
Tell your own story through comics
letsgokoyo
1
1.1k
30 Presentation Tips
portentint
PRO
1
410
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Claude Code のすすめ
schroneko
67
230k
Producing Creativity
orderedlist
PRO
348
41k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
The Limits of Empathy - UXLibs8
cassininazir
1
690
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
340
Embracing the Ebb and Flow
colly
88
5.2k
Skip the Path - Find Your Career Trail
mkilby
1
240
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 ご清聴ありがとうございました