読者です 読者をやめる 読者になる 読者になる

Maven でプロジェクトの作成からビルド、実行までをやってみた

Maven

ちょっと Maven さわってみたので、備忘録として残し置きます。
やったのは、以下のドキュメントに書いてる「プロジェクト作成からビルドまで」ってところです。

Maven – Maven in 5 Minutes

最近ライブラリとかも Maven でやってくれ的なことになってて、今までは「jar で提供してダウンロードさせてくれよ」とか思ってましたが、今回触ってみて案外便利で、どっちかといえば Maven のほうがいいかもと今更ながらに思いました。( 遅い・・・ )


以下、やったことの手順です。

1. プロジェクトの作成

ドキュメントに記載の通り、以下のコマンド実行してプロジェクトを作成する。

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

実行すると、may-app ディレクトリ配下にいろいろファイルが作られる ( 詳細はドキュメントを参照ください )。


2. コード書いたり、テストケース書いたり、pom.xml 変更したり

純粋に Maven 触るだけだったら不要な手順です。
今回はちょっとだけ変更加えてみました。

■ App.java

package com.mycompany.app;

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

/**
 * Hello world!
 *
 */
public class App {
    
    private static final Logger logger = Logger.getLogger(App.class);
    
    public static void main( String[] args ) {
        App app = new App();
        System.out.println("add   : " + app.add(10, 20));
        System.out.println("hello : " + app.hello("hoge"));
        
        DOMConfigurator.configure("log4j.xml");
		logger.info("MAVEN TEST !!");
    }
    
    public int add(int a, int b) {
        return a + b;
    }
    
    public String hello(String name) {
        return "hello " + name;
    }
}

メソッド追加、Log4j 使うようにしてます。

log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<log4j:configuration debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="n1" class="org.apache.log4j.ConsoleAppender">
  <param name="Target" value="System.out"/>
  <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%m%n"/>
  </layout>
</appender>
<root>
  <priority value ="info" />
 <appender-ref ref="n1" />
</root>
</log4j:configuration>

※ コンソールに渡された文字列出すだけです。my-app 配下にでも置いてやってください ( パス通ってればどこでもいいはずです )。

■ AppTest.java

- 略 -
public void testApp() {
        App app = new App();
        assertEquals(3, app.add(1, 2));
        assertTrue("hello uga".equals(app.hello("uga")));
    }
- 略 -

※ 追加したメソッドのテストを追加してます。

■ pom.xml

<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.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>
  
  <build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <configuration>
        <mainClass>com.mycompany.app.App</mainClass>
      </configuration>
    </plugin>
  </plugins>
  </build>
  
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
  </dependencies>
</project>

※ 依存関係のライブラリに Log4j を追加、mvn コマンドから Java 実行できる(?)プラグイン exec-maven-plugin を追加してます。

Exec Maven Plugin - Introduction


3. ビルドする

以下のコマンドでプロジェクトをビルドする。

mvn package

※ 何しかのフェーズでビルドエラーとかなってやり直す場合は、一回 mvn clean しておいたほうがいいのかな。

実行すると target ディレクトリができて、そこに jar ファイルやらいろいろ生成される。


4. 実行する。

mvn exec:java で実行してやる。

mvn exec:java

実行結果は以下の通り。一応、無事動いてそうであります。

add   : 30
hello : hello hoge
- 略 -
MAVEN TEST !!


以上です。

[環境情報]
Ubuntu 14.04
OpenJDK 1.7.0_65
Maven 2.2.1