Maven 入門 | その他 | package 時に library を含める

package を実行するとき、WAR プロジェクトでは特別に指定しなくても dependency のライブラリファイルが WEB-INF/lib にコピーされて含まれる。一方、JAR プロジェクトでは明示的に設定しない限り含まれない。

含めて package する必要がある場合は、次のように設定する。

dependency ライブラリファイルを特定ディレクトリへコピーする

Maven Dependency Plugin の dependency:copy-dependencies Goal を実行すると、dependency の JAR ライブラリファイルが {project}/target/dependency ディレクトリにコピーされる。

mvn dependency:copy-dependencies

ただし、package に含める場合は毎回コピーするのが面倒なこともあり、特定のディレクトリにコピーしたい場合もある。package コマンドの実行時に dependency ファイルを自動で特定ディレクトリへコピーするよう、pom.xml に指定することもできる。

<project>
   <build>
    <plugins>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
          <version>2.3</version>
          <executions>
              <execution>
             <id>copy-dependencies</id>
              <phase>package</phase>
              <goals>
               <goal>copy-dependencies</goal>
              </goals>
            </execution>
          </executions>
         <configuration>
            <outputDirectory>../../${lib.dir}</outputDirectory>
             <overWriteIfNewer>true</overWriteIfNewer>
          </configuration>
        </plugin>
      </plugins>
    </build>
</project>

パッケージファイルに dependency ライブラリファイルを含める

生成する package に dependency ファイルをすべて含め、1 つの package ファイルを作成する方法もある。この方法では必要な依存ファイルがすべて含まれているため、別途 classpath を設定しなくても、パッケージファイル 1 つだけで実行できる。

まず、pom.xml ファイルに Maven Assembly Plugin を追加する。

<project>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2.1</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

そして assembly:assembly Goal を実行すると、target パスに JAR ファイルが 2 つ生成される。1 つは dependency がないファイルで、もう 1 つは dependency が含まれたファイルである。

mvn assembly:assembly

ファイル名からわかるように、"-jar-with-dependencies" が付いているファイルが dependency を含むファイルである。

  • xxx-1.0.0-SNAPSHOT.jar
  • xxx-1.0.0-SNAPSHOT-jar-with-dependencies.jar

参照