如何在maven war包中包含/排除资源

时间:2017-08-29 05:41:59

标签: maven-3 pom.xml maven-war-plugin

在我的MAVEN项目中,我正在尝试使用基于配置文件(在我的settings.xml中定义)的某些资源构建war包。

的pom.xml:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
            <!-- archiveClasses>true</archiveClasses Enable this line will remove compiled classes from package -->
            <!-- packagingExcludes>view/test/**,WEB-INF/classes/**</packagingExcludes Does not work -->
            <packagingExcludes>view/test/**</packagingExcludes>
            <webResources>
                <resource>
                    <directory>src/main/webapp/</directory>
                    <filtering>false</filtering>
                    <includes>
                        <include>**/**</include>
                    </includes>
                </resource>
                <resource>
                    <directory>resources/</directory>
                    <targetPath>WEB-INF/classes</targetPath>
                    <filtering>false</filtering>
                    <!-- excludes><exclude>**</exclude></excludes Does not work -->
                    <includes>
                        <include>ehcache.xml</include>
                        <include>${include.files}</include>
                    </includes>
                </resource>
            </webResources>
            <includeEmptyDirectories>true</includeEmptyDirectories>
        </configuration>
    </plugin>

我的src/main/resources文件夹为空,因此在我的包中没有预期的配置文件。但是,当我将resources文件夹移动到src/main/resources时,配置文件不再起作用,并且包中始终包含resources文件夹中的所有文件。

如何更改我的pom.xml,以便resources文件夹可以移动到src/main/resources我的理解是存储资源(如配置文件等)('best-practice')?< / p>

1 个答案:

答案 0 :(得分:2)

查看您是否可以通过某种方式重新组织资源,以便可以对资源应用过滤器,并且大多数文件始终存在于每个配置中。 假设您有一个属性文件,需要不同配置的不同值。您可以使用以下变量替换该值:

url=${url}
mode=${mode}

现在,您可以使用配置文件设置需要过滤的文件的值以及需要为该配置完全排除的文件的值:

<profile>
  <id>production</id> 
     <build>
         <resources>
             <resource>
                 <directory>src/main/resources</directory>
                 <filtering>true</filtering>                  
                 <excludes>
                     <exclude>[non-resource file #1]</exclude>
                     <exclude>[non-resource file #2]</exclude>
                     <exclude>[non-resource file #3]</exclude>
                 </excludes>
             </resource>
         </resources>
     </build>      
     <properties>
         <url>www.something.com</url>
         <mode>production</mode>
     </properties>
 </profile>
 <profile>
     <id>development</id>
     <build>
         <resources>
             <resource>
                 <directory>src/main/resources</directory>
                 <filtering>true</filtering>                  
                 <excludes>
                     <exclude>[non-resource file #1]</exclude>
                     <exclude>[non-resource file #2]</exclude>
                     <exclude>[non-resource file #3]</exclude>
                 </excludes>
             </resource>
         </resources>
     </build>      
     <properties>
         <url>localhost:8080/something</url>
         <mode>development</mode>
     </properties>
 </profile>

最后,您可以删除maven-war-plugin中的webResources标记。它现在会获取src / main / resources,因为它是一个已配置的资源。