2012-04-30 92 views
11

我正在使用jaxb2 xjc插件從XSD生成java文件。因此,我使用如下配置我的pom.xml:Maven JAXB2 XJC插件:未涵蓋M2E插件執行

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>jaxb2-maven-plugin</artifactId> 
      <version>1.3</version> 
      <executions> 
       <execution> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>xjc</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <packageName>com.mypackage.model</packageName> 
       <schemaDirectory>${basedir}/src/main/resources/XSD</schemaDirectory> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

我將我的開發環境更改爲Eclipse Indigo,但此操作不再有效。該錯誤說:「插件執行不包含在生命週期配置中」。我知道我必須以不同的方式定義我的插件的執行,以便它可以在我的新環境中運行。

我按照此頁面上的說明M2E plugin execution not covered但在執行generate-sources階段時不會生成源文件。

任何人都可以告訴我如何完全重構我的POM,以便我的文件正確生成?

感謝您的幫助!

+0

你有沒有找到這個離線的答案?我正在嘗試自己解決同一個問題。 –

+0

沒有...但如果你找到一個,請發佈它,我會很高興接受它:) –

回答

14

事實證明我確實最終找到答案! Eclipse與Maven的集成已知與許多Maven插件的兼容性問題。

當你可以成功運行一個Maven從Eclipse之外的命令行構建,但但是Eclipse顯示在你的POM「執行不覆蓋」的錯誤,然後再嘗試加入這個插件:

<build> 
    ... 
    <pluginManagement> 
     <plugins> 
      <!--This plugin's configuration is used to store Eclipse m2e settings 
       only. It has no influence on the Maven build itself. --> 
      <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>jaxb2-maven-plugin</artifactId> 
            <versionRange>[1.3,)</versionRange> 
            <goals> 
             <goal>xjc</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <execute /> 
           </action> 
          </pluginExecution> 
         </pluginExecutions> 
        </lifecycleMappingMetadata> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

如圖所示在上面的評論中,這個插件沒有在Eclipse之外做任何事情。它只是告訴Eclipse何時執行JAXB插件,因爲Eclipse不夠聰明,無法自行解決這個問題。

我在another StackOverflow question上發現了這個片段,並將其用於「jaxb2-maven-plugin」插件,而不是其他問題中的插件。

+0

今天早上我做了同樣的上面,它修復了我的日食錯誤。 – Venky

3

您也可以切換到支持M2E的maven-jaxb2-plugin。上面的答案通常適用於那些M2E不支持的插件。

+0

我在項目中使用帶有最新版本(0.13.1)的'maven-jaxb2-plugin',並且在問題中顯示的eclipse中仍然出現相同的錯誤。只應用Steve Parkins的答案接縫來修復它。 – MJar

0

我不確定這是否適用於您的環境,但是如果應用程序被拆分爲maven模塊,那麼最適合我需求的解決方案我迄今發現的是從eclipse IDE中刪除所有受影響的模塊。每當我需要重新生成時,我只需使用mvn install從命令行構建。然後Eclipse使用回購軟件包,而不是試圖自行構建,沒有runOnIncremental需要(我已經使用了相當長的一段時間),沒有紅色模塊/線路,構建也更快。