如何 include/exclude maven war 包中的资源

How to include/exclude resources in maven war package

在我的 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')?

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

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,因为它是已配置的资源。