配布用の単一の実行可能jarにパッケージ化したくない。 main.jarのような実行可能ファイルと、libs/*。jarにあるすべての依存関係が必要です。
依存関係ライブラリに事前に含まれていないmaven実行可能jarを作成するにはどうすればよいですか?
Mavenを使用して依存関係のある実行可能JARを作成するにはどうすればよいですか? 2010年12月1日10:46にAndréAronsenと回答したメモがありますが、それは単に機能しません(sadescriptorRefの失敗は設定されていません)。
これはある程度達成できます。
まず、 maven jarプラグイン を適切に構成して 実行可能jar を作成します。
次に、maven Assemblyプラグインを使用して、依存関係のあるjarを作成しますプロジェクトjarを除く。これを行うには、記述子ファイルを作成します。たとえば、src/main/Assembly/descriptor.xml
、 このような。
<Assembly xmlns="http://maven.Apache.org/plugins/maven-Assembly-plugin/Assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.Apache.org/plugins/maven-Assembly-plugin/Assembly/1.1.0 http://maven.Apache.org/xsd/Assembly-1.1.0.xsd">
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</Assembly>
このようにプロジェクトで使用してください。
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<artifactId>maven-Assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<descriptors>
<descriptor>src/main/Assembly/descriptor.xml</descriptor>
</descriptors>
</configuration>
[...]
</plugin>
</plugins>
</build>
</project>
最終的に2つのjarを取得します。1つはプロジェクトによって作成された実行可能jarで、もう1つはAssemblyプラグインによって作成された依存関係のあるjarです。
私はこれを少し修正したソリューションを好みます。クラスパスを設定して実行可能jarを作成し、すべての依存関係を指定されたディレクトリにコピーします。
追加のファイルは必要ありません。
依存関係はインストールフェーズ中にコピーされます。
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!-- optional -->
<!-- exclude copying test and provided dependencies -->
<includeScope>runtime</includeScope>
<excludeScope>provided</excludeScope>
<!-- optional -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
説明されているように、ランタイム依存関係のみをコピーするように回答を更新しました ここでは-正しい依存関係をコピーします 。テストおよび提供された依存関係は除外されます。
テストスコープと提供されたスコープの両方から依存関係を除外する場合は、提供されたスコープを除外し、ランタイムスコープを含める必要があることがわかりました。