2009-07-28 76 views
40

我正在使用Google Protocol Buffers爲我的項目生成一些Java類。使用Maven 2及其「antrun」插件,這些類是在編譯之前新生成的,在構建期間輸出到目標/生成源並放到類路徑中。所以從POM構建項目是沒有問題的。如何獲得Eclipse來解析使用Maven 2生成的類?

但是,Eclipse不知道如何解析生成的類,因爲它在開發過程中似乎不在IDE的類路徑中。我正在使用m2eclipse,併爲它管理依賴關係,所以我期望Maven能夠照顧到這一點。

如何獲得生成的代碼的IDE支持(代碼完成等)?

+0

我發佈了這個問題和一個(可能的)答案,因爲我正在嘗試一些事情,部分是爲了分享我學習的東西d,部分原因是,儘管我最終完成了這項工作,但我仍然不明白爲什麼。 – 2009-07-28 08:28:34

+0

問題http://stackoverflow.com/q/7160006/873282似乎是相關的。答案http://stackoverflow.com/a/7160614/873282建議最終與APT M2E連接器一起使用build-helper插件。目前,它與M2E和Eclipse開普勒不兼容。 – koppor 2013-11-26 18:17:52

回答

13

你應該在你的項目資源管理器中看到的是一個名爲container「的Maven依賴「來代替通常的」引用庫「。這意味着m2eclipse正在管理你的構建路徑。

在我的情況下,爲了達到這個目的,我在Project-> Properties的「Maven」部分選中了「包含模塊」和un勾選了「處理資源時跳過Maven編譯器插件」。

+0

m2eclipse:對,好點。+1我的回答是更一般的 – VonC 2009-07-28 08:37:33

+0

我現在想知道m2eclipse是否曾經在我做過這些設置之前管理過任何依賴關係,因爲我的依賴現在看起來大不相同。奇怪的。 (幾天前我只有Maven化這個項目,也許這是問題的一部分) – 2009-07-28 08:51:41

+14

@HannoFietz:我有同樣的問題,並找不到Maven部分中的這些選項。新版本有不同的方法嗎? – letmaik 2012-08-24 10:13:35

2

您是否嘗試刷新Eclipse項目?

alt text http://oyvindhauge.com/blog/wp-content/eclipse_refresh.png

當外部工具生成新文件或更新舊的,Eclipse將無法檢測,直到下一個請求的變化。

另一種選擇是定義一個新的自定義生成器,指定爲構建器「完成時刷新資源」:

alt text http://www.cs.lth.se/EDA180/2005/Verktyg/eclipse_refresh.gif

+0

是的,我做到了。我也做了項目 - >清潔。看來,maven的「編譯」目標必須被調用(請參閱下面我自己的答案),但我仍然很不確定Maven-Eclipse集成是如何工作的。 – 2009-07-28 08:24:38

+0

哈哈它經過幾次清理和刷新(在日食霓虹燈3)後爲我工作。謝謝! +1 – erginduran 2017-05-12 18:27:22

21

m2eclipse不支持這個。您必須手動將文件夾target/generated-sources作爲源文件夾。當你告訴m2eclipse到「更新項目配置」時,這將被覆蓋,你必須恢復它。

另外,確保Eclipse在工作區中查找更改。

雖然可能有一些問題。最終,你會遇到錯誤,某些類無法編譯,因爲其他類無法解析。但是,代碼完成將起作用。這個問題的根本原因在於,當Maven更改target中的類文件時,Eclipse會感到困惑。

要解決這個問題,你必須告訴Eclipse到compile to a different place than Maven

12

就我個人而言,我通過將生成的類設置爲獨立項目並在主(非生成)項目中使其成爲依賴項來解決此問題。我使用wsdl2java生成webservice類,所以我的子項目中的「源」是wdsl和xsds。即使wsdl定期更換,工作也很好。

9

我遇到了使用Maven和wsdl2java生成的代碼的問題,這裏是我在Eclipse Juno中解決它的問題。假設我的項目名爲Project:

  1. 右擊Project並選擇屬性
  2. 選擇Java從左邊的構建路徑,並選擇Libraries選項卡
  3. 單擊添加類文件夾
  4. 選擇斌目錄並單擊確定(project1/target/generated-sources/bin)
  5. 單擊確定並刷新項目

作爲額外的獎勵,你還可以將源代碼附加:

  1. 點擊旁邊的箭頭,你剛剛創建的源連接件
  2. 單擊新的類文件夾
  3. 單擊編輯按鈕
  4. 將路徑設置爲/ PROJECT1 /目標/生成來源/ Axis2的/ src目錄
  5. 單擊確定
19

m2eclipse支持這個。首先,路徑添加到您的構建路徑:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <id>add-source</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>add-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
        <source>${project.build.directory}/generated-sources/java/</source> 
       </sources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

其次,對於支持添加到M2E:

<pluginManagement> 
    <plugins> 
     <plugin> 
      <groupId>org.eclipse.m2e</groupId> 
      <artifactId>lifecycle-mapping</artifactId> 
      <version>1.0.0</version> 
      <configuration> 
       <lifecycleMappingMetadata> 
         <pluginExecutions> 
         <pluginExecution> 
          <pluginExecutionFilter> 
          <groupId>org.codehaus.mojo</groupId> 
          <artifactId>build-helper-maven-plugin</artifactId> 
          <versionRange>[1.0,)</versionRange> 
          <goals> 
           <goal>parse-version</goal> 
           <goal>add-source</goal> 
           <goal>maven-version</goal> 
           <goal>add-resource</goal> 
           <goal>add-test-resource</goal> 
           <goal>add-test-source</goal> 
          </goals> 
          </pluginExecutionFilter> 
          <action> 
          <execute> 
           <runOnConfiguration>true</runOnConfiguration> 
           <runOnIncremental>true</runOnIncremental> 
          </execute> 
          </action> 
         </pluginExecution> 
        </pluginExecutions> 
       </lifecycleMappingMetadata> 
      </configuration> 
     </plugin> 
    </plugins> 
</pluginManagement> 

第二步可能沒有必要,如果您的Eclipse已經安裝了「組織.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml「插件。這個插件可以通過窗口 - >首選項 - > Maven - >發現。目前,在Eclipse Kepler中這不起作用,因此,我提取了JAR(從Catalog URL中顯示的xml鏈接),並手工從org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml中提取了片段。

1
  1. 右鍵單擊項目並選擇屬性
  2. 選擇Java構建Pathfrom左側,然後選擇源選項卡
  3. 單擊添加文件夾
  4. 選擇bin目錄,然後單擊確定
  5. (項目/目標/ generated-sources/xxxx)點擊OK並刷新項目
相關問題