我遇到的问题是,当我使用Intellij 15.0.2的Maven构建版本时,Maven Resources Plugin不会将我的属性过滤到我的文件中。当我从Windows命令行运行mvn compile
时,它确实有效。我的插件配置是:
<properties>
<prop1>aaa</prop1>
<prop2>bbb</prop2>
</properties>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>file1</include>
<include>file2</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>
答案 0 :(得分:8)
tldr:我能够重现您的问题,然后通过将<resources>
元素从插件配置移到<build>
的正下方来修复它:
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- <snip> Other plugins -->
</plugins>
</build>
未来的读者,如果您只对修复感兴趣,请不要再读了。对于勇敢的SO-er,gory详细信息等待下面的内容!
我做了以上操作,因为这是我在之前的项目中启用资源过滤的方式。我不需要更改默认阶段(process-resources
),因此根本不需要明确指定maven-resources-plugin
。但是,我很想知道为什么OP的配置不起作用,因此查看了maven-resources-plugin documentation中resources
mojo的示例,它们似乎指定了<resources>
直接在<build>
。
Usage文档中的措辞似乎暗示仅在<resources>
mojo的插件配置下需要copy-resources
配置:
应该从maven-resources-plugin introduction开始明确指出:
资源:资源将主要源代码的资源复制到 主输出目录。
此目标通常会自动执行,因为它受到约束 默认为流程资源生命周期阶段。 它总是使用 project.build.resources元素用于指定资源,以及 default使用project.build.outputDirectory指定副本 目的地。
我很想暗示Intellij没有错。
使用Intellij 15.0.2时,从Intellij或命令行执行mvn clean compile
时,过滤行为(即它是否有效)是相同的。我会认为问题出在插件/ pom配置而不是Intellij本身,除非Intellij的maven集成中存在错误。为了它的价值,我在Intellij中使用maven时已经没有遇到过这个问题(现在从版本12.x开始使用它已经有一段时间了。)
你的Intellij是否使用了与命令行使用的mvn不同的捆绑mvn?即从这里和命令行看到的maven是否相同?这是我能想到的唯一的事情,除了Intellij的maven整合中的一个错误(不太可能),它可能会解释你所看到的不同行为。
答案 1 :(得分:1)
答案 2 :(得分:0)
尝试在${pom.basedir}
标签的开头添加<directory>
:
来自
<build>
(...)
<testResources>
<testResource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
</testResource>
(...)
</build>
到
<build>
(...)
<testResources>
<testResource>
<filtering>true</filtering>
<directory>${pom.basedir}/src/test/resources</directory>
</testResource>
</testResources>
(...)
</build>
我怀疑当Maven项目具有多个模块时,Intellij必需找到正确的资源文件来执行pom.xml属性的替换。