使用自定义程序集描述符将类路径添加到清单

时间:2011-09-14 00:14:21

标签: maven classpath maven-3 maven-assembly-plugin

我有以下自定义程序集:

<assembly>
    <id>full</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>${project.build.outputDirectory}</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

以下配置部分:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptors>
            <descriptor>src/main/assembly/assembly.xml</descriptor>
        </descriptors>
        <archive>
            <manifest>
                <mainClass>com.example.MyExample</mainClass>
                <addClasspath>true</addClasspath>
                <classpathPrefix>./lib/</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

根据有关maven程序集插件的文档,这应该将一个类路径项添加到清单文件中,但它不起作用。如果我使用已弃用的程序集目标而不是单个目标,它确实有用。

我注意到有人提到存档部分只有jar格式,但这就是我正在使用的。

当他们弃用程序集:汇编时,他们是否定义了一种正确执行此操作的新方法?我真的不喜欢使用已弃用的功能,但如果它们破坏了工作方式并且没有正确记录它,我真的不知道如何避免这种情况。

有没有人有任何关于如何正确执行此操作的示例?

3 个答案:

答案 0 :(得分:4)

这不是一个很好用的程序集插件。 Java没有jars-in-jars。您可以使用maven-jar-plugin的配置选项将类路径添加到主jar的清单中,然后使用程序集插件来收集依赖项,然后在zip或tarball中放在主jar旁边。

http://maven.apache.org/shared/maven-archiver/examples/classpath.html

答案 1 :(得分:3)

尝试将@company更新为2.5或更高版本。

清单文件中意外缺少条目Class-Path似乎是由错误MASSEMBLY-576引起的。该错误已在插件的2.5版本中修复(2014年10月26日发布)。

答案 2 :(得分:2)

你应该使用maven jar插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>main class</mainClass>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
</plugin>