GroovyでMavenで単一の配布可能なjar作成 (2)

  技術情報

前回で配布可能なjar作成については解決したかと思ったのですが、またまた問題が発生。解決に至れましたのでメモしておきます。

そもそも、こういった依存するライブラリをすべて含めた配布可能な単一のjarのことをfat-jarと呼ぶそうです。検索するときは fatjar で調べると有用な情報が見つかります。

さてどんな問題が起きたかなんですが、mavenレポジトリに置いてないようなライブラリ(ojdbc.jar、マイナーなjar、個人的なjarなど)の場合、dependenciesには以下のように <scope>system</scope> とし、配置場所を<systemPath>タグでダイレクトに指定します。(プロジェクトディレクトリを参照すると警告が出ちゃうけど気にせずに)

Mavenでローカルjarを追加する

https://qiita.com/inuDrill/items/bd2843e812016a3a900b
        <dependency>
            <groupId>com.oracle.jdbc</groupId>
            <artifactId>ojdbc</artifactId>
            <version>1</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/ojdbc6_g.jar</systemPath>
        </dependency>

これでコンパイルしたりする分には十分なのですが、これらのライブラリはjar-with-dependenciesの対象外となっているため、このままではfatjarは作れません。

そこで maven-dependency-plugin というプラグイン定義を追加します。

            <!-- https://maven.apache.org/plugins/maven-dependency-plugin/usage.html -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>unpack-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/classes</outputDirectory>
                            <includeArtifactIds>ojdbc</includeArtifactIds>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

こうすることで、systemライブラリがclasses配下に展開され、まとめてjar作成されるようになります。

参考

Maven Dependency Plugin で system スコープの jar ファイルもひとつにまとめる

https://qiita.com/niwasawa/items/766ba558678ac9bb85aa

Apache Maven Dependency Plugin – Usage

https://maven.apache.org/plugins/maven-dependency-plugin/usage.html

LEAVE A COMMENT