プログラマーの調べ物

プログラマーが調べ物をするときに役に立つサイトを作ります。

Spring Bootで実行可能jarを作成する

実行可能jarを作成する

Spring Bootでは実行可能なjarを作成できます。 これはwarファイルをWebアプリケーションサーバにデプロイするといった面倒な作業を省き、java -jarでWebアプリが起動できることを意味します。

実行可能jarの作り方は簡単です。 以下のコマンドを実行するだけです。

./mvnw clean package

以下のようなエラーが出たときはコンパイルのバージョンが異なっています。

$ ./mvnw clean package
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/wrapper/MavenWrapperMain : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

Javaの対応表は以下の通り。

J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

以下の記事が参考になります。   http://qiita.com/iwag@github/items/3f749010f0981195e2ba

java -versionで1.7以上を指定しても、mavenが見ているJavaが1.6だとエラーが出ます。 maven実行前にJAVA_HOMEを指定する必要があります。

$ JAVA_HOME=`/usr/libexec/java_home -v 1.8` ./mvnw clean package

これでjarを作成することができました。

[INFO] --- spring-boot-maven-plugin:1.4.3.RELEASE:repackage (default) @ demo ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.982 s
[INFO] Finished at: 2017-01-02T11:59:45+09:00
[INFO] Final Memory: 29M/267M
[INFO] ------------------------------------------------------------------------

targetディレクトリ以下にjarができています。