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

Dea*_*vey 33 maven

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

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

小智 46

你也可以使用

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

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

  • 不管不被接受,这就是“Maven方式”。+1 (2认同)

Dea*_*vey 27

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

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.java</include>
      </includes>
    </resource>
  </resources>
  ...
</build>
Run Code Online (Sandbox Code Playgroud)

其次,您使用replaceantrun插件的任务来使用prepare package阶段替换文件

<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>
Run Code Online (Sandbox Code Playgroud)

这将在源 - 资源阶段将源文件复制到目标/类,在准备包阶段中对目标/ classes目录中的文件进行搜索和替换,最后它们将在程序包阶段发生震动.

  • 替换已正确完成,但替换的.java未编译且未包含在生成的包中.这是因为您在准备包阶段应用了替换插件,此时源文件仅收集并且尚未编译.您必须在编译阶段应用此解决方案,它才有效! (3认同)