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

独自ライブラリの開発と利用 (5/6)

作成:2017-10-14 15:06
更新:2017-10-14 15:06

■依存ライブラリを一体化する

なぜ、javaコマンドでは実行できないのか。それは、「ライブラリが入ってないため」です。

mvn packageで「target」に保存されるJarファイルには、実はMyLibのクラスは入っていません。このSampleMavenAppプロジェクトのクラスだけなのです。exec:javaで実行できたのは、ローカルリポジトリにあるライブラリを参照するようになっていたためです。

が、一般的なjavaコマンドでは、ローカルリポジトリなどはチェックしません。ですから、MyLibのJarファイルをJavaやJDKの「lib」フォルダにコピーして利用することになります。

もっと確実なのは、MyLibも一緒にJarファイルに保存することです。これは、プラグインを利用することで可能です。これは、maven-assembly-pluginというプラグインで設定できます。下のリスト欄に、依存ライブラリを一体化してJarファイルに保存するための設定を掲載しておきましょう。

・<configuration>タグについて
設定情報を記述する<configuration>には、<descriptorRefs>というタグを用意し、更にその中に<descriptorRef>というタグを用意してあります。ここに「jar-with-dependencies」と指定することで、Jarの一体化のための設定であることが指定できます。

その後の<executions>内にある<execution>で、必要な設定が用意されます。<phase>で「package」を、<goals>内の<goal>で「single」をそれぞれ指定していますが、これによりパッケージ化の際に1つのJarファイルにまとめられるようになります。ファイル名は、「SampleMavenApp-1.0-jar-with-dependencies.jar」というように-jar-with-dependenciesがつけられたものになります。

このプラグイン設定をpom.xmlに追記し、再度mvn packageしてパッケージ化してみましょう。そして、再度javaコマンドでJarファイルを実行してみて下さい。
java -classpath target\SampleMavenApp-1.0-jar-with-dependencies.jar com.tuyano.libro.App

今度は、ちゃんとプログラムが実行されるようになります。Jarファイル内にMyLibが組み込まれるためです。作成されたJarファイルを他のマシンなどにコピーして実行しても動くようになりますよ!

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

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

※関連コンテンツ

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