RuntimeError: java.lang.RuntimeException: java.lang.NoClassDefFoundError: org.springframework.remoting.jaxrpc.ServletEndpointSupport [duplicate]

Я пробовал использовать оба примера в Java-учебниках Oracle. Они оба компилируются нормально, но во время выполнения оба возникают с этой ошибкой:

Exception in thread "main" java.lang.NoClassDefFoundError: graphics/shapes/Square
    at Main.main(Main.java:7)
Caused by: java.lang.ClassNotFoundException: graphics.shapes.Square
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

Я думаю, что у меня может быть файл Main.java в неправильной папке. Вот иерархия каталогов:

graphics
├ Main.java
├ shapes
|   ├ Square.java
|   ├ Triangle.java
├ linepoint
|   ├ Line.java
|   ├ Point.java
├ spaceobjects
|   ├ Cube.java
|   ├ RectPrism.java

И вот Main.java:

import graphics.shapes.*;
import graphics.linepoint.*
import graphics.spaceobjects.*;

public class Main {
    public static void main(String args[]) {
        Square s = new Square(2,3,15);
        Line l = new Line(1,5,2,3);
        Cube c = new Cube(13,32,22);
    }
}

Что я здесь делаю неправильно?

UPDATE

После того, как я поместил класс Main в пакет graphics (я добавил package graphics; к нему), задайте путь к классу «_test» (папка, содержащая графику), скомпилировали его и запустили с помощью java graphics.Main (из командной строки), он работал.

UPDATE

Я не использовал Eclipse (только Notepad ++ и JDK) и вышеупомянутое обновление решило мою проблему. Однако, похоже, что многие из этих ответов относятся к Eclipse и IntelliJ, но у них есть подобные понятия.

150
задан 7 February 2017 в 13:32

22 ответа

NoClassDefFoundError в Java:

NoClassDefFoundError в Java:

NoClassDefFoundError появится, если класс присутствовал во время компиляции, но недоступен в java classpath во время во время выполнения. Обычно вы увидите строку ниже в журнале, когда вы получаете NoClassDefFoundError: Исключение в потоке «main» java.lang.NoClassDefFoundError

Возможные причины:

Класс недоступен в Java Classpath. Возможно, вы запускаете свою программу с помощью команды jar, и класс не был определен в атрибуте ClassPath файла манифеста. Любой стартовый скрипт переопределяет переменную среды Classpath. Поскольку NoClassDefFoundError является подклассом java.lang.LinkageError, он также может появиться, если некоторая его зависимость, например, родная библиотека, недоступна. Проверьте java.lang.ExceptionInInitializerError в вашем файле журнала. NoClassDefFoundError из-за сбоя статической инициализации довольно распространен. Если вы работаете в среде J2EE, чем видимость класса среди нескольких Classloader также может вызвать java.lang.NoClassDefFoundError, см. Примеры и сценарий для подробного обсуждения.

Возможные причины:

Класс недоступен в Java Classpath.

Класс недоступен в Java Classpath.

Возможно, вы запускаете свою программу, используя команду jar, и класс не был определен в атрибуте ClassPath в файле манифеста.

Путь к классу приложения верен, но

Ресурсы:

3 способа решения java.lang.NoClassDefFoundError в Java J2EE

3 пути для решения java.lang.NoClassDefFoundError в Java J2EE

3
ответ дан 15 August 2018 в 16:55

Я разрабатываю приложение на основе Eclipse, также известное как RCP (Rich Client Platform). И я столкнулся с этой проблемой после рефакторинга (перемещение одного класса из плагина в новый).

Уборка проекта и обновление Maven не помогли.

Проблема была вызванных RCP (Rich Client Platform) , которые не были обновлены автоматически. Ручное обновление Bundle-Activator под MANIFEST.MF в новом подключаемом модуле устранило мою проблему.

0
ответ дан 15 August 2018 в 16:55

Нет определения класса. Исключение происходит, когда предполагаемый класс не найден в пути класса. В классе компиляции: класс был сгенерирован из компилятора Java, но каким-то образом во время выполнения Dependent Class не найден.

Давайте рассмотрим один простой пример:

public class ClassA{
public static void main(String args[]){
     //Some gibberish Code...
     String text = ClassB.getString();
     System.out.println("Text is :" + text);
}

} [ ! d3]

public class ClassB{
    public static String getString(){
      return "Testing Some Exception";
 }
}

Теперь Предположим, что вышеупомянутые два исходных кода Java помещены в какую-либо папку, скажем, «NoClassDefinationFoundExceptionDemo»

Теперь откройте оболочку (предположим, что Java уже настроена правильно) ! d5] Перейти к папке «NoClassDefinationFoundExceptionDemo» Компилировать исходные файлы Java javac ClassB javac ClassA Оба файла скомпилированы. Существенно и сгенерированные файлы классов в той же папке, что и ClassA.class и ClassB.class. Теперь, когда мы переопределяем ClassPath для текущей работы поэтому мы выполняем следующую команду java -cp. ClassA и он работал успешно, и вы увидите вывод на экране. Теперь скажем, вы удалили файл ClassB.class из Current Directory. и теперь вы снова выполняете команду. java -cp. ClassA Теперь он будет приветствовать вас с NoClassDefFoundException. поскольку ClassB, который является зависимостью для ClassA, не найден в пути к классам (например, в рабочем каталоге).

6
ответ дан 15 August 2018 в 16:55

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

-библиотека "path.to.a.missing.jar.library".

Это объясняет, почему компиляция и работа отлично работают, учитывая, что банка есть, а чистая & amp; сборка не выполняется. Не забудьте определить новые добавленные библиотеки jar в настройках proguard!

Обратите внимание, что сообщения об ошибках Proguard действительно не соответствуют стандарту, так как их легко путать с похожими сообщениями ant, поступающими, когда банку вообще нет. Только на самом дне будет небольшой намек на пролога в беде. Следовательно, вполне логично начать поиск традиционных ошибок classpath и т. Д., Но это будет напрасно.

Очевидно, исключение NoClassDefFound будет результатом при запуске, например. результирующая исполняемая банка построена и основана на отсутствии последовательности proguard. Некоторые называют это пролога «Ад»

0
ответ дан 15 August 2018 в 16:55

Я получаю NoClassFoundError, когда классы, загруженные загрузчиком классов времени выполнения, не могут обращаться к классам, уже загруженным корневым загрузчиком java. Поскольку разные загрузчики классов находятся в разных доменах безопасности (в соответствии с java), jvm не разрешает классы, уже загруженные корневым загрузчиком, которые будут разрешены в адресном пространстве загрузчика времени выполнения.

Запустите вашу программу с помощью java -javaagent: tracer.jar [YOUR java ARGS] '

Он производит вывод, показывающий загруженный класс, и загрузчик env, который загружал класс. Очень полезно отслеживать, почему класс не может быть разрешен.

// ClassLoaderTracer.java
// From: https://blogs.oracle.com/sundararajan/entry/tracing_class_loading_1_5

import java.lang.instrument.*;
import java.security.*;

// manifest.mf
// Premain-Class: ClassLoadTracer

// jar -cvfm tracer.jar manifest.mf ClassLoaderTracer.class

// java -javaagent:tracer.jar  [...]

public class ClassLoadTracer 
{
    public static void premain(String agentArgs, Instrumentation inst) 
    {
        final java.io.PrintStream out = System.out;
        inst.addTransformer(new ClassFileTransformer() {
            public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {

                String pd = (null == protectionDomain) ? "null" : protectionDomain.getCodeSource().toString();
                out.println(className + " loaded by " + loader + " at " + new java.util.Date() + " in " + pd);

                // dump stack trace of the thread loading class 
                Thread.dumpStack();

                // we just want the original .class bytes to be loaded!
                // we are not instrumenting it...
                return null;
            }
        });
    }
}
0
ответ дан 15 August 2018 в 16:55

Сегодня я столкнулся с проблемой. У меня есть проект Android и после включения multidex проект больше не будет запускаться.

Причина в том, что я забыл вызвать конкретный метод multidex, который должен быть добавлен в Application class и вызван перед всем остальным.

 MultiDex.install(this);

Следуйте этому руководству, чтобы правильно включить multidex. https://developer.android.com/studio/build/multidex.html

Вы должны добавить эти строки в свой класс приложения

 @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
2
ответ дан 15 August 2018 в 16:55

, если вы недавно добавили поддержку multiidex в андроид-студию:

// To Support MultiDex
implementation 'com.android.support:multidex:1.0.1'

, поэтому ваше решение просто расширяется из MultiDexApplication вместо приложения

public class MyApp extends MultiDexApplication {
0
ответ дан 15 August 2018 в 16:55

После работы над проектом NetBeans в течение многих месяцев я неожиданно получил сообщение NoClassDefFoundError вскоре после получения предупреждения «Низкая память». Doing Clean rebuild не помогло, но полностью закрыло Netbeans и снова открыло проект. Ошибок не было.

1
ответ дан 15 August 2018 в 16:55

Если ваш проект находится в пакете типа com.blahcode, а ваш класс называется Main, скомпилированные файлы могут выводиться в структуре каталогов, например ./out/com/blahcode/Main.class. Это особенно актуально для IntelliJ IDEA.

При попытке запустить из оболочки или cmd вам нужно cd указать тот, который содержит com в качестве подкаталога.

cd out
java -classpath . com.blahcode.Main
2
ответ дан 15 August 2018 в 16:55

Этот ответ специфичен для java.lang.NoClassDefFoundError, который происходит в службе:

Моя команда недавно увидела эту ошибку после обновления rpm, которая предоставляла сервис. Rpm и программное обеспечение внутри него были построены с Maven, поэтому казалось, что у нас была зависимость времени компиляции, которая просто не была включена в число оборотов в минуту.

Однако при исследовании класс, который не был найден, находился в том же модуле, что и несколько классов в трассировке стека. Кроме того, это был не модуль, который недавно был добавлен в сборку. Эти ошибки указывают на то, что это может быть не проблема зависимости Maven.

Возможное решение: перезапустите службу!

Похоже, что обновление rpm аннулирует дескриптор файла службы в базовом файле jar , Затем служба увидела класс, который не был загружен в память, искал его среди своего списка файлов jar-файлов и не смог найти его, потому что дескриптор файла, из которого он мог загрузить класс, был недействителен. Перезапуск службы заставил ее перезагрузить все свои файлы, что позволило ему загрузить этот класс, который не был найден в памяти сразу после обновления rpm.

Надеюсь, что конкретный случай помогает кому-то.

1
ответ дан 15 August 2018 в 16:55

Мои две цента в этой цепочке:

Убедитесь, что путь к классам содержит полные пути (/home/user/lib/some_lib.jar вместо ~/lib/some_lib.jar), в противном случае вы все равно можете столкнуться с ошибкой NoClassDefFoundError.

0
ответ дан 15 August 2018 в 16:55

NoClassDefFoundError означает, что класс присутствует в пути к классам в Compile time, но он отсутствует в пути к классам в Runtime.

Если вы используете Eclipse, убедитесь, что у вас есть shapes, linepoints и spaceobjects как записи в файле .classpath.

100
ответ дан 15 August 2018 в 16:55
  • 1
    В моем случае я скомпилировал класс, и они перенесли его в каталог под названием app. Мне пришлось добавить строку с package app; и перекомпилировать, прежде чем я смогу переместить ее в приложение подкаталога. – taco 7 September 2014 в 23:07
  • 2
    Помимо выше перечисленных 3, ClassLoaders также могут вызывать такую ​​ошибку, которая в основном ClassNotFoundException, в этом классе сценария может присутствовать в пути к классам, но пытается загрузить из другого класса ClassLoader – Fahad 6 November 2015 в 17:47
  • 3
    2 и 3 являются специфичными для класса загрузчиков. Согласно javadoc, исключение предназначено только для причины 1. – Samuel 30 March 2016 в 02:44
  • 4
    @Samuel Оставьте о javadoc. пожалуйста, примите примерную программу, чтобы найти причины. – p1nkrock 16 June 2016 в 11:04
  • 5
    Я протестировал случай 2 и случай 3, это не NoClassDefFoundError, это ExceptionInInitializerError Case 2.Class файл, но Exception, поднятый при инициализации статических переменных. Файл Case 3.Class, Exception, поднятый при инициализации статических блоков – Michael 13 January 2017 в 07:52
  • 6
    Как справиться с этим во время выполнения через try / catch ? – Manish 13 February 2017 в 10:54
  • 7
    Этот ответ неверен, как вы его пишете. Правильно было бы: «ОДНА возможная причина этой ошибки - это ...». Но могут быть и другие причины, по которым вы получаете эту ошибку, например, при загрузке файла JAR во время выполнения с загрузчиком классов. – Elmue 23 February 2017 в 07:54

У меня была такая же проблема с разработкой Android с помощью студии Android. Предлагаемые решения являются общими и мне не помогают (по крайней мере, для меня). После нескольких часов исследований я нашел следующее решение и может помочь разработчикам Android, которые занимаются разработкой с помощью студии Android. измените настройку, как показано ниже. Настройки -> Сборка, выполнение, развертывание -> Мгновенный запуск -> отменить первый вариант.

С этим изменением я запускаюсь и запускаюсь. Надеюсь, это поможет моим друзьям-друзьям.

0
ответ дан 15 August 2018 в 16:55

Если вы используете более одного модуля, вы должны иметь

dexOptions { preDexLibraries = false }

в файле сборки.

0
ответ дан 15 August 2018 в 16:55

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

1. сначала создайте экземпляр класса в не основной теме и поймайте сбой.

2. затем вызовите метод поля класса в основном потоке, вы получите NoClassDefFoundError.

здесь - тестовый код:

public class MyClass{
       private static  Handler mHandler = new Handler();
       public static int num = 0;

}

в вашем onCrete-методе Основной активности, добавьте часть тестового кода:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //test code start
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                MyClass myClass = new MyClass();
            } catch (Throwable e) {
                e.printStackTrace();
            }
        }
    }).start();

    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    MyClass.num = 3;
    // end of test code
}

существует простой способ исправить его с помощью обработчика handlerThread для init:

private static Handler mHandler;
private static HandlerThread handlerThread = new HandlerThread("newthread");
static {
    handlerThread.start();
    mHandler = new Handler(handlerThread.getLooper(), mHandlerCB);
}
0
ответ дан 15 August 2018 в 16:55

1) Первый метод: я решил эту проблему. Удалив некоторые классы Dependencies, удалите их из ниже кода. Эта проблема, с которой я столкнулся в 4.2.2

compile 'com.google.android.gms:play-services-gcm:11.0.4'
compile 'com.google.android.gms:play-services:11.0.4'

, это лишние в моем коде, я удалил их [ ! d1]

 dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile files('libs/ypylibs.jar')
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.google.android.gms:play-services-gcm:11.0.4'
compile 'com.google.android.gms:play-services:11.0.4'
compile 'com.google.android.gms:play-services-ads:11.0.4'
compile 'com.dailymotion.dailymotion-sdk-android:sdk:0.1.12'
compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'commons-io:commons-io:1.3.2'
compile 'com.oguzdev:CircularFloatingActionMenu:1.0.2'
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'

} (2) Метод. Еще один способ решить эту проблему - создать новый класс Myapplication

public class MyApplication extends Application {

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

}

, затем добавить его в mainfest файла и в теге приложения

 <application
    android:allowBackup="true"
    android:name=".gps.navigation.map.MyApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"></application>

после этого в вашем основном действии удалите appcompactactivity, если это необходимо, и расширьте свой класс активностью, тогда он будет работать.

0
ответ дан 15 August 2018 в 16:55

, если вы получили одну из этих ошибок при компиляции и запуске:

NoClassDefFoundError Ошибка: не удалось найти или загрузить приветствие основного класса. Исключение в потоке «main» java.lang.NoClassDefFoundError: javaTest / test / hello (неправильное имя: test / hello) в java.lang.ClassLoader.defineClass1 (собственный метод) в java.lang.ClassLoader.defineClass (Неизвестный источник) в java.security.SecureClassLoader.defineClass (Неизвестный источник) в java.net.URLClassLoader .defineClass (Неизвестный источник) в java.net.URLClassLoader.access $ 100 (Неизвестный источник) в java.net.URLClassLoader $ 1.run (Неизвестный источник) в java.net.URLClassLoader $ 1.run (Неизвестный источник) в java.security. AccessController.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (Неизвестный источник) в java.lang.ClassLoader.loadClass (Неизвестный источник) в sun.misc.Launcher $ AppClassLoader.loadClass (Неизвестный источник) в java.lang. КлассLoader.loadClass (Неизвестный источник) на sun.launcher.LauncherHelper.checkAndLoadMain (Неизвестный источник)

------------------------ - - SOLUTIION -----------------------

SOLUTIION

On Compiling process use this command:

javac -d . [FileName.java]

To Run the class please use this command:

java [Package].[ClassName]
10
ответ дан 15 August 2018 в 16:55
java.lang.NoClassDefFoundError

указывает, что что-то было найдено в compiletime, но не во время выполнения. возможно, вам просто нужно добавить его в путь к классам.

8
ответ дан 15 August 2018 в 16:55

Я использую плагин FileSync для Eclipse, поэтому я могу отлаживать Tomcat & amp; Я получил NoClassFoundError, потому что я добавил запись синхронизации для каталога bin в рабочей области Eclipse => classes в metadata для Tomcat, но также не добавил синхронизацию папки для каталога extlib в Eclipse =>

C:\Users\Stuart\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps\myApp\WEB-INF\lib

0
ответ дан 15 August 2018 в 16:55

Это случается очень часто с моими модулями genymotion. Убедитесь, что на вашем диске имеется достаточный объем памяти, на котором установлен Genymotion.

0
ответ дан 15 August 2018 в 16:55
  • 1
    У вас есть какие-то ссылки на это? – Wai Ha Lee 12 January 2016 в 13:31
  • 2
    Nop, я просто исчерпал дисковое пространство регулярно, и, если я не освобожу хорошее количество + удалить / переустановить виртуальное устройство Genymotion, я продолжаю получать эту ошибку. – totteire 13 January 2016 в 14:56

Это случилось со мной в Android Studio.

Решение, которое сработало для меня: просто перезапустите студию.

0
ответ дан 15 August 2018 в 16:55

Я хотел бы исправить перспективы других на NoClassDefFoundError.

NoClassDefFoundError может возникать по нескольким причинам, таким как

ClassNotFoundException - .class не найден для этого ссылочный класс независимо от того, доступен ли он во время компиляции или нет (например, базовый / дочерний класс). Файл класса находится, но исключение возникает при инициализации статических переменных. Отображаемый файл класса. Исключение при инициализации статических блоков

. В исходном вопросе это был первый случай, который можно исправить, установив CLASSPATH в ссылочный класс jar файла или в папку пакета.

Что это означает, говоря «доступно во время компиляции»?

В коде используется ссылочный класс. Например: два класса, A и B (расширяет A). Если B ссылается непосредственно в коде, он доступен во время компиляции, то есть A a = новый B ();

Что это означает, говоря «не доступно во время компиляции»?

В коде используется ссылочный класс. Например: два класса, A и B (расширяет A). Если B ссылается непосредственно в коде, он доступен во время компиляции, то есть A a = новый B ();
100
ответ дан 15 August 2018 в 16:55
  • 1
    В моем случае я скомпилировал класс, и они перенесли его в каталог под названием app. Мне пришлось добавить строку с package app; и перекомпилировать, прежде чем я смогу переместить ее в приложение подкаталога. – taco 7 September 2014 в 23:07
  • 2
    Помимо выше перечисленных 3, ClassLoaders также могут вызывать такую ​​ошибку, которая в основном ClassNotFoundException, в этом классе сценария может присутствовать в пути к классам, но пытается загрузить из другого класса ClassLoader – Fahad 6 November 2015 в 17:47
  • 3
    2 и 3 являются специфичными для класса загрузчиков. Согласно javadoc, исключение предназначено только для причины 1. – Samuel 30 March 2016 в 02:44
  • 4
    @Samuel Оставьте о javadoc. пожалуйста, примите примерную программу, чтобы найти причины. – p1nkrock 16 June 2016 в 11:04
  • 5
    Я протестировал случай 2 и случай 3, это не NoClassDefFoundError, это ExceptionInInitializerError Case 2.Class файл, но Exception, поднятый при инициализации статических переменных. Файл Case 3.Class, Exception, поднятый при инициализации статических блоков – Michael 13 January 2017 в 07:52

Другие вопросы по тегам:

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