2012-06-06 129 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>元素,以保持不必要的罐子退出戰爭。你不需要額外的裝配描述符。

相關問題