复制资源时,完全搜索和替换源文件中的字符串

时间:2010-02-03 23:50:19

标签: maven

我有一些使用包前缀的java源文件(它们模拟一些JDK类)。我使用带有前缀的这些文件来对抗某些单元测试。如果测试通过,我想生成一个包含源文件的jar,但是从所有java文件中删除了包前缀。

我正在使用maven进行构建。有没有人知道这样做的方法?基本上我想要的是类似于资源插件过滤功能,但它可以正确搜索和替换(例如:s / my.package.prefix .// g),而不是过滤$ {vars}。

2 个答案:

答案 0 :(得分:44)

您也可以使用

http://code.google.com/p/maven-replacer-plugin/

100%maven并完全按照自己的意愿行事

答案 1 :(得分:27)

这可以通过antrun插件解决。首先需要将源复制到目标目录,使用:

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.java</include>
      </includes>
    </resource>
  </resources>
  ...
</build>

其次,您使用antrun插件的replace任务使用准备包阶段替换文件

<build>
    ...
  <plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
      <execution>
        <phase>prepare-package</phase>
        <configuration>
          <tasks>
            <replace token= "my.package.prefix." value="" dir="target/classes">                                 
              <include name="**/*.java"/>
            </replace>
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  ...
</build>

这将在源 - 资源阶段将源文件复制到目标/类,在prepare-package阶段对target / classes目录中的文件进行搜索和替换,最后它们会在包中震动相。