【问题标题】:Full search and replace of strings in source files when copying resources复制资源时完全搜索和替换源文件中的字符串
【发布时间】:2011-01-12 21:00:17
【问题描述】:

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

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

【问题讨论】:

    标签: maven


    【解决方案1】:

    这可以通过 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>
    

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

    【讨论】:

    • 我更喜欢这种方式,因为这样可以实现更多的执行阶段,并允许分别处理不同的文件。
    • 替换已正确完成,但替换后的 .java 未编译且未包含在生成的包中。这是因为您在准备包阶段应用了替换插件,此时仅收集了源文件并且尚未编译它们。你必须在编译阶段应用这个解决方案,它可以工作!!!
    • 为了在 Java 文件中做一些事情,我可以推荐 templating-maven-plugin
    • 有没有办法删除以某个字符开头的整行,比如属性文件中的“#”?
    【解决方案2】:

    你也可以使用

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

    100% maven,做你想做的事以及更多

    【讨论】:

    • 不管不被接受,这就是“Maven方式”。 +1
    • 好吧,我不会对“Maven 方式”如此自信。这个插件看起来其实太像antrun兄弟左右了。无论如何,用几乎编程配置的 XML 块和块来增长 pom.xml 绝对是 不是 maven 方式。
    • 链接给出了 404,我在谷歌搜索时遇到了麻烦。知道插件发生了什么吗?
    • 我也收到了 404。项目死了吗?有其他选择吗?
    • 答案中的链接(有时)重定向到code.google.com/archive/p/maven-replacer-plugin
    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2013-07-20
    • 2020-02-06
    相关资源
    最近更新 更多