【问题标题】:How to add prefix to Class-path MANIFEST entries with the Maven assembly plugin?如何使用 Maven 程序集插件为类路径清单条目添加前缀?
【发布时间】: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 的程序集的影响。另外,您如何收集依赖项?你使用依赖插件吗?

标签: java xml maven


【解决方案1】:

尝试将以下插件添加到您的 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>

【讨论】:

  • 我确实这样做了,但没有帮助。我在父 pom.xml 中做到了
猜你喜欢
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 2015-01-30
  • 2010-10-29
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
相关资源
最近更新 更多