この用語をシェア
Mavenとは
Maven(メイヴン)は、Apache Software Foundationが開発したJavaプロジェクトのビルド自動化ツールです。pom.xmlによる設定管理、Maven Central Repositoryからの豊富な依存関係管理、標準的なプロジェクト構造により、効率的で一貫性のあるJava開発環境を提供します。
Mavenの主要機能
プロジェクト管理
- 標準ディレクトリ構造:統一されたプロジェクトレイアウト
- pom.xml:プロジェクト設定の一元管理
- 依存関係管理:外部ライブラリの自動ダウンロード
- ライフサイクル管理:ビルド段階の標準化
ビルド自動化
- コンパイル:Javaソースコードの自動コンパイル
- テスト実行:JUnitテストの自動実行
- パッケージング:JAR、WAR、EARファイルの生成
- デプロイメント:成果物のリポジトリへの配布
pom.xml(Project Object Model)
基本的なpom.xmlの例:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>my-web-app</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>6.0.13</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies> </project>
標準ディレクトリ構造
Convention over Configuration
設定より規約の原則に基づく標準的なプロジェクト構造
標準ディレクトリ構造:
my-project/ ├── pom.xml ├── src/ │ ├── main/ │ │ ├── java/ # Javaソースコード │ │ ├── resources/ # 設定ファイル、プロパティ │ │ └── webapp/ # Webアプリケーション用ファイル │ └── test/ │ ├── java/ # テストコード │ └── resources/ # テスト用リソース └── target/ # ビルド成果物(自動生成)
Mavenライフサイクル
ビルドライフサイクルの段階
- validate:プロジェクト構造の検証
- compile:ソースコードのコンパイル
- test:単体テストの実行
- package:JARやWARファイルの作成
- verify:統合テストと品質チェック
- install:ローカルリポジトリへのインストール
- deploy:リモートリポジトリへの配布
主要なMavenコマンド
基本コマンド
mvn compile
- ソースコードのコンパイルmvn test
- テストの実行mvn package
- JARファイルの作成mvn install
- ローカルリポジトリにインストールmvn clean
- ビルド成果物の削除
よく使用される組み合わせ
mvn clean compile
- クリーン後にコンパイルmvn clean test
- クリーン後にテスト実行mvn clean package
- クリーン後にパッケージ作成mvn clean install
- 完全なビルドとインストール
Maven Central Repository
世界最大のJavaライブラリリポジトリ
- 公開ライブラリ数:数百万のアーティファクト
- 人気ライブラリ:Spring、Hibernate、Apache Commons等
- 自動ダウンロード:依存関係の自動解決
- バージョン管理:リリース・スナップショット管理
主要なJavaライブラリ
- Spring Framework:エンタープライズJava開発
- Apache Commons:汎用ユーティリティ
- JUnit:単体テストフレームワーク
- Jackson:JSON処理ライブラリ
- SLF4J/Logback:ログ管理
依存関係のスコープ
スコープの種類
- compile:コンパイル・実行時に必要(デフォルト)
- test:テスト時のみ必要
- runtime:実行時のみ必要
- provided:コンテナが提供(例:Servlet API)
- system:システムパスの外部JAR
- import:BOMファイルの取り込み
プラグイン
よく使用されるプラグイン
- maven-compiler-plugin:コンパイル設定
- maven-surefire-plugin:単体テスト実行
- maven-failsafe-plugin:統合テスト実行
- maven-war-plugin:WARファイル作成
- spring-boot-maven-plugin:Spring Boot用
実際の開発例
Spring Boot Webアプリケーション
開発フロー:
- プロジェクト作成:Spring Initializrまたは
mvn archetype:generate
- 依存関係追加:pom.xmlにspring-boot-starter-web等を追加
- 開発:src/main/javaにJavaコード作成
- テスト:src/test/javaにテストコード作成
- ビルド:
mvn clean package
でJARファイル生成 - 実行:
java -jar target/myapp.jar
で起動
マルチモジュールプロジェクト
大規模開発での活用
- 親POM:共通設定の一元管理
- 子モジュール:機能別のサブプロジェクト
- 依存関係:モジュール間の参照関係
- 一括ビルド:全モジュールの同時ビルド
メリット
- 標準化:統一されたプロジェクト構造
- 依存関係管理:ライブラリの自動解決
- ビルド自動化:一貫したビルドプロセス
- 豊富なエコシステム:Maven Centralの膨大なライブラリ
- IDE統合:Eclipse、IntelliJ IDEAでのサポート
Gradleとの比較
- 設定方式:Maven(XML) vs Gradle(Groovy/Kotlin DSL)
- パフォーマンス:Gradleがより高速
- 柔軟性:Gradleがより柔軟、Mavenが標準的
- 学習コストー:Mavenがシンプル、Gradleが高機能
学習・導入のポイント
- pom.xml理解:設定ファイルの構造把握
- ライフサイクル習得:ビルド段階の理解
- 依存関係管理:スコープとバージョン管理
- 標準構造遵守:Convention over Configurationの活用
- プラグイン活用:開発効率化のカスタマイズ