2011-08-23 91 views
77

我有一個在Eclipse中的Maven項目,並有Maven目標運行註釋處理器來生成代碼。此代碼的輸出文件夾是target/generated-sources/apt。M2E和maven生成的源文件夾作爲eclipse源文件夾

爲了蝕看到這個生成的代碼我需要添加目標/生成來源/公寓作爲源文件夾到eclipse項目。

然而,這會導致那裏是類型「Maven的配置問題」的錯誤說

項目配置不上最新與pom.xml的。運行項目 配置更新

我想我明白了爲什麼這樣,因爲eclipse有一組不同的源文件夾到maven的集合。但我需要這組不同的,因爲我需要Eclipse來能夠看到生成的源文件夾...

在做建立一個純粹的行家,這些源文件夾將包含在構建,通過行家。

順便說一句,我已經升級到maven的eclipse插件正式發佈日食,M2E 1.0 - 曾經被認爲是m2eclipse的。我想看看在我必須回到以前的m2eclipse版本之前,是否可以通過m2e插件找到解決方法。

回答

97

您需要與build-helper-plugin連接的源目錄。

像這樣:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <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> 

您還需要:

+4

此解決方案在eclipse –

+0

中安裝'm2e connector for build-helper-maven-plugin'時很有用,很高興發現它 –

+0

對我不起作用。你可以詳細說明構建輔助插件設置嗎? –

3

在M2E 1.0 Maven插件的處理已經改變。您可能缺少代碼生成插件的特定m2e擴展。這裏是我設法找到的所有documentation

bug report也可能是相關的。

+0

我猜m2e是新的,並有很多優秀的開發 –

+2

我相信問題是,只需將m2eclipse項目中的Maven插件應用到m2eclipse項目中,就像m2eclipse所做的那樣,只是碰巧在大多數情況下工作,但並不保證總是這樣做正確的事情。這種新方法可能更穩定,但要求許多Maven插件都有m2e對應。 –

79

右鍵單擊該錯誤消息:

項目配置不上最新與pom.xml的運行項目 配置更新

的問題查看和選擇快速修復並單擊完成選擇默認更新項目配置。這解決了它。

+1

這也適用於我。爲什麼這不是被接受的答案?似乎接受的答案確實太多了。 –

+11

@NielsBasjes這不是被接受的答案,因爲它根本沒有幫助。當您在Eclipse中爲構建路徑添加某些內容時,這意味着您不再與POM同步,因此發出警告。更新項目配置只需刪除額外的構建路徑條目,這是最初的問題。 – Phil

4

切換到新版本的m2e/maven/apt後,...由於buildhelper添加的構建路徑導致了重複的文件,所以我需要構建器,所以我需要從buildhelper中刪除「apt-generated」-Folders。

爲了解決Eclipse中的問題,不通過M2E中的更新Maven配置添加「apt-generated」文件夾,我寫了一個M2E插件來解決這個問題。它將maven-apt-plugin中配置的outputDirectories添加到項目的構建路徑中。

https://apt-m2e.googlecode.com

+0

不幸的是@Stefan Wo你的插件頁/回購在googlecode.com現在是404;您是否會介意更新它以及Eclipse Marketplace條目?請參閱https://marketplace.eclipse.org/content/apt-m2e-connector – maxxyme

0

您還可以使用在發現目錄中可用的buildhelper M2E連接器。我使用Eclipse 3.7

1

https://bugs.eclipse.org/bugs/show_bug.cgi?id=350081

上CXF JIRA要求(見1)在CXF-CODEGEN-插件本身添加生命週期的映射。這需要m2e 1.1,但我認爲這比使用cxf項目之外的連接器更好,假設生命週期映射API的變化比cxf-codegen-plugin和cxf更少。

0

適用於Web開發人員的Eclipse Java EE IDE。 版本:朱諾服務發佈1個

mvn archetype:generate \ 
    -DarchetypeGroupId=org.codehaus.mojo \ 
    -DarchetypeArtifactId=gwt-maven-plugin \ 
    -DarchetypeVersion=2.5.0 

mvn clean install 

工作完美。

但在eclipse中,我在Asinc類中有同樣的錯誤。

只需在項目上按F5即可。解決這個問題。

0

這就是我發現,使用彈簧3.1.1,它也有3.0.6版本以及它的工作良好。一旦我得到插件設置,並將其放入pom的正確區域,幷包含argline和endorseddirs以將java源文件放到target/generated-sources/cxf文件夾中,maven就會生成源文件。

....

<properties>... 

    <dependencyManagement> 
     <dependencies>..... 
    </dependencyManagement> 

<dependencies> 
    <dependency>.... 

</dependencies> 



<!-- *************************** Build process ************************************* --> 
<build> 
    <finalName>eSurety</finalName> 
    <plugins> 
     <!-- Force Java 6 --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
     <!-- Deployent on AS from console 
     <plugin> 
      <groupId>org.jboss.as.plugins</groupId> 
      <artifactId>jboss-as-maven-plugin</artifactId> 
      <version>${version.jboss.as.maven.plugin}</version> 
     </plugin> 
     --> 

     <!-- wildbill added tomcat plugin --> 
     <plugin> 
      <groupId>org.apache.tomcat.maven</groupId> 
      <artifactId>tomcat7-maven-plugin</artifactId> 
      <version>2.0</version>    
     </plugin> 

     <!-- Surefire plugin before 2.9 version is buggy. No need to declare here, 
       it's being referenced below w/ the version 
     <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12</version> 
     </plugin> 
     --> 

     <!-- developer added these --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <compilerArguments> 
        <endorseddirs>target/generated-sources/cxf</endorseddirs> 
       </compilerArguments> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12</version> 
      <configuration> 
       <forkMode>once</forkMode> 
       <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine> 
      </configuration> 
     </plugin>   
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <compilerArguments> 
        <endorseddirs>target/generated-sources/cxf</endorseddirs> 
       </compilerArguments> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <forkMode>once</forkMode> 
       <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine> 
      </configuration> 
     </plugin>      
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId>      
      <configuration> 
       <artifactItems> 
        <artifactItem> 
         <groupId>javax.xml.bind</groupId> 
         <artifactId>jaxb-api</artifactId> 
         <version>2.2</version> 
        </artifactItem> 
        <artifactItem> 
         <groupId>javax.xml.ws</groupId> 
         <artifactId>jaxws-api</artifactId> 
         <version>2.2</version> 
        </artifactItem> 
       </artifactItems> 
       <outputDirectory>target/generated-sources/cxf</outputDirectory> 
      </configuration>      
     </plugin>             
    </plugins> 
</build> 



<!-- *********************** Profiles ************************************ --> 
<profiles> 
    <profile> 
     <!-- When built in OpenShift the 'openshift' profile will be 
      used when invoking mvn. --> 
     <!-- Use this profile for any OpenShift specific customization 
      your app will need. --> 
     <!-- By default that is to put the resulting archive into the 
      'deployments' folder. --> 
     <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html --> 
     <id>projName</id> 
     <build> 
      <plugins>             
       <plugin> 
        <groupId>org.apache.cxf</groupId> 
        <artifactId>cxf-codegen-plugin</artifactId> 
        <version>2.5.2</version>       
        <executions> 
         <execution> 
          <id>process-sources</id> 
          <phase>generate-sources</phase>                        
          <configuration> 
           <fork>once</fork> 
           <additionalJvmArgs>-Djava.endorsed.dirs=target/generated-sources/cxf</additionalJvmArgs>           
          </configuration> 
          <goals>        
           <goal>wsdl2java</goal> 
          </goals> 
         </execution> 
        </executions>      
        <dependencies> 
         <dependency> 
          <groupId>com.sun.xml.bind</groupId> 
          <artifactId>jaxb-impl</artifactId> 
          <version>2.2</version> 
         </dependency> 
         <dependency> 
          <groupId>com.sun.xml.bind</groupId> 
          <artifactId>jaxb-xjc</artifactId> 
          <version>2.2</version> 
         </dependency> 
        </dependencies> 
       </plugin> 

       <!-- Actual war created in default target dir --> 
       <plugin> 
        <artifactId>maven-war-plugin</artifactId> 
        <version>2.2</version>            
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

如果您的WSDL文件夾是在$ {BASEDIR}/src目錄/主/資源,它會自動

發現它希望這有助於! 〜wildbill

-1

配置到構建幫助程序插件確實對我們有用。

但請注意,目標文件夾總是必須等於您用於註釋處理本身的插件的配置。

例如,maven-processor-plugin使用目標文件夾$ {project.build.directory}/generated-sources/apt作爲默認值。如果您希望生成的源文件的另一個目標位置,則可以通過如下所示的標記對其進行設置。

<plugin> 
<groupId>org.bsc.maven</groupId> 
       <artifactId>maven-processor-plugin</artifactId> 
       <version>2.1.1</version> 
       <executions> 
        <execution> 
         <id>process</id> 
         <goals> 
          <goal>process</goal> 
         </goals> 
         <phase>process-sources</phase> 
         <configuration> 
          <defaultOutputDirectory>apt_generated</defaultOutputDirectory> 
          <processors> 
           <processor>com.any.processor.invoker</processor> 
          </processors> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
-3

下面是解

  1. 開放標記視圖(窗口>顯示視圖上的錯誤信息
  2. 右鍵單擊選擇Quick Fix
  3. 單擊Finish
0

如果因爲某種原因不能使用buil d助手插件最簡單的方法(雖然不是很方便,有點乏味)我已經找到了對付這就是:

  1. 獨立生成的源代碼到自己的項目或子模塊。
  2. 當您正在處理父項目時,您將希望保持此項目處於關閉狀態或不導入Eclipse。
  3. 在需要生成代碼的父項目中,確保現在依賴於通過Maven pom依賴項生成的源代碼項目。
  4. 當您需要更新生成的代碼時,請轉到生成的代碼項目並運行mvn install。現在刷新右擊並父項目選擇Maven->更新項目...

這通常非常適用於使用代碼生成半靜態源,如SOAP的WSDL(Apache的CXF)項目或從數據庫生成的代碼(jOOQ)。對於APT和其他類似於AspectJ的代碼,它不能很好地工作,因爲您經常編輯源代碼。