java-common-code/docs/java_maven.md
2025-10-11 18:09:02 +09:00

5.7 KiB

Mavenとは

Maven(メイヴン)は、Javaプロジェクトのビルド・依存管理・実行を自動化するツールです。

  • Node.js の npm
  • Python の pip + venv

Install

Windows

wingetでインストール

# JDK
winget install EclipseAdoptium.Temurin.21.JDK
# Maven
winget install Apache.Maven
# 確認
java -version
mvn -v

Chocolatey(管理者 PowerShell)でインストール

choco install temurin21
choco install maven

永続的に設定(PowerShell管理者)

# JDK のインストール先に応じてパスを調整
setx JAVA_HOME "C:\Program Files\Eclipse Adoptium\jdk-21"
setx MAVEN_HOME "C:\ProgramData\chocolatey\lib\maven\apache-maven-3.9.9"
setx PATH "%PATH%;%JAVA_HOME%\bin;%MAVEN_HOME%\bin"

プロジェクト作成・実行

mvn archetype:generate -DgroupId=com.example -DartifactId=hello-maven `
  -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
cd hello-maven
mvn -q -DskipTests package

Mac

Homebrewでインストール

brew install maven
# 確認
mvn -v
# 出力例
# Apache Maven 3.9.9
# Java version: 21.0.2

Linux

Debian/Ubuntu

sudo apt update
sudo apt install -y temurin-21-jdk maven || sudo apt install -y openjdk-21-jdk maven
java -version
mvn -v

Fedora/RHEL/CentOS Stream

sudo dnf install -y java-21-openjdk java-21-openjdk-devel maven

Dockerで実行する場合

公式イメージ: maven:3.9-eclipse-temurin-21

mkdir hello-maven && cd hello-maven
docker run --rm -it -v "$PWD":/app -w /app maven:3.9-eclipse-temurin-21 \
  mvn -q archetype:generate -DgroupId=com.example -DartifactId=hello-maven \
  -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

cd hello-maven
docker run --rm -it -v "$PWD":/app -w /app maven:3.9-eclipse-temurin-21 mvn -q -DskipTests package

生成物: target/*.jar はホスト側にも残る

How To Setup

プロジェクト作成

mvn archetype:generate -DgroupId=com.example -DartifactId=hello-maven \
  -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

以下の構築が作成されます

hello-maven/
├─ pom.xml
├─ src/
│  ├─ main/java/com/example/App.java
│  └─ test/java/com/example/AppTest.java
オプション 意味
archetype:generate
-DgroupId=com.example グループID(Javaのパッケージ階層にも使われる)
-DartifactId=hello-maven アーティファクトID(生成されるプロジェクト名)
-DarchetypeArtifactId=maven-archetype-quickstart 使用するテンプレートの種類(標準の“最小構成”の1つ)
-DinteractiveMode=false 対話モードをオフ(すべて自動)

基本的なコマンド

  • mvn compile
    • ソースをコンパイル(target/classesへ)
  • mvn exec:java -Dexec.mainClass="com.example.App"
    • 実行(後述のplugin必要)
  • mvn test
    • テスト実行
  • mvn package
    • jarファイル作成(target/hello-maven-1.0-SNAPSHOT.jar)
  • mvn clean:
    • targetディレクトリ削除

直接mvn exec:javaで動かす場合はpluginが必要です。

pom.xml

<project>
<!-- add -->
<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>3.1.0</version>
      <configuration>
        <mainClass>com.example.App</mainClass>
      </configuration>
    </plugin>
  </plugins>
</build>
<!-- /add -->
</project>

直接実行する場合は以下です

java -cp target/classes com.example.App
  • -cp: はクラスパス指定(classpath)
  • com.example.Appは完全修飾クラス名
  • 拡張子.classは書かない

パッケージ化する場合

  1. Jarファイルを作成する
  2. Jarから実行する
# java -cp target/xxx.jar com.example.App
java -cp target/hello-maven-1.0-SNAPSHOT.jar com.example.App

Javaは通常、.class(target/classes/)と他のライブラリ(.jar)を別々に管理しています。そのままだと実行時に依存jarが必要です。

java -cp target/classes:~/.m2/repository/gson-2.10.jar com.example.App

fat jarにまとめることにより全部ひとつのjarにパッキングできます。 maven-assembly-pluginが必要になります

<project>
<!-- add -->
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.6.0</version>
      <configuration>
        <archive>
          <manifest>
            <mainClass>com.example.App</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>  
</build>
<!-- /add -->
</project>

コマンド

mvn clean package
java -jar target/hello-maven-1.0-SNAPSHOT-jar-with-dependencies.jar