2012-06-06 172 views
0

我正在用maven-assembly-plugin使用自定义的assembly.xml文件构建一个tar.gz程序集。在那个tar里是{stuff +}一个WAR文件,目前有一定的依赖关系:在使用maven的tar程序集中包含Jar依赖项

WEB-INF/lib/my-dependency.jar 

这一切都正常。

现在我要采取的依赖,并从WAR文件中删除,并把它变成tar.gz的根来代替。

当前不正确的解决方案

我能得到尽可能把依赖成焦油,但我不能从战争中删除它(使用我目前的解决方案)

<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 ...(I' m很确定它已经在执行上述指令时创建了。

或者另一种方法可能更好

回答

0

如果战争是该项目的依赖项,则可以使用程序集插件将其解包并重新打包,而不使用罐子。关键配置是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引入这个被剥离的战争。如果剥离的战争应该附加到项目中,则只需将此描述符添加到当前的描述符到装配插件元素;如果不应该附加,则使用多个程序集插件执行,并将<attach>设置为假,以取消剥离的战争执行。

如果战争正在修建作为该项目的一部分,请尝试使用在战争插件配置的<packagingExcludes>元素,以保持不必要的罐子退出战争。你不需要额外的装配描述符。

相关问题