使用maven在tar程序集中包含Jar依赖项

时间:2012-06-06 15:31:58

标签: maven dependency-management maven-assembly-plugin

我正在使用带有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。 (我很确定它已经在上述指令执行时创建了。

或者另一种方法可能更好

1 个答案:

答案 0 :(得分:0)

如果战争是这个项目的依赖项,你可以使用程序集插件解压缩它并在没有jar的情况下重新打包。密钥配置是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>

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

如果战争是作为此项目的一部分构建的,请尝试使用war插件配置中的<packagingExcludes>元素,以防止不需要的战争结束。您不需要额外的汇编描述符。