簡體   English   中英

Maven - 如何處理生成的類

[英]Maven - how to handle generated classes

我的困境是我對maven中生成的源文件有疑問。

我正在嘗試從WSDL生成一些類,我真的不知道處理生成的源文件的標准方法是什么。

  • 我應該在哪里生成.java源文件? (src / main / java,src / main / generated)
  • 我應該將它們包含在源代碼管理下,還是在簽出后生成它們
  • 如果我不使用src / main / java文件夾,如何說服Eclipse自動“看到”那些類作為源文件夾?
  • 我真的需要.java文件,還是只需要.class-es?

有關此問題的最佳做法是什么? 任何幫助或建議表示贊賞。

謝謝你的回答,馬克

我遇到的生成代碼的大多數Maven插件遵循將生成的Java源文件放在target/generated-sources文件夾的子目錄中的約定。 例如, Maven 2 JAXB 2.x插件target/generated-sources/xjc文件夾中生成Java源target/generated-sources/xjc

只要構建是可重復的,我就不需要將生成的源提交到我的源代碼存儲庫。 所以我通常配置我的GitMercurialSVN或我用來忽略target下的所有內容。

我通常手動編輯.classpath文件以包含Eclipse的源文件夾,並將.classpath.project文件存儲在源代碼存儲庫中。

這是一個例子:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
    <classpathentry kind="src" path="target/generated-sources/xjc"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
    <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

請務必注意,某些Maven插件不會將生成的源附加到POM。 您可以使用Build Helper Maven插件來實現此目的。

我從來沒有找到一種標准的方法來處理生成的源文件。 但是,根據我的經驗,我會向您推薦以下內容:

  • 我應該在哪里生成.java源文件? (src / main / java,src / main / generated)
  • 我把它們放在src / main / com / mypackage / generated下。 這樣, 它們已經在類路徑中,您將不需要任何其他手動配置來使Eclipse編譯沒有錯誤。
  • 我應該將它們包含在源代碼管理下,還是在簽出后生成它們
  • 曾經不包括它們 ,但是遇到一些問題后 (開發人員因為忘記了而沒有生成它們,缺少IDE Maven插件等), 我們最終將它們添加到源代碼控制中 有助於任何人知道有一個生成的源包沒有神奇地出現,只需瀏覽一個文件夾(一些源文件不再存在,等等)快速檢查模式更改,並查看應用程序的實際大小
  • 如果我不使用src / main / java文件夾,如何說服Eclipse自動“看到”那些類作為源文件夾?
  • 通過使用src / main / com / mypackage / generated解決。
  • 我真的需要.java文件,還是只需要.class-es?
  • 我建議使用.java文件。

在使用JAXB多年后,僅僅是我的兩分錢,主要用於WSDL到Java的生成。

這是我多年后的建議: 將所有代碼生成放在一個單獨的maven項目中,並在需要生成代碼的正常項目中依賴它。

  • 如果生成的代碼是SNAPSHOT, mvn install為其生成mvn install
  • 除非你知道自己在做什么,否則我不建議將生成的代碼放在子模塊中,否則Eclipse會不斷混淆,因為大多數人都會導入所有子模塊(即多模塊項目)
  • 但是,如果您決定執行多模塊(即生成的代碼是兄弟項目),您可以:
    • 特別是不要將項目導入Eclipse並在單個項目上使用mvn install
    • 依賴於m2e生命周期插件和Build Helper插件(這僅適用於受到大力支持的某些代碼生成)。
  • 如果您需要調試生成的代碼,我強烈建議使用maven-attach-sources插件將源附加到jar。

雖然多模塊方法在實踐中似乎是一個好主意但它變得非常令人煩惱,因為如果有新的SNAPSHOT,每次拉動時Eclipse都會失去同步。

如果生成的代碼沒有生成,那么通常只是釋放它,因此它不是SNAPSHOT(顯然這需要設置正確的maven存儲庫)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM