Как переопределить версию JAXB по умолчанию через Maven?

Возможно, это поможет кому-то:

<?php

    $string = "Your line of text";
    $spl = preg_match("/([, \.\d\-''\"\"_()]*\w+[, \.\d\-''\"\"_()]*){50}/", $string, $matches);
    if (isset($matches[0])) {
        $matches[0] .= "...";
        echo "<br />" . $matches[0];
    } else {
        echo "<br />" . $string;
    }

?>
2
задан Zeruno 2 March 2019 в 03:54
поделиться

1 ответ

Maven - это инструмент для сборки, поэтому вы не можете изменять или выбирать реализацию во время выполнения с помощью maven. Maven использует зависимости, найденные в pom.xml, для компиляции проекта. В во время выполнения классы выбираются 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));
    }
}
0
ответ дан Mikko Tuominen 2 March 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: