如果这对其他人有帮助,以下解决了我最近的“MOXy 已配置但被忽略”的问题。
我通过实现@XmlPath Javadoc 中显示的第一个示例在 Java 11(Open JDK)上对其进行了测试。
按照here 的说明,我将所需的属性文件添加到包含我的域类(我想要序列化的带注释的bean)的包中。
我的 IDE 解决方案
我最初忘记做的步骤是:
我的 IDE 仅将已编译的 .class 文件复制到目标目录 - 它不会复制任何其他内容(例如我的属性文件)。
呃。
如何解决这个问题取决于您的 IDE。对我来说,这是对我项目的 ant 构建配置的简单更改。
如果您使用的是 Maven,那么pom.xml 中的构建步骤如下:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
</build>
JAR 解决方案
同样,需要指示 Maven 将文件复制到 JAR 中的该文件夹中。有多种方法可以做到这一点。一些答案请参见this question。
资源目录
将此特定配置文件放入resources 目录并不 工作(至少,它对我不起作用)。 MOXy 说明非常具体 - 需要严格遵守。
POM 依赖项
在 Java 11 中,模块 java.se.ee 已被删除。见JEP-320。该模块包括 JAXB(和 JAX-WS)。要在 Java 11 及更高版本中使用 JAXB,您需要将其作为单独的库添加到您的项目中。
鉴于此,这里是我的 POM 依赖项,记录在案:
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
<!--
Use 2.3.1 below to prevent "illegal
reflective access operation" warnings.
-->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.7.6</version>
</dependency>
MOXy 第 3 版的更新
以上说明适用于 MOXy 版本 2.7.6。
要使用版本 3+,您需要考虑到最近将许多 javax 包转移到 Jakarta。你可以阅读这个动作的背景here。
升级项目的步骤:
- 将
jaxb.properties 文件更改为以下内容:
jakarta.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
请注意这里对 jakarta 的更改引用,用于绑定上下文。
- 将您的 jaxb 导入的 all 更改为引用
jakarta 而不是 javax。所以,例如,改变这个:
import javax.xml.bind.JAXBContext; // old import
到这里:
import jakarta.xml.bind.JAXBContext; // new import
- 在您的
pom.xml 中使用以下两个依赖项:
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>3.0.0</version>
</dependency>
这两个依赖项足以支持此处提供的代码示例的更新版本:XPath Based Mapping using MOXy。