概要
本記事では、Mavenで実行可能なJARファイルを簡単にビルドして作成する方法を記載します。ローカルで実行するようなツール等をJavaで作成する際には、JARファイルをコマンドもしくはダブルクリックで実行可能になるので参考にしていただければと思います。
プロジェクトの作成
mvnコマンドでJavaプロジェクトのスケルトンを作成します。
mvn archetype:generate
[...]
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1388:
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
7: 1.3
8: 1.4
Choose a number: 8:
Define value for property 'groupId': com.yhayashi30.sample
Define value for property 'artifactId': maven-jar-sample
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' com.yhayashi30.sample: :
Confirm properties configuration:
groupId: com.yhayashi30.sample
artifactId: maven-jar-sample
version: 1.0-SNAPSHOT
package: com.yhayashi30.sample
Y: : Y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.yhayashi30.sample
[INFO] Parameter: artifactId, Value: maven-jar-sample
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.yhayashi30.sample
[INFO] Parameter: packageInPathFormat, Value: com/yhayashi30/sample
[INFO] Parameter: package, Value: com.yhayashi30.sample
[INFO] Parameter: groupId, Value: com.yhayashi30.sample
[INFO] Parameter: artifactId, Value: maven-jar-sample
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /Users/yoshiyuki.hayashi/sf-workspace/maven-jar-sample
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:06 min
[INFO] Finished at: 2019-07-27T12:36:29+09:00
[INFO] ------------------------------------------------------------------------
maven-assembly-plugin
maven-assembly-pluginは、プロジェクトの出力をその依存関係、モジュール、ドキュメント、およびその他のファイルと共に単一の配布可能なアーカイブにまとめることを可能にします。
今回は、JARファイルの形式でアーカイブしたいので、jar-with-dependenciesを指定します。
また、<archive>の<manifest>で実行クラスのパスを指定します。
追加で<appendAssemblyId>をfalseに設定しています。そうしないと、作成されるjarファイルに-jar-with-dependenciesが最終的な名前に追加されてしまいます。
下記をpom.xmlファイルに記載します。
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.yhayashi30.sample.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
[...]
</project>
maven-dependency-plugin
maven-dependency-pluginのcopy-dependenciesを使用することで、プロジェクトの直接の依存関係とオプションで推移的な依存関係のリストを取得し、それらを指定された場所にコピーします。
下記をpom.xmlファイルに記載します。
<project>
[...]
<build>
[...]
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- configure the plugin here -->
</configuration>
</execution>
</executions>
</plugin>
</project>
サンプル
Githubに本記事のサンプルを格納しています。cloneして、mvn packageすることでJARファイルを作成できます。
https://github.com/yhayashi30/maven-jar-sample
git clone git@github.com:yhayashi30/maven-jar-sample.git
cd maven-jar-sample
mvn package
java -jar ./target/maven-jar-sample-1.0-SNAPSHOT.jar
参考
Apache Maven Assembly Plugin
http://maven.apache.org/plugins/maven-assembly-plugin/
Apache Maven Assembly Plugin Usage
http://maven.apache.org/plugins/maven-assembly-plugin/usage.html
Apache Maven Dependency Plugin
https://maven.apache.org/plugins/maven-dependency-plugin/
Apache Maven Dependency Plugin Usage
https://maven.apache.org/plugins/maven-dependency-plugin/usage.html