动态Maven项目属性未被资源替换

时间:2017-07-03 05:22:02

标签: java maven maven-plugin

我尝试使用properties-maven-plugin在构建时读取项目属性,然后使用maven-resources-plugin替换文本文件中的属性。以下是他们的声明:

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-1</version>
    <executions>
      <execution>
        <phase>initialize</phase>
        <goals>
          <goal>read-project-properties</goal>
        </goals>
        <configuration>
          <files>
            <file>${basedir}/src/main/resources/sample.properties</file>
          </files>
        </configuration>
      </execution>
    </executions>
  </plugin>

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <executions>
      <execution>
        <id>copy-resources</id>
        <phase>package</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <overwrite>true</overwrite>
          <outputDirectory>${basedir}/target</outputDirectory>
          <resources>
            <resource>
              <directory>${basedir}/src/main/resources</directory>
              <includes>
                <include>**/*.txt</include>
              </includes>
              <filtering>true</filtering>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>

以下是sample.properties

中出现的hello.txtsrc/main/resources的内容
sample.properties
name=test_user

hello.txt
Hello ${name}

作为构建过程的结果,在目标目录中创建的src/main/resources/hello.txt没有预期的内容。

Expected hello.txt
Hello test_user

Actual hello.txt
Hello ${name}

有人可以解释一下我做错了什么吗?

PS:我添加了ant任务来打印项目属性$ {name}以检查properties-maven-plugin的功能,它似乎工作正常。

回答:如果其他人遇到同样的问题,请尝试一下 -

在IDE上关闭自动构建(在我的情况下为Eclipse),然后构建项目。可能出现的问题是,您的IDE会继续构建项目(替换资源中的属性),而不是由properties-maven-plugin设置运行时项目属性。它对我有用。

1 个答案:

答案 0 :(得分:0)

要过滤资源,惯例是在git status中保留要过滤的文件并通过以下方式进行过滤:

src/main/resources

如果您想要包含/排除文件,可以使用包含/排除部分,如下所示:

<project>
  ...
  <build>
    ...
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
      ...
    </resources>
    ...
  </build>
  ...
</project>

没有必要使用properties-maven-plugin来读取属性,并明确地将maven-resources-plugin添加到生命周期中,因为它默认存在。