3

我正在尝试用 maven 构建目录替换 xml 文件中的硬编码 linux 路径,以便我可以在 windows 上进行测试,但是当我使用 maven-replacer-plugin 进行变量替换时,windows 反斜杠路径分隔符被删除。有没有办法解决这个问题?

例如:

    <plugin>
      <groupId>com.google.code.maven-replacer-plugin</groupId>
      <artifactId>replacer</artifactId>
      <executions>
        <execution>
          <phase>prepare-package</phase>
          <goals>
            <goal>replace</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <filesToInclude>my_file</filesToInclude>
        <escape>true</escape>
        <replacements>
          <replacement>
            <token>/path/to/replace</token> 
            <value>${project.build.directory}</value>
          </replacement>
        </replacements>
      </configuration>
    </plugin>

结果是我得到了类似“C:UsersPathNoSeparators”的替换值

有什么线索吗?

4

2 回答 2

4

替换字符串中的backslash可能导致它将其视为转义字符,因为替换是使用正则表达式完成的。

尝试将正则表达式属性添加为 false。

<plugin>
  <groupId>com.google.code.maven-replacer-plugin</groupId>
  <artifactId>replacer</artifactId>
  <executions>
    <execution>
      <phase>prepare-package</phase>
      <goals>
        <goal>replace</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <filesToInclude>my_file</filesToInclude>
    <escape>true</escape>
    <regex>false</regex>
    <replacements>
      <replacement>
        <token>/path/to/replace</token> 
        <value>${project.build.directory}</value>
      </replacement>
    </replacements>
  </configuration>
</plugin>

注意<regex>false</regex>配置属性。

于 2013-06-04T07:01:43.353 回答
1

regex 参数用于标记匹配,对值没有影响。maven google replacer 插件有问题。

要解决该问题,您可以使用 build-helper-maven-plugin 撤回 project.build.directory 值,然后再将其传递给 maven google replacer 插件。

这是一个编码解决方案:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>regex-property</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>regex-property</goal>
            </goals>
            <configuration>
              <name>cheminCible</name>
              <value>${project.build.directory}</value>
              <regex>\\</regex>
              <replacement>/</replacement>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
  <groupId>com.google.code.maven-replacer-plugin</groupId>
  <artifactId>replacer</artifactId>
  <executions>
    <execution>
      <phase>prepare-package</phase>
      <goals>
        <goal>replace</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <filesToInclude>my_file</filesToInclude>
    <escape>true</escape>
    <replacements>
      <replacement>
        <token>/path/to/replace</token> 
        <value>cheminCible</value>
      </replacement>
    </replacements>
  </configuration>
</plugin>
于 2013-11-27T16:29:29.237 回答