Рубрики
Без рубрики

Это все для примера руководства по настройке JNDI источника данных Tomcat, вы можете определить ресурс аналогичным образом в context.xml файлы тоже.

ява.ланг.NoClassDefFoundError, язык java NoClassDefFoundError, NoClassDefFoundError, как разрешить NoClassDefFoundError в java, пример java NoClassDefFoundError, maven NoClassDefFoundError, исправление пути к классу NoClassDefFoundError, jar NoClassDefFoundError.

Автор оригинала: Pankaj Kumar.

ява.ланг.NoClassDefFoundError-это ошибка во время выполнения, возникающая, когда требуемый класс не найден в пути к классам, и, следовательно, JVM не может загрузить его в память.

ява.ланг.NoClassDefFoundError-это ошибка во время выполнения, возникающая, когда требуемый класс не найден в пути к классам, и, следовательно, JVM не может загрузить его в память.

  • NoClassDefFoundError-это ошибка во время выполнения, поэтому предвидеть и исправить это выходит за рамки нашего приложения.
  • ява.ланг.NoClassDefFoundError-это ошибка во время выполнения, она никогда не возникает во время компиляции.
  • Очень легко отлаживать NoClassDefFoundError, потому что в нем четко указано, что JVM не смогла найти требуемый класс, поэтому проверьте конфигурации путей к классам, чтобы убедиться, что необходимые классы не пропущены.

Диаграмма классов NoClassDefFoundError

На рисунке ниже показана диаграмма классов NoClassDefFoundError и ее суперклассы.

Как вы можете видеть, это суперклассы Выбрасываемые и Ошибка .

ява.ланг.Причины noclassdeffounderr

Давайте сначала попробуем воспроизвести сценарий, в котором мы получаем NoClassDefFoundError во время выполнения. Допустим, у нас есть классы java, как показано ниже.

public class Data {

	private int id;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	
}

Обратите внимание, что приведенный выше класс не зависит от каких-либо других пользовательских классов java, он просто использует встроенные классы java. Давайте создадим другой класс, который будет использовать класс данных в том же каталоге.

public class DataTest {

	public static void main(String[] args) {
		Data data = new Data();
		data.setId(10);
		System.out.println("Data Id = "+data.getId());
	}

}

Теперь давайте скомпилируем тестовый класс данных, а затем выполним его, как показано ниже.

pankaj:temp pankaj$ ls
Data.java	DataTest.java
pankaj:temp pankaj$ javac DataTest.java 
pankaj:temp pankaj$ ls 
Data.class	Data.java	DataTest.class	DataTest.java
pankaj:temp pankaj$ java DataTest
Data Id = 10
pankaj:temp pankaj$

Пока все в порядке, теперь давайте переместим файлы класса данных в другое место, а затем попробуем выполнить тестовый класс данных. Мы не будем компилировать его снова, так как тогда он выдаст ошибку компиляции.

pankaj:temp pankaj$ mv Data.java Data.class ../
pankaj:temp pankaj$ ls
DataTest.class	DataTest.java
pankaj:temp pankaj$ java DataTest
Exception in thread "main" java.lang.NoClassDefFoundError: Data
	at DataTest.main(DataTest.java:5)
Caused by: java.lang.ClassNotFoundException: Data
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 1 more
pankaj:temp pankaj$ 

Вот оно, мы получили NoClassDefFoundError , потому что среда выполнения java не может найти Данные класс, как ясно показано в трассировке стека исключений. На рисунке ниже показаны все вышеперечисленные команды и вывод в окне терминала.

Как разрешить java.lang.NoClassDefFoundError?

Из приведенного выше примера мы можем четко определить, что единственная причина этой ошибки заключается в том, что необходимые классы были доступны во время компиляции, но не во время выполнения. Вы можете исправить ошибку NoClassDefFoundError, проверив следующее:

  • Проверьте трассировку стека исключений, чтобы точно знать, какой класс выдает ошибку, а какой класс не найден java.
  • Следующий шаг-поиск конфигурации пути к классам, иногда мы компилируем наши классы в Eclipse или какой-либо другой среде и запускаем в какой-либо другой среде, и мы можем пропустить конфигурации пути к классам. Например, я могу легко исправить вышеуказанную проблему, добавив каталог, содержащий класс данных, в путь к классу, как показано ниже.

    Помните, что ранее я переместил класс данных в предыдущий каталог.

  • В большинстве случаев NoClassDefFoundError поставляется с приложениями, запущенными на каком-либо сервере в качестве веб-приложения или веб-служб, в этом случае проверьте, являются ли требуемые файлы jar частью файла WAR или нет. Например, приведенная ниже конфигурация maven не будет упаковывать файл jar при создании файла WAR.

    Но нам это нужно для создания веб-приложения на основе сервлета , обычно этот jar всегда является частью Tomcat или любого другого сервера приложений.

Это все для быстрого ознакомления с java.lang.NoClassDefFoundError , Я надеюсь, что вы найдете достаточно идей, когда появится эта ошибка и как ее легко исправить.

Ссылка: API Doc , Обработка исключений в Java