LoginSignup
1
4

More than 5 years have passed since last update.

Spring boot2 + Maven3でexternal jarをpackageに含める

Posted at

はじめに

現場でチームメンバーがはまっていて自分もやり方調べて試してもらっても上手くいかなったので、ちょっと別で調べた内容のメモ残しです。

特に難しいこともない内容なのですが、はまるときははまるものですね。

環境

Java8
Maven3
Spring boot 2.0.2.RELEASE

目的

./mvnw clean packageで作成したjar内にexternal jarを含める

プロジェクトの作成

今回はpackageした中に含めればいいだけなので、特に実装はありません。

pom.xml

実装なしでpom.xmlにexternal jarの設定を行っていきます。

dependencies

package内にだけあってもしょうがないので、dependencyに今回追加したいjarの情報を追加してあげます。
追加後にupdateしてあげるとEclipse上での開発は困らないはずです。

mavenの変数展開はそこまで詳しくないのですが、フォルダ設定する際に基準となるフォルダを指定するのに${project.basedir}${basedir}の2つがよく検索に引っかかるのですが、前者はプロジェクトディレクトリで後者がpom.xmlのディレクトリを指しているらしいです。
とりあえずmavenのページ見ると前者をよく見たので今回は
${project.basedir}`を使用します。

注意点的にはversionとjarの名前の最後のversionが一致している必要があるようなので(Eclipseでエラーになる)そこだけ合わせてあげてください。

pom.xml
<dependency>
    <groupId>com.tasogarei</groupId>
    <artifactId>hogehoge</artifactId>
    <version>1</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/hogehoge1.jar</systemPath>
</dependency>

plugins

jarに混ぜ込む設定はpluginの設定から行います。
configurationincludeSystemScopeがあり、それをtrueにしてあげるだけです。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <includeSystemScope>true</includeSystemScope>
    </configuration>
</plugin>

jarを設定したディレクトリに配置

今回は${project.basedir}/lib/hogehoge1.jarと設定しているので、適当なjarを配置します。
特に何でもよかったので.m2/にあったjarを適当に持ってきています。

本当に入っているか確認する

設定は以上となります。
試してみましょう。

package

mvnwコマンドからjarにします。

./mvnw clean package

jarの中身確認

無事jarに出来たのでjar tfで作成したjarの中身を確認してみます。
確認するとBOOT-INF/lib/hogehoge-1.jarが存在するため、無事にexternal jarを含めることに成功しました。

$ jar tf jartest-0.0.1-SNAPSHOT.jar | sort
BOOT-INF/
BOOT-INF/classes/
BOOT-INF/classes/application.properties
BOOT-INF/classes/com/
BOOT-INF/classes/com/tasogarei/
BOOT-INF/classes/com/tasogarei/app/
BOOT-INF/classes/com/tasogarei/app/JartestApplication.class
BOOT-INF/lib/
BOOT-INF/lib/hogehoge-1.jar
BOOT-INF/lib/javax.annotation-api-1.3.2.jar
BOOT-INF/lib/jul-to-slf4j-1.7.25.jar
BOOT-INF/lib/log4j-api-2.10.0.jar
BOOT-INF/lib/log4j-to-slf4j-2.10.0.jar
BOOT-INF/lib/logback-classic-1.2.3.jar
BOOT-INF/lib/logback-core-1.2.3.jar
BOOT-INF/lib/slf4j-api-1.7.25.jar
BOOT-INF/lib/snakeyaml-1.19.jar
BOOT-INF/lib/spring-aop-5.0.6.RELEASE.jar
BOOT-INF/lib/spring-beans-5.0.6.RELEASE.jar
BOOT-INF/lib/spring-boot-2.0.2.RELEASE.jar
BOOT-INF/lib/spring-boot-autoconfigure-2.0.2.RELEASE.jar
BOOT-INF/lib/spring-boot-starter-2.0.2.RELEASE.jar
BOOT-INF/lib/spring-boot-starter-logging-2.0.2.RELEASE.jar
BOOT-INF/lib/spring-context-5.0.6.RELEASE.jar
BOOT-INF/lib/spring-core-5.0.6.RELEASE.jar
BOOT-INF/lib/spring-expression-5.0.6.RELEASE.jar
BOOT-INF/lib/spring-jcl-5.0.6.RELEASE.jar
META-INF/
META-INF/MANIFEST.MF
META-INF/maven/
META-INF/maven/com.tasogarei/
META-INF/maven/com.tasogarei/jartest/
META-INF/maven/com.tasogarei/jartest/pom.properties
META-INF/maven/com.tasogarei/jartest/pom.xml
org/
org/springframework/
org/springframework/boot/
org/springframework/boot/loader/
org/springframework/boot/loader/archive/
org/springframework/boot/loader/archive/Archive$Entry.class
org/springframework/boot/loader/archive/Archive$EntryFilter.class
org/springframework/boot/loader/archive/Archive.class
org/springframework/boot/loader/archive/ExplodedArchive$1.class
org/springframework/boot/loader/archive/ExplodedArchive$FileEntry.class
org/springframework/boot/loader/archive/ExplodedArchive$FileEntryIterator$EntryComparator.class
org/springframework/boot/loader/archive/ExplodedArchive$FileEntryIterator.class
org/springframework/boot/loader/archive/ExplodedArchive.class
org/springframework/boot/loader/archive/JarFileArchive$EntryIterator.class
org/springframework/boot/loader/archive/JarFileArchive$JarFileEntry.class
org/springframework/boot/loader/archive/JarFileArchive.class
org/springframework/boot/loader/data/
org/springframework/boot/loader/data/RandomAccessData.class
org/springframework/boot/loader/data/RandomAccessDataFile$1.class
org/springframework/boot/loader/data/RandomAccessDataFile$DataInputStream.class
org/springframework/boot/loader/data/RandomAccessDataFile$FileAccess.class
org/springframework/boot/loader/data/RandomAccessDataFile.class
org/springframework/boot/loader/ExecutableArchiveLauncher.class
org/springframework/boot/loader/jar/
org/springframework/boot/loader/jar/AsciiBytes.class
org/springframework/boot/loader/jar/Bytes.class
org/springframework/boot/loader/jar/CentralDirectoryEndRecord.class
org/springframework/boot/loader/jar/CentralDirectoryFileHeader.class
org/springframework/boot/loader/jar/CentralDirectoryParser.class
org/springframework/boot/loader/jar/CentralDirectoryVisitor.class
org/springframework/boot/loader/jar/FileHeader.class
org/springframework/boot/loader/jar/Handler.class
org/springframework/boot/loader/jar/JarEntry.class
org/springframework/boot/loader/jar/JarEntryFilter.class
org/springframework/boot/loader/jar/JarFile$1.class
org/springframework/boot/loader/jar/JarFile$2.class
org/springframework/boot/loader/jar/JarFile$JarFileType.class
org/springframework/boot/loader/jar/JarFile.class
org/springframework/boot/loader/jar/JarFileEntries$1.class
org/springframework/boot/loader/jar/JarFileEntries$EntryIterator.class
org/springframework/boot/loader/jar/JarFileEntries.class
org/springframework/boot/loader/jar/JarURLConnection$1.class
org/springframework/boot/loader/jar/JarURLConnection$JarEntryName.class
org/springframework/boot/loader/jar/JarURLConnection.class
org/springframework/boot/loader/jar/StringSequence.class
org/springframework/boot/loader/jar/ZipInflaterInputStream.class
org/springframework/boot/loader/JarLauncher.class
org/springframework/boot/loader/LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class
org/springframework/boot/loader/LaunchedURLClassLoader.class
org/springframework/boot/loader/Launcher.class
org/springframework/boot/loader/MainMethodRunner.class
org/springframework/boot/loader/PropertiesLauncher$1.class
org/springframework/boot/loader/PropertiesLauncher$ArchiveEntryFilter.class
org/springframework/boot/loader/PropertiesLauncher$PrefixMatchingArchiveFilter.class
org/springframework/boot/loader/PropertiesLauncher.class
org/springframework/boot/loader/util/
org/springframework/boot/loader/util/SystemPropertyUtils.class
org/springframework/boot/loader/WarLauncher.class
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4