2013-11-26 28 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

相关问题