0

我正在使用带有 maven-assembly-plugin 的自定义 assembly.xml 文件构建 tar.gz 程序集。在该 tar 中是 {stuff +} 一个 WAR 文件,当前具有一定的依赖关系:

WEB-INF/lib/my-dependency.jar

这一切都很好。

现在我想获取该依赖项,并将其从 WAR 文件中删除,然后将其放入 tar.gz 的根目录中。

当前不正确的解决方案

我可以将依赖项放入 tar 中,但我无法将其从战争中删除(使用我当前的解决方案)

<fileSets>
    <fileSet>
        <outputDirectory>/config/lib</outputDirectory>
        <directory>${project.build.directory}/fa/WEB-INF/lib</directory>
        <includes>
            <include>my-dependency-*.jar</include>
        </includes>
    </fileSet>
</fileSets>

要解决上述问题,我还需要一些方法在创建 WAR 之前在程序集插件中删除 ${project.build.directory}/fa/WEB-INF/lib/my-dependency-*.jar ...(我'很确定它在执行上述指令时已经创建。

或者,另一种方法可能更好

4

1 回答 1

0

如果战争是这个项目的一个依赖,你可以使用程序集插件来解压它并重新打包,而不需要 jars。关键配置是 unpack 和 unpackOptions 属性。

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>my-stripped-war</id>

<formats>
    <format>war</format>
</formats>    

<dependencySets>
    <dependencySet>
        <outputDirectory></outputDirectory>
        <useTransitiveDependencies>false</useTransitiveDependencies>
        <useProjectArtifact>false</useProjectArtifact>
        <includes>
            <include>*:war</include>  <!-- however specific you need here -->
        </includes>
        <unpack>true</unpack>
        <unpackOptions>
            <excludes>
                <!-- jars to exclude here -->
            </excludes>
        </unpackOptions>
    </dependencySet>
</dependencySets>
</assembly>

然后,在您当前的程序集描述符中,您使用文件或文件集拉入这个剥离的战争。如果剥离的战争应该附加到项目中,您只需将此描述符添加到当前的程序集插件元素之前;如果不应该附加它,请使用多个程序集插件执行并将<attach>剥离的战争执行设置为 false。

如果战争是作为该项目的一部分构建的,请尝试使用<packagingExcludes>战争插件配置中的元素来防止不需要的 jar 进入战争。您不需要额外的程序集描述符。

于 2012-06-06T16:52:41.847 回答