Я пытаюсь выполнить задачу 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
С этой линии:
[java] Could not find the main class: . Program will exit.
похоже, что ваш звонок на java.exe находит .
, где он ожидает имя класса. Возможно, вы пытаетесь указать classpath в командной строке, но пренебрегаете предисловием к этому с флагом -cp
или -classpath
.
Это может быть ложная ошибка, которая на самом деле не связана с отсутствием класса в пути к классам. Если вы используете Tomcat, это может быть связано с отсутствием файлов conf в $ CATALINA_BASE / conf
. Это также может быть неверно настроенная установка ant, пожалуйста, проверьте переменные окружения JAVA_HOME и ANT_HOME или попробуйте другую установку ant.
Программа запуска 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>
Это было бы чрезвычайно полезно, чтобы вы могли ошибиться.
Надеюсь, это поможет,
Эрнани
Скорее всего, ваш путь к классам настроен неправильно.
Как минимум, CLASSPATH должен включать:
(из ant manual )
Также кажется, что вы перезапускаете ant в текущем каталоге (выполняя тот же build.xml). Возможно, вы захотите установить свойство "dir".
Похоже, задача 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 ?
В случае сомнений вызовите ant -v и просмотрите все объявления ваших переменных и всю командную строку, отправленную на Java.
Некоторые величины, подобные траектории, оцениваются нетерпеливо, в то время как другие оцениваются лениво. У меня было много проблем, когда я использовал один из первых, когда мой Ant-скрипт намеревался создать банку, которая будет использоваться более поздней задачей. Затем, когда я вызвал вызов, он уже удалил мою банку из пути к классам.
Если бы мне пришлось сделать безумное предположение, я бы поспорил, что ваша командная строка выглядела примерно так:
java ... -classpath org.apache.tools.ant.launch.Launcher
вместо
java ... -classpath foo.jar; bar.jar org.apache.tools.ant.launch.Launcher
, как вы и ожидали