【问题标题】:Maven JAXB2 XJC plugin: M2E plugin execution not coveredMaven JAXB2 XJC 插件:未涵盖 M2E 插件执行
【发布时间】:2012-04-30 17:05:37
【问题描述】:

我正在使用jaxb2 xjc 插件从XSD 生成java 文件。因此,我曾经将我的 pom.xml 配置如下:

<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 以便正确生成我的文件?

感谢您的帮助!

【问题讨论】:

  • 你有没有找到这个离线的答案?我正在尝试自己解决同样的问题。
  • 无...但如果你找到了,请贴出来,我很乐意接受:)

标签: java maven jaxb xjc maven-jaxb2-plugin


【解决方案1】:

事实证明,我确实最终找到了答案! Eclipse 与 Maven 的集成已知与许多 Maven 插件的兼容性问题。

当您可以从 Eclipse 之外的命令行成功运行 Maven 构建,但 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 上找到了这个 sn-p,并将其用于“jaxb2-maven-plugin”插件,而不是另一个问题中的问题插件。

【讨论】:

  • 今天早上我做了和上面一样的事情,它修复了我的 eclipse 错误。
【解决方案2】:

您也可以切换到支持 M2E 的maven-jaxb2-plugin。不过,Steve Perkins 的上述回答通常适用于 M2E 不支持的那些插件。

【讨论】:

  • 我在我的项目中使用带有最新版本(0.13.1)的maven-jaxb2-plugin,但在 Eclipse 中仍然出现相同的错误,如问题所示。仅应用史蒂夫帕金斯的接缝来修复它。
【解决方案3】:

我不确定这是否适用于您的环境,但如果应用程序被拆分为 maven 模块,那么到目前为止我发现的满足我需求的最佳解决方案是从 eclipse IDE 中删除所有受影响的模块。每当我需要重新生成时,我只需使用 mvn install 从命令行构建。然后 Eclipse 使用来自 repo 的包,而不是尝试自己构建,不需要 runOnIncremental 摆弄(我使用了很长一段时间),没有红色模块/行,构建速度也更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2013-10-08
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多