libro
www.tuyano.com
初心者のためのApache Maven入門

Javaアプリケーションの開発 (4/5)

作成:2017-10-14 11:41
更新:2017-10-14 11:41

■maven-jar-pluginで実行可能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を実行してみて下さい。今度は問題なく実行できるはずですよ。

※プログラムリストが表示されない場合

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>

※関連コンテンツ

「初心者のためのApache Maven入門」に戻る