
Java開発の“当たり前”になっている Maven と Gradle を、初心者でも迷わず使い分けられるように図解+コピペサンプルで丁寧に解説。
依存管理/ラッパー(wrapper)/ビルド〜テスト〜実行/Eclipse連携/実行可能JAR まで、この記事1本で“動く”ところまで行きます。
この記事のゴールと前提

- Maven/Gradleの役割と違いが分かる
- プロジェクトを最小構成でビルド・テスト・実行できる
- 依存管理の基本(スコープ/構成/推移解決)を理解する
- Eclipseで迷わず動かせる(インポート&ビルド)
- 小さなアプリを実行可能JARとして配布できる
前提:JDKとEclipseが導入済み(未導入なら こちら)。
MavenとGradleの違い・選び方
項目 | Maven | Gradle |
---|---|---|
設定ファイル | XML(pom.xml) | Kotlin/DSL(build.gradle.kts)またはGroovy |
学習コスト | 低め(定型が多い) | やや高め(柔軟で表現力が高い) |
標準性 | 強い(ライフサイクルが固定) | 柔軟(タスク構成を組み替えやすい) |
スピード | 十分実用 | キャッシュ/並列/設定キャッシュで高速化しやすい |
初学者向け | ◎ 最初の一歩に | ○ 慣れたら移行 |
指針:最初はMavenで“型”を身につけ、その後Gradleで表現力を手に入れるのが自然です。
ビルドのライフサイクル(図解)
ラッパー(Wrapper)とは?
「プロジェクトが使ったビルドツールのバージョン」を固定し、誰でも同じ環境でビルドできる仕組みです。mvnw
/gradlew
を使えば、チーム全員が同じビルドを再現できます。リポジトリにコミットしてOK(超重要)。
- Maven Wrapper:
mvn -N io.takari:maven:wrapper
などで生成(プロジェクトにmvnw
/mvnw.cmd
が追加される) - Gradle Wrapper:
gradle wrapper
で生成(gradlew
/gradlew.bat
などが追加)
コピペで動かす:Maven/Gradleタブ切替サンプル
プロジェクト構成(最小)
src/
├─ main/java/com/example/app/Main.java
└─ test/java/com/example/app/MainTest.java
pom.xml
pom.xml(最小構成) — まずはバージョンをプロパティでまとめ、JUnitを使ってテスト可能にします。
<project xmlns="https://maven.apache.org/POM/4.0.0"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>hello-mvn</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<junit.jupiter.version>5.10.0</junit.jupiter.version> <!-- 適宜更新 -->
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version> <!-- 適宜更新 -->
<configuration>
<useModulePath>false</useModulePath>
</configuration>
</plugin>
</plugins>
</build>
</project>
Main.java(最小)
package com.example.app;
public class Main {
public static void main(String[] args) {
System.out.println("Hello, Maven!");
}
}
MainTest.java(最小)
package com.example.app;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
class MainTest {
@Test void hello() {
assertEquals(2, 1 + 1);
}
}
ビルド/テスト/実行(コマンド)
# ラッパーがある場合
./mvnw -q -v
./mvnw -q clean test
./mvnw -q package
# classpath指定で実行(アプリ化は後述の実行可能JARへ)
java -cp target/hello-mvn-1.0.0.jar com.example.app.Main

依存管理の基礎:スコープ/構成と落とし穴
1) スコープ/構成
- Maven:
compile
(デフォルト)、provided
(実行時は不要)、runtime
、test
など。 - Gradle:
implementation
(推移依存は公開しない)、api
(ライブラリ公開用)、runtimeOnly
、testImplementation
など。
2) 推移(transitive)依存
あるライブラリが内部で別ライブラリに依存しているケース。不要な推移依存は明示的にexcludeし、競合はバージョン調整で解決します。
Mavenで推移依存を除外する例
<dependency>
<groupId>com.example</groupId>
<artifactId>foo</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
Gradleで推移依存を除外する例
dependencies {
implementation("com.example:foo:1.2.3") {
exclude(group = "org.slf4j", module = "slf4j-log4j12")
}
}
3) バージョンの決め方
- プロジェクトでプロパティ/バージョンカタログに集約(Maven:
<properties>
、Gradle:libs.versions.toml
)。 - 大幅アップデート時はまずテストをパスさせ、ランタイムとの相性を確認。
Eclipseとの連携(インポート手順)
Mavenプロジェクトをインポート
- File > Import… > Maven > Existing Maven Projects
- ルートディレクトリを選択 → pom.xml が検出される → Finish
- 依存は自動解決。エラーが出たら Project > Update Maven Project
Gradleプロジェクトをインポート
- File > Import… > Gradle > Existing Gradle Project
- ルートを選んで次へ → 依存同期(Buildship)
- エラー時は右クリック → Gradle > Refresh Gradle Project
実行は Run As > Java Application(Gradleなら application
の Run も便利)。
実行可能JARの作り方
Maven(例:シンプルなmainクラスをJAR化)
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.app.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
java -jar target/hello-mvn-1.0.0.jar
で実行可能に。外部依存を含めたい場合は「シェード(fat JAR)」プラグインを使います。
Gradle(applicationプラグインの配布物)
plugins {
java
application
// fat JAR を作るなら Shadow プラグインを追加(任意)
// id("com.github.johnrengelman.shadow") version "8.1.1"
}
application {
mainClass.set("com.example.app.Main")
}
tasks.register<Copy>("dist") {
dependsOn("installDist") // build/install ディレクトリへ配布物を生成
}
./gradlew installDist
で build/install/
以下に起動スクリプト付きの配布物ができます(Windows/Mac両対応)。
よくあるエラーと対処
- Could not resolve dependencies:一時的なネットワーク不調/レポジトリ未設定。
mavenCentral()
やプロキシ設定を確認し、再試行。 - JDKミスマッチ:ソース/ターゲット(Maven)やtoolchain(Gradle)がJDKに合っているか。
- 文字化け:Eclipseのワークスペース/コンソールをUTF-8に。Mavenは
project.build.sourceEncoding
をUTF-8に設定。 - テストが走らない:JUnit 5 なら Surefire の設定(Maven)/
useJUnitPlatform()
(Gradle)を確認。 - Windowsの改行(CRLF)問題:Gitの自動変換設定(
core.autocrlf
)とEditorの設定をチームで統一。
完了チェックリスト
- ラッパー(
mvnw
/gradlew
)を生成し、リポジトリにコミットした - 最小サンプルで build/test/run が成功した
- 依存は プロパティ/カタログで一元管理した
- Eclipseにインポートして実行できた
- 配布用に 実行可能JAR/配布物 を作成した
この次に知りたい情報
- Eclipse × Git(EGit)入門:初回コミットとリモート連携。
- 最初のJavaプロジェクト:パッケージ/クラス設計の基本。
- Javaのパッケージ/モジュール:module化のコツ。
FAQ

初心者はどちらから始める?
定型的で迷いにくいMavenからを推奨。Gradleは柔軟性が高い分、表現力を活かせる段階で触ると理解が速いです。
Wrapperは必ず使うべき?
はい。ビルドの再現性(CI/CDや他PC)に直結します。必ずコミットしてください。
依存競合の解決は?
Mavenは<dependencyManagement>
でバージョン統一、Gradleはバージョンカタログや明示除外で調整します。