Configuration 使用Maven从默认的src/main/resources位置将某些资源文件选择到WAR中

Configuration 使用Maven从默认的src/main/resources位置将某些资源文件选择到WAR中,configuration,maven-2,release-builds,Configuration,Maven 2,Release Builds,我试图控制哪些文件进入由mvn-packagegoal创建的WAR包。具体地说,我想从每个包的默认src/main/resources文件夹中排除一些文件(我正在尝试为不同的环境构建/打包) 我尝试使用maven war插件,但失败了。如果我添加此配置(用于测试): src/main/resources WEB-INF/课程 *.xml …myWEB-INF/classes仍将包含XML文件。这是因为webResources参数似乎复制了复制过程(上面的配置实际上是有效的,一个文件没有被复制

我试图控制哪些文件进入由
mvn-package
goal创建的WAR包。具体地说,我想从每个包的默认
src/main/resources
文件夹中排除一些文件(我正在尝试为不同的环境构建/打包)

我尝试使用maven war插件,但失败了。如果我添加此配置(用于测试):


src/main/resources
WEB-INF/课程
*.xml
…my
WEB-INF/classes
仍将包含XML文件。这是因为
webResources
参数似乎复制了复制过程(上面的配置实际上是有效的,一个文件没有被复制……但它们会在其他过程中被复制)

国家:

所有Maven 2项目的默认资源目录都是src/main/resources,它将在WAR中以target/classes和WEB-INF/classes结束。目录结构将在该过程中保留

WAR插件还能够通过webResources参数包含默认资源目录中找不到的资源

这有点令人困惑。这是否意味着:

  • webResources
    参数是maven-war-plugin中的一项功能,它允许仅从
    src/main/resources
    文件夹外部包含文件?如果是这样,我们如何从
    src/main/resources
    内部修改复制的文件
  • webResources
    参数是maven-war-plugin中的一项功能,它允许从
    src/main/resources
    文件夹外部包含文件?如果是,如何配置它来执行此操作
  • 还有别的选择吗
我试图控制哪些文件进入由mvn包目标创建的WAR包。具体来说,我想从每个包的默认src/main/resources文件夹中排除一些文件

在该阶段,默认资源目录(
src/main/Resources
)中的资源将复制到生成输出目录(
target/classes
)中。然后,在
package
阶段,将
target/classes
的内容打包到一个分布式存档中,就像一场战争一样,在这种情况下,它最终会被打包到
WEB-INF/classes

因此,如果您想控制哪些资源最终进入
WEB-INF/classes
,您需要控制哪些资源最终进入
target/classes
,即以某种方式改变的行为,特别是
resources:resources
的目标

为此,(这可能不是直观的),您可以在pom的
resources
元素中声明
exclude
include
元素,如中所示。应用于默认资源目录:

<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <excludes>
        <exclude>**/*.xml</exclude>
      </excludes>
    </resource>
  </resources>
</build>
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <webResources>
            <resource>
              <!-- this is relative to the pom.xml directory -->
              <directory>extra-resources</directory>
            </resource>
          </webResources>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>
但我不认为这是您在这里寻找的,建议使用上述建议的方法。

请参阅。我只是在这里直接回答这个问题:

  • webResources参数是maven war插件中的一项功能,它允许仅从src/main/resources文件夹外部包含文件?如果是这样,我们如何从src/main/resources内部修改复制的文件
  • webResources参数是maven war插件中的一项功能,它允许文件也包含在src/main/resources文件夹之外?如果是,如何配置它来执行此操作

它是前者,
maven-war-plugin
中的
webResources
参数只允许包含来自外部
src/main/resources
的额外资源。它不允许为
src/main/resources
本身配置includes/excludes。

您是在尝试使用同一个mvn包为不同的环境构建,还是通过使用概要文件来控制它?我实际上尝试了排除“全局”
resources
元素中的文件。结果是被排除的文件没有进入
target/classes
,但是它们仍然进入
target/mypackage-1.0.0-SNAPSHOT
。但我会再检查一遍,确认一下,也许我在那里犯了一些错误:/@Tuukka-Hmm。。。是的,请再检查一遍(有一个干净的版本)。@Pascal:这样试过之后,它似乎起作用了。也许我之前犯了一个错误,对整个过程有点困惑:/所以你的建议绝对是正确的。由于表达式的
非法启动
,我仍然存在获取
编译失败
的问题,因为Maven无法“识别”我在测试中使用的注释。然而,这似乎是一个常见的Maven问题,与以任何方式排除文件无关。下一步我会努力解决:)谢谢你的支持!幸运的是,编译问题很快就解决了,原因是:。因此,我设法验证了打包是否按预期进行,文件是否按预期排除。选择这个作为公认的答案。
<project>
  ...
  <profiles>
    <profile>
      <id>env-uat</id>
      <activation>
        <property>
          <name>env</name>
          <value>uat</value>
        </property>
      </activation>
      <build>
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <excludes>
              <exclude>**/*.xml</exclude>
            </excludes>
          </resource>
        </resources>
      </build>
    </profile>
  </profiles>
</project>
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <webResources>
            <resource>
              <!-- this is relative to the pom.xml directory -->
              <directory>extra-resources</directory>
            </resource>
          </webResources>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>