Help us understand the problem. What is going on with this article?

コマンドでMavenプロジェクトを作ります

More than 1 year has passed since last update.

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: ローカルリポジトリにインストールする。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした