この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-10 11:03:32

タイトル: maven
SEOタイトル: Maven 完全ガイド (pom.xml / ライフサイクル / プラグイン / リポジトリ)

この記事の要点
  • Apache Maven = Java プロジェクトのビルド・依存管理・パッケージング標準ツール
  • pom.xml でプロジェクト情報・依存・ビルド設定を宣言的に記述
  • Maven Central Repository から数十万のライブラリを座標 (groupId/artifactId/version) で取得
  • ライフサイクル: validate → compile → test → package → verify → install → deploy
  • 代表コマンド mvn clean install = ローカルリポジトリ (~/.m2) に成果物を配置

Maven とは

Apache Maven は、Java プロジェクト向けのビルド管理・依存管理・プロジェクト管理を統合的に行うツールです。2004 年に Apache Software Foundation のトッププロジェクトとなって以降、Java エコシステムの事実上の標準として君臨してきました。pom.xml という XML ファイルでプロジェクトを宣言的に記述し、Maven Central という巨大な公開リポジトリからライブラリを自動取得する仕組みが革命的でした。

項目内容
初回リリース2004 年
開発元Apache Software Foundation
ライセンスApache License 2.0
最新バージョン (2025)Maven 3.9.x / 4.0.x
主な対象言語Java (Kotlin / Scala / Groovy も可)
競合Gradle / sbt / Ant + Ivy

pom.xml の基本構造



    4.0.0

    
    com.example
    my-app
    1.0.0-SNAPSHOT
    jar

    
    
        17
        17
        UTF-8
    

    
    
        
            org.springframework.boot
            spring-boot-starter-web
            3.2.0
        
        
            org.junit.jupiter
            junit-jupiter
            5.10.0
            test
        
    

    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

ライフサイクルとフェーズ

Maven の標準ライフサイクルには 3 種類あります。最重要は default ライフサイクル:

フェーズ説明
validateプロジェクトが正しいか検証
compileソースコードをコンパイル
testユニットテスト実行 (Surefire)
packagejar / war にパッケージング
verify結合テスト (Failsafe)
installローカルリポジトリ (~/.m2) に配置
deployリモートリポジトリに公開

その他のライフサイクル:

  • cleantarget/ ディレクトリを削除
  • site — プロジェクトサイト (HTML) を生成

主要コマンド

# クリーン + ビルド + ローカルインストール (定番)
mvn clean install

# テスト省略してパッケージング
mvn clean package -DskipTests

# 特定モジュールのみビルド
mvn -pl module-name install

# 依存ツリーを表示
mvn dependency:tree

# 未使用依存を検出
mvn dependency:analyze

# プロジェクト情報サイト生成
mvn site

# Maven バージョン確認
mvn -v

# 並列ビルド (高速化)
mvn -T 4 clean install     # 4 スレッド
mvn -T 1C clean install    # CPU コア数 x1

# オフラインモード
mvn -o package

依存管理 (Dependency)

Maven の核心は推移的依存解決です。Spring Boot Web を入れるだけで、内部で必要な Tomcat / Jackson / Validation など 30 以上のライブラリが自動で揃います:


    org.springframework.boot
    spring-boot-starter-web
    3.2.0
    compile    
    false

scope の種類

scopeコンパイルテスト実行時パッケージ含む
compile (既定)OOOO
providedOOOX
runtimeXOOO
testXOXX
systemOOOX

Maven Central Repository

世界最大の Java ライブラリリポジトリ。座標 groupId:artifactId:version で一意に識別されます。検索は search.maven.orgmvnrepository.com で行います。

ローカルリポジトリ: ~/.m2/repository/
リモート (公式)   : https://repo.maven.apache.org/maven2/
ミラー候補       : Maven Central の各種ミラー

検索:
  https://mvnrepository.com  ← 一番便利
  https://search.maven.org

例:
  org.springframework.boot:spring-boot-starter-web:3.2.0
  → ~/.m2/repository/org/springframework/boot/spring-boot-starter-web/3.2.0/

settings.xml と認証

ユーザレベル設定は ~/.m2/settings.xml に書きます。社内 Nexus / Artifactory への接続情報など:


  
    
      nexus-snapshots
      deploy
      ${env.MAVEN_PASSWORD}
    
  

  
    
      internal-nexus
      central
      https://nexus.company.com/repository/maven-public/
    
  

  
    
      internal
      
        
          internal-releases
          https://nexus.company.com/repository/maven-releases/
        
      
    
  

マルチモジュールプロジェクト

大規模プロジェクトでは親 POM + 複数子モジュール構成が定番:

my-project/
├── pom.xml           ← 親 (packaging=pom)
├── api/
│   └── pom.xml
├── core/
│   └── pom.xml
└── web/
    └── pom.xml


    com.example
    my-project
    1.0.0
    pom

    
        api
        core
        web
    

    
        
        
            
                com.fasterxml.jackson.core
                jackson-databind
                2.16.0
            
        
    




    
        com.example
        my-project
        1.0.0
    

    api

    
        
            com.fasterxml.jackson.core
            jackson-databind
            
        
    

主要プラグイン

プラグイン用途
maven-compiler-pluginコンパイル設定 (Java バージョン)
maven-surefire-pluginユニットテスト実行
maven-failsafe-plugin結合テスト実行
maven-shade-pluginFat JAR 作成 (全依存同梱)
spring-boot-maven-pluginSpring Boot 用 Fat JAR / Docker
jacoco-maven-pluginカバレッジ計測
versions-maven-plugin依存バージョン一括更新
maven-release-pluginリリースタグ作成・バージョン上げ

Maven Wrapper (mvnw)

プロジェクトに Maven 本体を同梱する仕組み。チームメンバが Maven をインストールしなくても使えます:

# Maven Wrapper の生成
mvn wrapper:wrapper

# 以後は ./mvnw を使う
./mvnw clean install
./mvnw spring-boot:run

# Windows
mvnw.cmd clean install

Gradle / sbt との比較

ツール記法速度柔軟性
MavenXML (宣言的)低 (制約強い)
GradleGroovy / Kotlin DSL高 (キャッシュ強力)
sbtScala DSL中 (Scala 専用)
Ant + IvyXML (手続き的)非常に高

選び方: 新規 Java プロジェクトなら Gradle がトレンド。既存 Java エンタープライズなら Maven が無難。

FAQ

Q: mvn installmvn deploy の違い
A: install はローカル ~/.m2 に配置するだけ。deploy は社内/公開 Maven リポジトリ (Nexus 等) にアップロード。

Q: 依存のバージョン衝突を解決したい
A: mvn dependency:tree -Dverbose で衝突を可視化。親 POM の dependencyManagement でバージョン固定するか、子で明示的に exclude。

Q: SNAPSHOT バージョンって何?
A: 開発中の不安定版。1.0.0-SNAPSHOT のように末尾に -SNAPSHOT を付けます。リリース時は SNAPSHOT を外します。