Maven

開発手法・ツール | IT用語集

この用語をシェア

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アプリケーション

開発フロー:

  1. プロジェクト作成:Spring Initializrまたはmvn archetype:generate
  2. 依存関係追加:pom.xmlにspring-boot-starter-web等を追加
  3. 開発:src/main/javaにJavaコード作成
  4. テスト:src/test/javaにテストコード作成
  5. ビルド:mvn clean packageでJARファイル生成
  6. 実行: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の活用
  • プラグイン活用:開発効率化のカスタマイズ

この用語についてもっと詳しく

Mavenに関するご質問や、システム導入のご相談など、お気軽にお問い合わせください。