2013-11-26 27 views
1

我們的項目設置打包戰爭,這爲當地發展的偉大工程:如何通過將資源移出戰爭來打包Maven中的程序集?

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
      <id>package-war</id> 
      <phase>package</phase> 
      <goals> 
       <goal>war</goal> 
      </goals> 
     ... 

包括在這場戰爭中,是由應用程序使用的映射文件的logback文件,這下生活:src/main/resources/logback.xml/src/main/resources/mappers/our-mapper.xml

在構建戰爭中,這些文件被髮送,我們期待並希望他們,our.war/WEB-INF/classes/logback.xmlour.war/WEB-INF/classes/mappers/our-mapper.xml

下,當我們包裝我們組裝,隨手關閉的部署,我們需要有這些文件中分離出來的戰爭,這是我們用我們的裝配描述:

<assembly> 
    <formats> 
     <format>tar.gz</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <files> 
     <file> 
      <source>target/${build.finalName}.war</source> 
      <outputDirectory>${tomcat-instance}/webapps</outputDirectory> 
     </file> 
     <file> 
      <source>src/main/resources/logback.xml</source> 
      <outputDirectory>${tomcat-instance}/resources/</outputDirectory> 
     </file> 
    </files> 
    <fileSets> 
     <fileSet> 
      <directory>src/main/resources/mapper</directory> 
      <outputDirectory>${tomcat-instance}/resources/mapper/</outputDirectory> 
      <includes> 
       <include>**/*</include> 
      </includes> 
     </fileSet> 
    </fileSets> 
</assembly> 

而且在Maven的配置有:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptors> 
      <descriptor>src/main/resources/our-assembly.xml</descriptor> 
     </descriptors> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

這CON構造程序集,但我擔心的是logback.xmlmappers/our-mapper.xml文件仍包含在war內,其中包含assembly.tar.gz

是否有可能保持在戰爭裝配包含.xml文件,因爲它已經這樣做了配置,但也有去組裝.tar.gz總成,使他們不」排除這些相同的文件戰爭t在類路徑上出現兩次?

在此先感謝您的幫助。

回答

2

您現在可能已經找到了解決此問題的解決方法或解決方法 - 但是,我很想知道這是否可行,因此我創建了一個與您所描述的文件結構相同的小型測試項目。

我設法讓這個項目構建出兩個war文件 - 一個包含.xml文件的程序集外部,另一個包含除.xml文件之外的程序集。我通過創建一個額外的程序集來創建第二個臨時war文件,該文件明確排除.xml文件。然後現有的程序集包含這個新的war文件,而不是默認的war。

新的裝配war-assembly.xml看起來是這樣的:

<assembly> 
    <id>temp</id> 
    <formats> 
     <format>war</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
     <fileSet> 
      <directory>target/${build.finalName}</directory> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>**/*</include> 
      </includes> 
      <excludes> 
       <exclude>**/logback.xml</exclude> 
       <exclude>**/mapper/*</exclude> 
      </excludes> 
     </fileSet> 
    </fileSets> 
</assembly> 

現有的組件,然後修改,以包括新的戰爭文件:

<assembly> 
    <formats> 
     <format>tar.gz</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <files> 
     <file> 
      <source>target/${build.finalName}-temp.war</source> 
      <outputDirectory>${tomcat-instance}/webapps</outputDirectory> 
      <destName>target/${build.finalName}.war</destName> 
     </file> 
     <file> 
      <source>src/main/resources/logback.xml</source> 
      <outputDirectory>${tomcat-instance}/resources/</outputDirectory> 
     </file> 
    </files> 
    <fileSets> 
     <fileSet> 
      <directory>src/main/resources/mapper</directory> 
      <outputDirectory>${tomcat-instance}/resources/mapper/</outputDirectory> 
      <includes> 
       <include>**/*</include> 
      </includes> 
     </fileSet> 
    </fileSets> 
</assembly> 

然後是pom.xml修改爲引用新的組件在現有裝配之前。

<descriptors> 
    <descriptor>src/main/resources/war-assembly.xml</descriptor> 
    <descriptor>src/main/resources/our-assembly.xml</descriptor> 
</descriptors> 

這似乎工作正常。它確實將-temp戰爭文件留在了target文件夾中,該文件夾可能會被刪除以避免混淆。

+0

謝謝。我可以看到這是一個潛在的選擇路徑。 – Cuga

相關問題