2013-07-19 38 views
0

我正在開發一個庫,我需要在編譯之前自動生成.java文件。我發現了一個在maven-exec-plugin,我以這種方式配置其如何在Maven中構建我的項目時執行已編譯的jar

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2.1</version> 
    <executions> 
    <execution> 
     <id>generate-city-enum</id> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>java</goal> 
     </goals> 
     <configuration> 
     <executable>java</executable> 
     <mainClass>org.codeforamerica.open311.city_enum_builder.EnumBuilder</mainClass> 
     <arguments> 
      <argument>-jar</argument> 
      <argument>city_enum_builder.jar</argument> 
      <argument>cities.json</argument> 
      <arguments>output.java</arguments> 
     </arguments> 
     </configuration> 
    </execution> 
</executions> 
</plugin> 

的問題是,運行mvn -e compile我得到以下錯誤:

java.lang.ClassNotFoundException: org.codeforamerica.open311.city_enum_builder.EnumBuilder

然而,這是主類,和,實際上,如果我執行java -cp .:city_enum_builder.jar org.codeforamerica.open311.city_enum_builder.EnumBuilder cities.json output.java它的作品。

另外,這個.jar不需要指定一個類來獲得執行(java -jar city_enum_builder.jar cities.json output.java也適用)。

謝謝。

+0

執行的時候''是在city_enum_builder.jar'你的classpath MVN -e compile'? – Lucas

+0

它是在項目的根文件夾(從我執行'mvn'的地方),我跟着從這個[回答](http://stackoverflow.com/a/15282659/986257)的方法。它只提供了.jar路徑,對嗎? – Santi

回答

1

我想你混淆了exec:exec目標(它產生一個外部進程)與exec:java(它只是在Mavens VM中執行一些Java類)的參數。

(所以對於你的榜樣,<executable>java</executable>將被忽略(所以沒有所謂的java.exe),顯然你的類本身完全不認識如何解決的classpath。

因此,作爲依賴添加項目提供您city_enum_builder.jar到您exec-maven-plugin,它應該工作。

不要忘記檢查http://mojo.codehaus.org/exec-maven-plugin/java-mojo.html瞭解更多詳情。

+0

它的工作,謝謝你:) – Santi

相關問題