2010-11-05 70 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