Javaアプリケーションの開発 (4/5)
作成:2017-10-14 11:41
更新:2017-10-14 11:41
更新:2017-10-14 11:41
■maven-jar-pluginで実行可能Jarを作る
これでプログラムの実行は簡単になりましたが、まだ完全ではありません。
「target」フォルダに、パッケージ化されたJarファイルが作成されますが、これをそのまま実行しようとすると、うまく動かないことがわかるでしょう。例えばコマンドラインから、
このように実行してみて下さい。すると、以下のようなエラーメッセージが出力されてしまうはずです。
実は、mvn packageで生成されるJarファイルは、実行可能Jarではないのです。マニフェストファイルがきちんと生成されていないため、そのままでは実行できないのです。
Jarファイルの作成は、maven-jar-pluginというプラグインによって行われています。このプラグインに、マニフェストファイル作成のための設定情報を追加していくと以下のような形になるでしょう。
設定情報を記述する<configuration>内に、アーカイブに関する設定を記述する<archive>タグがあります。その中に、マニフェストファイルに関する<manifest>タグがあります。ここに、マニフェストに関する情報を記述しておきます。用意するのは以下のものです。
<mainClass>――メインクラスを指定します。
<addClasspath>――クラスパス(Class-Path値)を追加するかどうかを指定します。これはtrueでOKです。
<addExtensions>――拡張情報が記述されます。これは、<dependencies>に記述されるライブラリ情報などを書き出すためのものです。これもtrueでOKです。
<packageName>――Jarのパッケージ(Package値)を出力するものです。
特にライブラリなども使っておらず、SampleMavenAppのようなシンプルなプログラムならば、<mainClass>だけ指定すればOKでしょう。
これらをpom.xmlに記述し、mvn packageでJarファイルを作成してから、java -jar で、SampleMavenApp-1.0-SNAPSHOT.jarを実行してみて下さい。今度は問題なく実行できるはずですよ。
「target」フォルダに、パッケージ化されたJarファイルが作成されますが、これをそのまま実行しようとすると、うまく動かないことがわかるでしょう。例えばコマンドラインから、
java -jar target\SampleMavenApp-1.0-SNAPSHOT.jar
このように実行してみて下さい。すると、以下のようなエラーメッセージが出力されてしまうはずです。
target\SampleMavenApp-1.0-SNAPSHOT.jarにメイン・マニフェスト属性がありません
実は、mvn packageで生成されるJarファイルは、実行可能Jarではないのです。マニフェストファイルがきちんと生成されていないため、そのままでは実行できないのです。
■maven-jar-pluginの設定について
Jarファイルの作成は、maven-jar-pluginというプラグインによって行われています。このプラグインに、マニフェストファイル作成のための設定情報を追加していくと以下のような形になるでしょう。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<mainClass>メインクラスの指定</mainClass>
<addClasspath>true</addClasspath>
<addExtensions>true</addExtensions>
<packageName>パッケージ</packageName>
</manifest>
</archive>
</configuration>
</plugin>
設定情報を記述する<configuration>内に、アーカイブに関する設定を記述する<archive>タグがあります。その中に、マニフェストファイルに関する<manifest>タグがあります。ここに、マニフェストに関する情報を記述しておきます。用意するのは以下のものです。
<mainClass>――メインクラスを指定します。
<addClasspath>――クラスパス(Class-Path値)を追加するかどうかを指定します。これはtrueでOKです。
<addExtensions>――拡張情報が記述されます。これは、<dependencies>に記述されるライブラリ情報などを書き出すためのものです。これもtrueでOKです。
<packageName>――Jarのパッケージ(Package値)を出力するものです。
特にライブラリなども使っておらず、SampleMavenAppのようなシンプルなプログラムならば、<mainClass>だけ指定すればOKでしょう。
これらをpom.xmlに記述し、mvn packageでJarファイルを作成してから、java -jar で、SampleMavenApp-1.0-SNAPSHOT.jarを実行してみて下さい。今度は問題なく実行できるはずですよ。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <configuration> <archive> <manifest> <mainClass>com.tuyano.libro.App</mainClass> <addClasspath>true</addClasspath> <addExtensions>true</addExtensions> <packageName>com.tuyano.libro</packageName> </manifest> </archive> </configuration> </plugin>
※関連コンテンツ