Mavenは、コマンドを使って簡単にJavaやScalaいるんなプロジェクトの作成、Jarのビルドが行なえます。
Mavenのメリットは、プロジェクトのビルドに依存するさまざまなライブラリやリソースを管理してくれることができます。
Mavenプロジェクトの構造
代表的なMavenプロジェクトの構造は以下の通りになります。
MavenProject
┣━src
┃ ┣━main
┃ ┃ ┣━java
┃ ┃ ┗━resource
┃ ┗━test
┃ ┣━java
┃ ┗━resource
┗━pom.xml
Mavenプロジェクト作成
ローカル上、Mavenのコマンドで必要になったディレクトリを作成することができます。
例えば、MvnJavaプロジェクトを作ります。
cd /work
mvn archetype:generate \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false \
-DgroupId=com.demo \
-DartifactId=MvnJava
作成されたディレクトリは以下の通り。
MvnJava
┣━src
┃ ┣━main
┃ ┃ ┣━java
┃ ┃ ┃ ┗━main
┃ ┃ ┃ ┗━java
┃ ┃ ┃ ┗━com
┃ ┃ ┃ ┗━domo
┃ ┃ ┃ ┗━App.java
┃ ┃ ┗━resource
┃ ┗━test
┃ ┣━java
┃ ┃ ┗━java
┃ ┃ ┗━com
┃ ┃ ┗━domo
┃ ┃ ┗━AppText.java
┃ ┗━resource
┗━pom.xml
App.javaの中身は以下
package com.demo;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
AppTest.javaの中身は以下
package com.demo;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}
pom.xmlの編集
pomとは、「project object model」の略で、プロジェクトのさまざまな情報を扱うためのオブジェクトモデルです。pom.xmlでは、プロジェクトの設定をxmlのタグとして記述していきます。
今度、JUnitテストを行うために、テストに依存するライブラリを追加します。
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>MvnJava</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>MvnJava</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
Mavenプロジェクトのコンパイル
Mavenプロジェクトをコンパイルします。
cd /work/MvnJava
mvn compile
# 下の結果が表示されたらコンパイル完了
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
targetディレクトリが作成されます。
JUnitテストに依存するJarは以下の場所に置かれてあります。
ls /Users/username/.m2/repository/junit/junit/3.8.1/
junit-3.8.1.jar
JUnitの実施
mvn test
# 結果
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.demo.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.01 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.083 s
[INFO] Finished at: 2019-03-21T16:59:50+09:00
[INFO] ------------------------------------------------------------------------
Jarのビルド
mvn package
# 結果
[INFO] Building jar: /work/MvnJava/target/MvnJava-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.768 s
[INFO] Finished at: 2019-03-21T17:12:01+09:00
[INFO] ------------------------------------------------------------------------
MvnJava-1.0-SNAPSHOT.jarは、ビルドできたJarです。
Jarの実行
java -cp /work/MvnJava/target/MvnJava-1.0-SNAPSHOT.jar com.demo.App
# 結果
Hello World!
Mavenよく使うコマンド
mvn -v: | Mavenバージョンを確認します。利用中のJDKの情報も含めます。 |
mvn compile: | Maven内の項目をコンパイルします。Mavenディレクトリの直下にtargetディレクトリが生成されます。その中にクラスが置かれているclassesディレクトリなどが作成されています。 |
mvn test: | Mavenのテストを実行します。そのためには、Targetディレクトリの中にテスト用のクラスとテスト結果を作成されます。 |
mvn package: | Mavenプロジェクトをコンパイルして、targetディレクトリにビルドします。 |
mvn clean: | targetディレクトリを削除します。 |
mvn install: | ローカルリポジトリにインストールする。 |