Maven资源插件过滤不起作用

11

我有一个包含以下内容的 POM 文件:

<properties>
    <prop1>xxxxxxxxxx</prop1>
</properties>
<build>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <resources>
        <resource>
            <directory>src/test/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
 </build>

我有一个位于 src/test/resources 目录下的属性文件:

p1=${prop1}

我的目标是将.properties文件复制到target/test-classes目录,并自动更改p1的值。 但它不能正常工作。 它会复制资源,但不更改其值。


你的属性文件中真的有 p1=bbbbbb 吗?应该是 p1=${prop1} - Tunaki
我正在运行 mvn clean verify。 - fhcat
你正在使用 <resources>,但由于这些是测试资源,你需要改用 <testResources>。类似这样:<testResources><testResource><directory>src/test/resources</directory><filtering>true</filtering></testResource></testResources> - Tunaki
你救了我的一天。请回复一个答案,以便我可以发送信用。 - fhcat
2
{btsdaf} - Dirk Schumacher
显示剩余2条评论
3个回答

11
问题在于您正在配置主资源而不是测试资源;主要资源使用resource元素进行配置,而测试资源使用testResource元素进行配置。在当前配置下,src/test/resources下的文件将被视为经过过滤的主要资源,而实际的测试资源将不会被过滤。这就是为什么target/test-classes下的复制属性文件没有被过滤的原因。
您需要寻找的是:
<testResources>
  <testResource>
    <directory>src/test/resources</directory>
    <filtering>true</filtering>
  </testResource>
</testResources>

使用此方法,src/test/resources下的文件将被视为过滤后的测试资源,而主要的资源则不会受到影响。

3

这与问题无关。 - Luciano Brum
1
非常感谢 @Johnathan Wan,那就是我的问题所在! - Saad Benbouzid
我认为在某些情况下 - 就像我的情况一样 - 它是完全相关的,并且拯救了我的一天 :) - gratinierer

1
当我使用Maven属性插件的copy-resources目标时,遇到了类似的问题。资源被复制了,但占位符没有替换。对我来说,这是因为一个愚蠢的错误 - 我在较早的Maven阶段(validate)中复制了资源,并在稍后的阶段(initialize)中包含了占位符属性文件...因此属性还不可用。

我将包含属性的阶段更改为validate,并将占位符的包含更改为initialize,一切正常工作。

我的工作配置如下:

在validate中包含属性文件:

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>properties-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>read-project-properties</goal>
                        </goals>
                        <configuration>
                            <files>
                                <file>${project.basedir}/path/to/placeholders.properties</file>
                            </files>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

initialize中复制资源:
   <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <executions>
            <execution>
                <id>copy-resources</id>
                <!-- here the phase you need -->
                <phase>initialize</phase>
                <goals>
                    <goal>copy-resources</goal>
                </goals>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <outputDirectory>${project.build.directory}/classes</outputDirectory>
                    <resources>
                        <resource>
                            <directory>${basedir}/path/to/directory/with/resources/to/copy</directory>
                            <filtering>true</filtering>
                        </resource>
                    </resources>
                </configuration>
            </execution>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接