如何使用Maven程序集插件为类路径MANIFEST条目添加前缀?

时间:2014-02-21 09:27:23

标签: java xml maven

我正在使用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>

1 个答案:

答案 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>