NoClassDefFoundError без любого имени класса

Я пытаюсь выполнить задачу Java от муравья. Я пытаюсь работать "org.apache.tools.ant.launch. Средство запуска" класс. Я продолжаю получать "NoClassDefFoundError" без любого определяемого имени класса. Я также добираюсь, "ClassNotFoundException" наряду с тем отображением сообщения "Не удалось найти основной класс:. программа выйдет". Вот отрывок ошибки

 [java] Exception in thread "main" java.lang.NoClassDefFoundError: 
 [java] Caused by: java.lang.ClassNotFoundException: 
 [java]  at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
 [java]  at java.security.AccessController.doPrivileged(Native Method)
 [java]  at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 [java]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
 [java]  at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
 [java] Could not find the main class: .  Program will exit.
 [java] Java Result: 1

Теперь я пытаюсь выполнить класс муравья от банки муравья и меня specifiy путь к классу, где этот файл класса находится с помощью атрибута "classpathref", однако я все еще получаю это сообщение. Я проверил банку муравья для проверки Декларации, и "основной" класс определяется правильно (это "org.apache.tools.ant.launch. Средство запуска"). Я исчерпал все свои ресурсы. Помогите!!!

PS: Моей средой является Eclipse на Ubuntu 9.04

10
задан Seagull 29 January 2010 в 00:13
поделиться

6 ответов

С этой линии:

[java] Could not find the main class: .  Program will exit.

похоже, что ваш звонок на java.exe находит . , где он ожидает имя класса. Возможно, вы пытаетесь указать classpath в командной строке, но пренебрегаете предисловием к этому с флагом -cp или -classpath.

0
ответ дан 3 December 2019 в 23:12
поделиться

Это может быть ложная ошибка, которая на самом деле не связана с отсутствием класса в пути к классам. Если вы используете Tomcat, это может быть связано с отсутствием файлов conf в $ CATALINA_BASE / conf

. Это также может быть неверно настроенная установка ant, пожалуйста, проверьте переменные окружения JAVA_HOME и ANT_HOME или попробуйте другую установку ant.

1
ответ дан 3 December 2019 в 23:12
поделиться

Программа запуска Ant ожидает следующих параметров

java -Dant.home=c:\ant org.apache.tools.ant.launch.Launcher [options] [target]

Боюсь, что мы не сможем ответить вам, если вы не вставите весь файл build.xml.

Просто попробуйте привести свой полный образец, как показано ниже:

   <java
            classname="org.apache.tools.ant.launch.Launcher"
            fork="true"
            failonerror="true"
            dir="${sub.builddir}"
            timeout="4000000"
            taskname="startAnt"
    >
        <classpath>
            <pathelement location="${ant.home}/lib/ant-launcher.jar"/>
        </classpath>
        <arg value="-buildfile"/>
        <arg file="${sub.buildfile}"/>
        <arg value="-Dthis=this"/>
        <arg value="-Dthat=that"/>
        <arg value="-Dbasedir=${sub.builddir}"/>
        <arg value="-Dthe.other=the.other"/>
        <arg value="${sub.target}"/>
 </java>

Это было бы чрезвычайно полезно, чтобы вы могли ошибиться.

Надеюсь, это поможет,

Эрнани

1
ответ дан 3 December 2019 в 23:12
поделиться

Скорее всего, ваш путь к классам настроен неправильно.

Как минимум, CLASSPATH должен включать:

  • ant.jar и ant-launcher.jar
  • jar-файлы / классы для вашего XML-парсера
  • необходимые JDK-файлы jar / zip

(из ant manual )

Также кажется, что вы перезапускаете ant в текущем каталоге (выполняя тот же build.xml). Возможно, вы захотите установить свойство "dir".

5
ответ дан 3 December 2019 в 23:12
поделиться

Похоже, задача Ant пытается запустить Java, но каким-то образом передает пустую строку в JVM в качестве имени класса для запуска. Я могу получить ту же трассировку стека, если я запустил JVM напрямую с пустой строкой в ​​кавычках:

C:\>java ""
Exception in thread "main" java.lang.NoClassDefFoundError:
Caused by: java.lang.ClassNotFoundException:
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: .  Program will exit.

(Это в Windows, но я не думаю, что это имеет большое значение.)

Я могу только предложить следующие действия. о комментарии Александра Погребняка к ответу АКФ. Возможно, веб-тест .В свойстве lib есть пробелы?

Кроме того, есть ли веская причина для вызова ant напрямую через java вместо использования задачи ant ?

4
ответ дан 3 December 2019 в 23:12
поделиться

В случае сомнений вызовите ant -v и просмотрите все объявления ваших переменных и всю командную строку, отправленную на Java.

Некоторые величины, подобные траектории, оцениваются нетерпеливо, в то время как другие оцениваются лениво. У меня было много проблем, когда я использовал один из первых, когда мой Ant-скрипт намеревался создать банку, которая будет использоваться более поздней задачей. Затем, когда я вызвал вызов, он уже удалил мою банку из пути к классам.

Если бы мне пришлось сделать безумное предположение, я бы поспорил, что ваша командная строка выглядела примерно так:

java ... -classpath org.apache.tools.ant.launch.Launcher

вместо

java ... -classpath foo.jar; bar.jar org.apache.tools.ant.launch.Launcher

, как вы и ожидали

0
ответ дан 3 December 2019 в 23:12
поделиться
Другие вопросы по тегам:

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