我正在将 Java 项目迁移为在 Java 17 中使用 Jakarta EE,但我遇到了一个问题:运行
mvn generate-sources
使用 javax
命名空间而不是预期的 jakarta 命名空间生成类。我的项目使用 JAXB 进行 XML 绑定,并且我已更新我的依赖项以使用最新的 Jakarta EE 版本。但是,生成的源仍然引用 javax.xml.bind 注释。
这是我的
pom.xml
的片段:
<dependencies>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>4.0.3</version>
</dependency>
<!-- Other dependencies -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.15.3</version>
<configuration>
<!-- Configuration details -->
</configuration>
</plugin>
<!-- Other plugins -->
</plugins>
</build>
确保在生成源代码之前清理项目 (
mvn clean
)。尽管如此,输出仍然使用 javax
而不是 jakarta
。
有人遇到过类似的问题,或者有人知道可能导致这种差异的原因是什么?任何有关如何确保生成的类使用
jakarta
命名空间的见解或建议将不胜感激。
在检查 target/ generated-sources 目录中生成的源时,我注意到注释仍然从 javax.xml.bind.annotation 包导入,如下所示:
package localhost._8080.beers;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
但是,我希望这些是从 jakarta.xml.bind.annotation 包导入的,如下所示:
import jakarta.xml.bind.annotation.XmlType;
看来你应该使用 4.x 版本的 jaxb-maven-plugin 而不是 maven-jaxb2-plugin。请参阅github