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
270
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.6k
Spring Frameworkの新標準!? ~ RestClientとHTTPインターフェース入門 ~
ogiwarat
4
3k
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
GoにおけるFFIのこれまでとこれから
goccy
5
2.3k
AIオーケストレーションを活用した 開発ワークフローの設計と実践
bqnq
0
130
20260912_スクラムにジェネラリストは必要か
ryugen04
0
310
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
0
150
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
250
コーディングエージェントでM5Stack系の開発を少し試した時の話 / M5 Japan Tour 2026 Autumn 東京
you
PRO
0
120
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
210
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
420
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
310
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
150
日経電子版を支えていく Kasane Design System/fec_fukuoka
nikkei_engineer_recruiting
0
620
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
110
Featured
See All Featured
Mind Mapping
helmedeiros
1
350
Statistics for Hackers
jakevdp
799
230k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
470
Scaling GitHub
holman
464
140k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
500
The browser strikes back
jonoalderson
0
1.7k
Docker and Python
trallard
47
4.2k
Optimizing for Happiness
mojombo
378
71k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
190
Designing Powerful Visuals for Engaging Learning
tmiket
1
540
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 ご清聴ありがとうございました