依存するjarを含んだバッチ用jarファイルをMavenでビルドする手順
Mavenを利用すると、開発やビルドの際に、
依存したjarファイルを自動的に解決する事ができます。
開発したバッチをビルドしたマシンで実行している分にはいいのですが、
他のマシンにバッチを持って行って実行する場合には、
別途、依存するjarをコピーする必要があり、配備が面倒です。
調べてみると、Mavenプラグイン「Maven Assembly Plugin」を
利用すると解決できるようなので、手順をまとめておきます。
Maven Assembly Plugin
http://maven.apache.org/plugins/maven-assembly-plugin/
ここでは、MacOSXで、
「Eclipse4.3 / Eclipse IDE for Java EE Developers」を、
利用している前提で手順をまとめています。
この記事をまとめる際、次のサイトを参考にさせていただきました。
Maven Assembly Plugin で外部依存 jar をまとめる - A Memorandum
http://etc9.hatenablog.com/entry/20101210/1291996946
Mavenプロジェクトの作成
Eclipseを起動し、
File → New → MavenProject メニューで「New Maven Project」ダイアログを開きます。
Archetypeに「maven-archetype-quickstart」を選んでプロジェクト生成します。
生成したプロジェクト配下からpom.xmlを開き、
Dependencyタブの、Dependenciesの「Add…」ボタンから適当な依存ライブラリを追加します。
ここではCommonsMathのライブラリを追加することにします。
GroupId: org.apache.commons
ArtifactId: commons-math
Version: 2.2
次に、CommonsMathに依存したバッチを作成します。
src/main/javaの指定したパッケージ配下に生成されているApp.javaを次のように編集します。
App.java ※com.takemikami.batchsampleというパッケージを指定した場合
package com.takemikami.batchsample;
import org.apache.commons.math.linear.MatrixUtils;
import org.apache.commons.math.linear.RealMatrix;
/**
* Hello transpose A
*/
public class App
{
public static void main( String[] args )
{
RealMatrix matrix1 = MatrixUtils.createRealMatrix(new double[][]{{1, 0, -4}, {2, -3, -1}});
System.out.println("Matrix A: " + matrix1);
System.out.println("Hello transpose A: " + matrix1.transpose());
}
}
Maven Assembly Pluginの導入
次に、作成したプロジェクトにMaven Assembly Pluginを導入します。
pom.xmlを次のように編集(build以下を追加)します。
pom.xml ※com.takemikami.batchsampleというパッケージを指定した場合
<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/xsd/maven-4.0.0.xsd">
※省略※
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2</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>com.takemikami.batchsample.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
※省略※
</project>
ビルドと実行
最後に、Mavenを使って作成したバッチをjarにまとめます。
作成したプロジェクトのコンテキストメニューから、
Run as → 6.Maven Build … を選択します。
Goalsに「package」を指定して、ビルドを実行します。
ビルドが成功したら、以下のようにtarget配下にjarファイルが生成されているはずです。
「-with-dependencies」と付いているものが依存ファイルを含んだjar、
付いていないものが、依存ファイルを含んでいないjarになります。
targetディレクトリに移動して、それぞれのjarを実行してみます。
依存ファイルを含まない場合:
$ java -jar batchsample-0.0.1-SNAPSHOT.jar
batchsample-0.0.1-SNAPSHOT.jarにメイン・マニフェスト属性がありません
依存ファイルを含む場合:
$ java -jar batchsample-0.0.1-SNAPSHOT-jar-with-dependencies.jar
Matrix A: Array2DRowRealMatrix{{1.0,0.0,-4.0},{2.0,-3.0,-1.0}}
Hello transpose A: Array2DRowRealMatrix{{1.0,2.0},{0.0,-3.0},{-4.0,-1.0}}
これで「-with-dependencies」の方には依存するjarが含まれているのが、確認できます。
あとはこのjarを実際に動かしたいマシンにコピーして実行すればOKです。