5.7 KiB
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)
- 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は書かない
パッケージ化する場合
- Jarファイルを作成する
- 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