Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70% Забронировать скидку
10 Июл 2023
2 мин
1047

Решение ошибки java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

Часто разработчики сталкиваются с ситуацией, когда их код, использующий классы JAXB API, которые были предоставлены как часть JDK в Java 6/7/8, при запуске на

Часто разработчики сталкиваются с ситуацией, когда их код, использующий классы JAXB API, которые были предоставлены как часть JDK в Java 6/7/8, при запуске на Java 9 вызывает ошибки. Это происходит из-за того, что указанные классы не могут быть найдены.

Примером такого кода может быть следующий фрагмент:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;

public class Main {
    public static void main(String[] args) {
        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(Object.class);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

При запуске данного кода с JDK 9 и выше произойдет ошибка java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException.

Причина такого поведения заключается в том, что начиная с Java 9, некоторые модули, включая JAXB, были удалены из JDK. Это было сделано в целях уменьшения размера JDK и JRE.

Для решения этой проблемы, можно использовать один из следующих подходов:

  1. Добавление нужных модулей в runtime с использованием флага --add-modules. В этом случае в командной строке для запуска программы будет выглядеть следующим образом: java --add-modules java.xml.bind Main.

  2. Использование зависимостей JAXB из Maven. Для этого в файл pom.xml необходимо добавить следующую зависимость:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>

После этого классы JAXB будут доступны для использования, так как они будут загружены из зависимостей Maven.

Оба этих подхода позволят избежать ошибки java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException при запуске программы на JDK 9 и выше.

Добавить комментарий

Подарок
Забрать подарок