如何使用Maven转义过滤后的属性文件中的反斜杠?

时间:2016-11-27 21:10:42

标签: java maven escaping backslash maven-resources-plugin

我的 pom.xml 文件如下所示:

<testResource>
    <directory>src/test/resources</directory>
    <filtering>true</filtering>
    <includes>
        <include>env.properties</include>
    </includes>
</testResource>

我的 env.properties 如下所示:

my.path=${project.build.directory}

构建项目时, env.properties 的生成如下:

my.path=C:\\path\\to\\directory

我如何才能获得以下结果?

my.path=C:\\\\path\\\\to\\\\directory

1 个答案:

答案 0 :(得分:3)

这是一件很奇怪的事情,但您可以使用build-helper-maven-plugin:regex-property目标。此目标允许创建Maven属性,这是将正则表达式应用于某个值的结果,可能是替换值。

在这种情况下,正则表达式将替换所有黑色斜杠,即\\,因为它们需要在正则表达式中进行转义,并且替换将是4个反斜杠。请注意,插件会自动转义Java的正则表达式,因此您也不需要Java转义它。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.12</version>
  <executions>
    <execution>
      <id>escape-baskslashes</id>
      <phase>validate</phase>
      <goals>
        <goal>regex-property</goal>
      </goals>
      <configuration>
        <value>${project.build.directory}</value>
        <regex>\\</regex>
        <replacement>\\\\\\\\</replacement>
        <name>escapedBuildDirectory</name>
        <failIfNoMatch>false</failIfNoMatch>
      </configuration>
    </execution>
  </executions>
</plugin>

这会将所需路径存储在escapedBuildDirectory属性中,以后可以在资源文件中将其用作标准Maven属性,如${escapedBuildDirectory}。该属性是在validate阶段创建的,这是Maven在构建期间调用的第一个阶段,因此它也可以作为插件参数在其他任何地方使用。