EclipseでのMavenプロジェクトの作成、jarファイルの作り方

基本的なことだけど躓くところが多かったのでまとめてみた。

Mavenプロジェクト作成

NewからMaven Projectを選ぶ f:id:beback:20161118232539p:plain Create a simple projectにチェックを入れる
Group IdとArtifact Idを入力する
Artifact Idはプロジェクト名になるようだ

pom.xmlの編集

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
  <dependency>
    <groupId>org.twitter4j</groupId>
    <artifactId>twitter4j-core</artifactId>
    <version>[4.0,)</version>
  </dependency>
</dependencies>
<build>
<plugins>
  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
      <execution>
        <id>make-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <archive><manifest><mainClass>myclient.Main</mainClass></manifest></archive>
    </configuration>
  </plugin>
</plugins>
</build>

外部ライブラリとしてtwitter4jを使った時のものです。

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

これがないとダイヤモンド演算子が使えないなどといったエラーメッセージがでました。

<dependencies>
  <dependency>
    <groupId>org.twitter4j</groupId>
    <artifactId>twitter4j-core</artifactId>
    <version>[4.0,)</version>
  </dependency>
</dependencies>

これは依存するライブラリを指定しています。自動でダウンロードまでしてくれて便利!

<build>
<plugins>
  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
      <execution>
        <id>make-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <archive><manifest><mainClass>myclient.Main</mainClass></manifest></archive>
    </configuration>
  </plugin>
</plugins>
</build>

これを書くことでスタンンドアロンなjarファイルが作れました。
mainClassタグを書かないと「メイン・マニフェスト属性がありません」と怒られます。 パッケージ名.メインクラス名を指定してください。
(Windowでのjavashift_jisで出てくるので文字化けして最初は途方に暮れてしまいました。 文字化けしたらコマンドプロンプトなどのターミナルのフォントをshift_jisにしてあげましょう。)

jarファイル作成、実行

プロジェクトのコンテキストメニュー(右クリック)からRan as -> Maven build...をクリック f:id:beback:20161119000759p:plain Goalsにpackageと入力
f:id:beback:20161119000804p:plain

プロジェクトのtargetディレクトリにjarファイルが生成される。ターミナルから

java -jar hatena-0.0.1-SNAPSHOT-jar-with-dependencies.jar

とやれば実行できる。

文字化けについて補足

javaプログラムの出力をutf-8で出力させたいときは

PrintStream stdo = new PrintStream(System.out, true, "UTF-8");
stdo.println("utf-8で出力!");

みたいにしてやればよい