Maven - это инструмент для сборки, поэтому вы не можете изменить или выбрать реализацию во время выполнения с помощью maven.Maven использует зависимости, найденные в pom.xml, для компиляции проекта.В runtime классы выбираются java classloader
.
Чтобы переопределить реализацию jaxb по умолчанию, вам нужно реализовать собственный загрузчик классов или настроить режим загрузчика классов во время выполнения на «родительский последний»,По умолчанию «родительский сначала», который предпочитает классы JDK всем остальным.
Как это сделать, зависит от вашей среды выполнения.Например, у IBM Websphere AS есть опция в консоли администратора для выбора режима загрузчика классов.
Хорошая статья о загрузчиках классов и о том, как реализовать пользовательский загрузчик классов: https://www.baeldung.com/java-classloaders
Фрагмент кода дляполучить подробности во время выполнения:
/**
* 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));
}
}