我正在使用带有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。 (我很确定它已经在上述指令执行时创建了。
或者另一种方法可能更好
答案 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>
元素,以防止不需要的战争结束。您不需要额外的汇编描述符。