【发布时间】:2014-02-21 09:27:23
【问题描述】:
我正在使用 Maven 3.x 中的程序集插件来创建一个包含项目 jar 及其依赖项的 tar 球。为了约定,我将项目 jar 放在根目录下,并将所有依赖 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>
但是在hpcmom-cmaes-1.1.9-SNAPSHOT.jar 中生成的MANIFEST.MF 不会只为第三方依赖项生成./lib/ 前缀,但就像所有jar 都在同一个文件夹中一样。如何通过程序集插件修改MANIFEST.MF,以便在那里考虑lib 前缀。
生成的 Class-path 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>
【问题讨论】:
-
你能告诉我们组装插件是如何配置的吗?我认为清单不受创建 tar 的程序集的影响。另外,您如何收集依赖项?你使用依赖插件吗?