Maven 是一种构建工具,因此您无法使用 maven 更改或选择运行时实现。 Maven 使用 pom.xml 中的依赖项来编译项目。在 runtime 中,类由 java classloader 选择。
要覆盖默认的 jaxb 实现,您需要实现自定义类加载器或将运行时类加载器模式配置为“最后一个父级”。默认是“父优先”,它优先于 JDK 类而不是其他所有类。
如何执行此操作取决于您的运行时环境。例如,IBM Websphere AS 在管理控制台中有一个选项可以选择类加载器模式。
一篇关于类加载器以及如何实现自定义类加载器的好文章:https://www.baeldung.com/java-classloaders
代码 sn-p 在运行时获取详细信息:
/**
* Usage: ClassDetails.print(JAXB.class);
*/
public class ClassDetails {
public static void print(Class<?> clazz) {
String apiDetails = String.format("%s - %s (%s)",
clazz.getPackage().getSpecificationTitle(),
clazz.getPackage().getSpecificationVendor(),
clazz.getPackage().getSpecificationVersion());
String implDetails = String.format("%s - %s (%s)",
clazz.getPackage().getImplementationTitle(),
clazz.getPackage().getImplementationVendor(),
clazz.getPackage().getImplementationVersion());
String classloader = clazz.getClassLoader() != null ?
clazz.getClassLoader().toString() : "bootstrap";
println("Class name", clazz.getCanonicalName());
println("API details", apiDetails);
println("Implementation", implDetails);
println("Classloader", classloader);
}
private static void println(String label, String value) {
System.out.println(String.format("%-16s: %s", label, value));
}
}