我正在使用Maven 3.x中的程序集插件来创建一个包含项目jar及其依赖项的tar球。按照惯例,我将项目jar放在root上,所有依赖jar放在dir下,例如。
├── hpcmom-cmaes-1.1.9-SNAPSHOT.jar
└── lib
├── akka-actor_2.10-2.2.3.jar
├── akka-agent_2.10-2.2.3.jar
├── akka-kernel_2.10-2.2.3.jar
├── akka-remote_2.10-2.2.3.jar
├── akka-slf4j_2.10-2.2.3.jar
├── akka-zeromq_2.10-2.2.3.jar
生成它的程序集定义为:
<assembly>
<id>cmaes-bin</id>
<baseDirectory>${pom.version}/hpcmom-cmaes</baseDirectory>
<formats>
<format>tar.gz</format>
</formats>
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory></directory>
<outputDirectory></outputDirectory>
<includes>
<include>README*</include>
<include>LICENSE*</include>
<include>COPYING*</include>
<include>NOTICE*</include>
</includes>
</fileSet>
<fileSet>
<directory>hpcmom-cmaes/target</directory>
<outputDirectory></outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>
但是MANIFEST.MF
中生成的hpcmom-cmaes-1.1.9-SNAPSHOT.jar
不会仅为第三方依赖项生成./lib/
前缀,但是如果所有jar都位于同一文件夹中。如何通过程序集插件修改MANIFEST.MF
,以便在那里考虑lib
前缀。
生成的类路径MANIFEST.MF
如下所示:
Class-Path: akka-actor_2.10-2.2.3.jar akka-agent_2.10-2.2.3.jar akka-kernel_2.10-2.2.3.jar akka-remote_2.10-2.2.3.jar akka-slf4j_2.10-2.2.3.jar akka-zeromq_2.10-2.2.3.jar
我希望得到的是:
Class-Path: lib/akka-actor_2.10-2.2.3.jar lib/akka-agent_2.10-2.2.3.jar lib/akka-kernel_2.10-2.2.3.jar lib/akka-remote_2.10-2.2.3.jar lib/akka-slf4j_2.10-2.2.3.jar lib/akka-zeromq_2.10-2.2.3.jar
更新:
程序集插件配置在父pom.xml中如下所示:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/cmaes-bin.xml</descriptor>
<descriptor>src/main/assembly/cmaes-src.xml</descriptor>
</descriptors>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
答案 0 :(得分:2)
尝试将以下插件添加到您的pom。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath> <-- don't know if this is needed -->
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>