Mavenに、実行時の依存関係とともにプロジェクトをパッケージ化してほしい。次のマニフェストでJARファイルを作成することを期待しています。
.....
Main-Class : com.acme.MainClass
Class-Path : lib/dependency1.jar lib/dependency2.jar
.....
次のディレクトリ構造を作成します。
target
|-- ....
|-- my-project.jar
|-- lib
|-- dependency1.jar
|-- dependency2.jar
つまり、メインJARから依存関係を除外し、推移的な依存関係をすべて「lib」サブディレクトリにコピーするようにします。何か案は?
Mavenに、実行時の依存関係を持つプロジェクトをパッケージ化するようにしています。
この部分は不明確です(直後に説明する内容とは異なります)。私の答えはあなたが説明したことをカバーしています。
次のマニフェストでJARファイルを作成することを期待しています(...)
Maven Jar Plugin を構成して(または、より正確に Maven Archiver )を構成します。
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.acme.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
...
<dependencies>
<dependency>
<groupId>dependency1</groupId>
<artifactId>dependency1</artifactId>
<version>X.Y</version>
</dependency>
<dependency>
<groupId>dependency2</groupId>
<artifactId>dependency2</artifactId>
<version>W.Z</version>
</dependency>
</dependencies>
...
</project>
これにより、次のエントリを持つMANIFEST.MFが生成されます。
...
Main-Class: fully.qualified.MainClass
Class-Path: lib/dependency1-X.Y.jar lib/dependency2-W.Z.jar
...
次のディレクトリ構造を作成します(...)
これは Maven Dependency Plugin とdependency:copy-dependencies
目標。ドキュメントから:
dependency:copy-dependencies
は、プロジェクトの直接依存関係とオプションの推移的依存関係のリストを取得し、指定された場所にコピーし、必要に応じてバージョンを削除します。この目標は、コマンドラインからも実行できます。
package
フェーズでバインドできます:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
次のプラグインをpom.xmlに追加します。 mainClass、classpathPrefix、addClasspathタグの値を確認します。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>org.Apache.camel.spring.Main</mainClass>
<classpathPrefix>lib/</classpathPrefix>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-Assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptors>
<descriptor>src/Assembly/some-Assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-Assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
次のように、src/Assemblyの下にsome-Assembly.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>distribution</id>
<formats>
<format>Zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<scope>runtime</scope>
<outputDirectory>/lib</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
UseProjectArtifactフラグをfalseに、unpackフラグをfalseに注意してください。 Zipファイル内のルートフォルダーが不要な場合は、includeBaseDirectoryをfalseにすることができます。
これにより、name-version-distribution.Zipファイルが作成されます。 Zipファイル内には、フォルダー名バージョンがあります。このフォルダー内に、すべての依存関係jarを含む実行可能jarおよびlibフォルダーが存在します。実行可能jarのmanifest.MFファイルを確認します。メインクラスとクラスパスの両方の情報が含まれています。
Maven jarプラグインを使用できます。このページをご覧ください: http://maven.Apache.org/plugins/maven-jar-plugin/examples/manifest-customization.html