2010-11-05 71 views
12

我写了一个小的BeanShell脚本,用源代码中的实际行号替换"__LINE__"。它在Ant中运行良好。在Maven中过滤源代码

我正在寻找一种方法来过滤Maven中的源代码,以便我的BeanShell脚本可以生成一个新的源代码目录,然后进行编译。

我知道资源文件过滤。有没有类似的源代码设施?

回答

19

几个月前过滤源代码仍然很棘手,但现在MOJO项目中有一个标准插件。你现在可以用一个经典的插件声明来做到这一点。

要过滤源代码(例如,当您希望Java代码中有一个常量来检索项目版本或artifactId)时,您现在应该使用templating-maven-plugin

  1. 把你的代码,应在生成过程中src/main/java-templates下进行过滤,你会src/main/java下非过滤来源通常做。在代码中使用${project.version}或来自POM的任何属性。

  2. 只要把一样的东西:

    <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>templating-maven-plugin</artifactId> 
        <version>1.0-alpha-3</version> <!-- Be sure to use the last version. Check on the website's plugin --> 
        <executions> 
         <execution> 
         <id>filter-src</id> 
         <goals> 
          <goal>filter-sources</goal> 
         </goals> 
         </execution> 
        </executions> 
    </plugin> 
    
  3. 是:-)完成。您放入src/main/java-templates的代码将被过滤并添加到类路径中。

使用非常简单(请参阅example here)。

这比尊重配置Maven的约定更好。你基本上正在取代几十条XML线和一些黑客来完成一些干净的事情。

附注:这适用于Eclipse的例子。

+0

嗨,我试着按照上面的回答,但是当我将项目导入eclipse-kepler并启用eclipse的自动构建时,它抱怨说它找不到'src/main/java-templates' src dir中的类。 ..也看着项目源代码构建路径,src/main/java-templates的src目录不存在......不知道它是否应该在那里。只是还要提到,当我从eclipse运行'mvn install'时,项目会成功建立,但我希望eclipse不要抱怨,它应该自动从'target/generated-sources/java-templates'中选择处理过的源代码,米错了? – 2014-03-03 10:52:50

+1

src/main/java-templates不是源文件夹,不能在IDE内部配置为一个。这样做会与目标/ generated-sources/java-templates过滤的目录(必须在Eclipse中显示为源文件夹,您不应编辑)冲突。 – 2014-03-13 14:51:40

+1

对于Eclipse内部的自动刷新,我认为你错过了一些M2E配置,尝试在你的pom.xml中添加https://gist.github.com/Batmat/9529785。它工作更好吗? – 2014-03-13 14:52:23