2014-01-24 114 views
3

我有一個Maven插件,它爲我的java項目生成源代碼,並將它們放置到'target/generated-sources'文件夾中。我在編譯時需要這些源代碼。我想在修改它的同時讓它們在我的項目中生成。當然,我想將它們放到'src'文件夾下的正確文件夾中,而不是放入'目標/生成源'中。我如何使用Maven組織這個?如何在Maven中組織源代碼?

換句話說,我希望能夠:

  1. 生成來源,我需要運行我的特殊來源產生插件的一些目標(已經完成,來源有我指定的包)

  2. 將這些生成的源移動到'src/main/java/...'標準Maven佈局的文件夾中。

  3. 從「目標/生成來源」文件夾刪除它們,否則MVN清潔install命令引發錯誤,說我有「重複類」。事實上,如果我只是將生成的源代碼從目標複製到src - 我必須使用相同的名稱和包,但其中一個位於目標文件夾中。

哪個Maven插件可以用這個?我想這是一個典型的任務。

+0

看到你的pom.xml的相關配置會很有幫助。 – Behe

+0

這個插件是你開發的嗎? – MariuszS

+1

這不是典型的,因爲所有生成的東西都應該放到目標文件夾中。清理生成的文件很容易,也可以將簽入的內容分離到源代碼管理系統。 – Henry

回答

3

在行家的標準解決方案是從target/generated-sources生成所有源引入target/generated-sources,所有的源代碼和從src被編譯成target/classes併合併到目標罐子

插件不應該觸摸src目錄下的文件,因爲這些文件是由版本控制系統(例如git)管理的。

如果插件寫的不好,並從target/generated-sources源文件不會自動compilled到target,然後用目標build-helper:add-sourceBuild Helper Maven Plugin爲@詹姆斯Kingsbery說。

maven-com4j-plugin源代碼中有註釋:

/** 
    * Directory in which to create the Java COM wrapper files. This directory 
    * will be added to the Maven project's compile source directory list and 
    * will therfore be auto-compiled when the Maven compile phase is run. 
    * 
    * @parameter expression="${outputDirectory}" 
    *   default-value="${project.build.directory}/generated-sources/com4j/java" 
    */ 

更重要組成部分,解決問題的方法是:

這個目錄 將被添加到Maven項目的編譯源代碼目錄列表和 將因此在Maven編譯階段運行時自動編譯

所以,生成的源代碼應該被自動編譯並歸檔爲jar

0

如果你的插件工作正常,它會將生成的源代碼添加到內部項目和其他插件中,比如maven-compiler-plugin將它們接收並編譯代碼。

在你的插件代碼,你可以通過使用類似的東西做到這一點:

mavenProject.addCompileSourceRoot(getOutputDirectory().getAbsolutePath());