java - 在 Maven 项目中管理 JAXB 生成的类

标签 java jakarta-ee maven jaxb spring-oxm

我有一个基于 Maven 的项目,我试图在其中添加一些由“jaxb2-maven-plugin”Maven 插件自动生成的 JAXB 类。然而,我的第一次剪辑让我陷入了循环依赖循环:

  • 因为这些 JAXB 类还没有生成,所以我引用它们的其他来源有编译错误。
  • 因为其他来源存在编译错误,所以不会生成这些 JAXB 类。

解决这个问题似乎有两种明显的可能性:

  1. 注释掉损坏的引用,以便自动生成项目构建和 JAXB 类。然后将那些生成的源从/target复制到/src/main/java,这样对它们的引用就不会导致编译错误。
  2. 创建一个完全独立的项目,只包含 JAXB 内容。将其作为依赖项包含在我的主项目中。

我是不是漏掉了什么?选项 #1 似乎完全荒谬...只是不能是人们使用 JAXB 的方式。选项 #2 似乎更合理,但仍然相当低效和繁琐。我真的必须承担一个完全独立的项目的开销才能使用 JAXB 吗?

在 Maven 插件生成它们的同一项目中,开发人员是否可以使用更优雅的方法来引用 JAXB 生成的类?

更新:根据要求,这是我的 POM 的相关部分:

<build>
    <plugins>
        <plugin>
            <!-- configure the compiler to compile to Java 1.6 -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>       
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <!-- The name of your generated source package -->
                <packageName>com.mypackage</packageName> 
            </configuration>
        </plugin>
    </plugins>  
</build>

当我运行 mvn clean package 时,我确实看到在 /target 子目录下生成了我的 JAXB 源代码。但是,这些生成的源代码不会自动添加到编译阶段的类路径中。

解决后更新:事实证明,我的编译问题更多地与我在 Eclipse 中运行的事实有关,它的 Maven 集成与“jaxb2-maven-plugin”有一些问题”。参见 this StackOverflow question有关该问题及其解决方案的更多详细信息。

最佳答案

你是如何配置你的 jaxb maven 插件的?通常它在 generate-sources 生命周期中运行,该生命周期在 compile 生命周期之前。因此,当您自己的代码被编译时,您的 JAXB 生成的类应该已经存在,Maven 将它们放在 target/generated-source 中并将该文件夹放在类路径中。

编辑: 这是我们在工作中使用的代码(并且按预期工作):

<plugin>
            <groupId>com.sun.tools.xjc.maven2</groupId>
            <artifactId>maven-jaxb-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <schemaDirectory>src/main/resources/<companyname>/xsd</schemaDirectory>
                <includeSchemas>
                    <includeSchema>retrieval.xsd</includeSchema>
                    <includeSchema>storage.xsd</includeSchema>
                </includeSchemas>
            </configuration>
        </plugin>

显然我们使用了另一个 jaxb 插件...(另请参阅此线程:Difference of Maven JAXB plugins)。

关于java - 在 Maven 项目中管理 JAXB 生成的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11972107/

相关文章:

java - Android,使用 Retrofit 填充无尽 ListView 数据的最佳方法?

java - 在java中从txt中读取长整数

java - 使用反射基于静态实用函数中的所有字段进行等于

java - 如何在使用LDAP进行身份验证的项目中正确配置Spring Security的记住我选项?

performance - gradle install 比 maven install 慢?

java - Maven 类路径 Log4J NoClassDefFoundError

java - 饼图小程序未显示在浏览器中

javascript - 什么是最简单、最著名、最老练的 AJAX 框架?

tomcat - 如何将上下文参数添加到tomcat中的单个webapp?

java - 如何在 Alfresco Activiti 中配置电子邮件服务器?