LoginSignup
11
8

More than 5 years have passed since last update.

Mavenで実行可能jarの作成(spring)

Last updated at Posted at 2016-09-20

参考URL:
http://maven.apache.org/plugins/maven-assembly-plugin/
http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html

概要

バッチ処理を作っています!!jarを作るときに依存するライブラリ全てを含んだjarを作ろうと色々試行錯誤したときのメモです。
「maven-assembly-plugin」と「maven-shade-plugin」の2つを試した結果「maven-shade-plugin」を使用しています。 

最終的にやりたいこと、1つのjarの中にメインクラスを複数入れて実行時に指定したい。

$ java -classpath A.jar AmainClass
$ java -classpath A.jar BmainClass

構成

  • java8
  • Maven3
  • Spring 4系(DIコンテナとして使用)

maven-assembly-plugin

沢山記事があったのでそれを参考にpom.xmlを作成。jarファイルの作成までは出来ましたが、実行時にエラーとなりました。
どうやらSpringのspring.handlersspring.schemasをmavenでコンパイル時に上書きしているのが問題です。
解決策としては、自分でspring.handlersとspring.schemasを作成し、pom.xmlを設定することです。
試してみた結果上手くいきましたがファイル作るのが面倒!!もっと簡単に出来ないのか再度調べていました。

maven-shade-plugin

maven-shade-pluginでは、ファイル作成なしでいけました。下記が設定です。

pom.xml
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.3</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <finalName>${project.name}</finalName>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.handlers</resource>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.schemas</resource>
                </transformer>
              </transformers>
              <artifactSet>
                <excludes>
                  <exclude>classworlds:classworlds</exclude>
                  <exclude>junit:junit</exclude>
                  <exclude>jmock:*</exclude>
                  <exclude>*:xml-apis</exclude>
                  <exclude>org.apache.maven:lib:tests</exclude>
                  <exclude>spring/config.xml</exclude>
                </excludes>
              </artifactSet>
            </configuration>
          </execution>
        </executions>
      </plugin>

今回は、実行時にメインクラスの指定をしたいためpom.xmlではしていませんが、pom.xmlに含めることも可能です。

               <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>jp.co.XXXMain</mainClass>
                </transformer>

その場合の実行は

$ java -jar A.jar
11
8
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
11
8