Maven构建不会过滤Intellij

时间:2015-12-17 20:21:37

标签: maven intellij-idea properties filtering maven-resources-plugin

我遇到的问题是,当我使用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>

3 个答案:

答案 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 documentationresources mojo的示例,它们似乎指定了<resources>直接在<build>

Usage文档中的措辞似乎暗示仅在<resources> mojo的插件配置下需要copy-resources配置:

enter image description here

更新

应该从maven-resources-plugin introduction开始明确指出:

  

资源:资源将主要源代码的资源复制到   主输出目录。

     

此目标通常会自动执行,因为它受到约束   默认为流程资源生命周期阶段。 它总是使用   project.build.resources元素用于指定资源,以及   default使用project.build.outputDirectory指定副本   目的地。

Intellij的怪异?

我很想暗示Intellij没有错。

使用Intellij 15.0.2时,从Intellij或命令行执行mvn clean compile时,过滤行为(即它是否有效)是相同的。我会认为问题出在插件/ pom配置而不是Intellij本身,除非Intellij的maven集成中存在错误。为了它的价值,我在Intellij中使用maven时已经没有遇到过这个问题(现在从版本12.x开始使用它已经有一段时间了。)

你的Intellij是否使用了与命令行使用的mvn不同的捆绑mvn?即从这里和命令行看到的maven是否相同?这是我能想到的唯一的事情,除了Intellij的maven整合中的一个错误(不太可能),它可能会解释你所看到的不同行为。

enter image description here

答案 1 :(得分:1)

这是我的解决方案。

转到“运行”&gt;“编辑配置”。

在“服务器”标签中&gt;在发布之前。

删除工件并添加此maven目标:clean install

enter image description here

答案 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属性的替换。