2013-12-12 3 views
7

Моя цель - запустить tomcat с помощью Ant. Вот мой сценарий: java.lang.NoClassDefFoundError при запуске tomcat 7 из Ant

<target name="tomcat-start"> 
    <java jar="${tomcat.home}/bin/bootstrap.jar" fork="true" dir="${tomcat.home}"> 
     <classpath> 
      <fileset dir="${tomcat.home}/bin"> 
       <include name="bootstrap.jar"/> 
       <include name="tomcat-juli.jar"/> 
      </fileset> 
     </classpath> 

     <jvmarg value="-Dcatalina.home=${tomcat.home}"/> 

    </java> 
</target> 

После выполнения скрипта я получаю этот выход:

java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory 
at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:60) 
Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory 
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:425) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
... 1 more 
Exception in thread "main" 
Java Result: 1 

Я проверил: org.apache.juli.logging.LogFactory класса представлен в tomcat-juli.jar!

Что может быть неправильным?

+0

Вы уверены, что запись в classpath указана в нужном месте? У вас есть jar, но вы не указали, где вы его храните, и Ant может не выглядеть в нужном каталоге. – chrylis

+0

@chrylis, я проверил пути к файлам, используя '', а также попробовал разные подходы к установке classpath в' 'ant task. Ничего не помогло. – ivstas

ответ

6

Для некоторых неизвестных странных причин tomcat не запускается в моей системе, даже когда я запускаю его из командной строки с помощью команды java -jar.

Однако я удался запустить его с помощьюjava -cp "bin\bootstrap.jar;bin\tomcat-juli.jar" org.apache.catalina.startup.Bootstrap команды, выполняемой из tomcat.home каталога.

Код в муравья, который делает то же самое:

<exec executable="java" dir="${tomcat.home}"> 
    <arg line="-cp bin\bootstrap.jar;bin\tomcat-juli.jar"/> 
    <arg value="org.apache.catalina.startup.Bootstrap"/> 
</exec> 
+0

У меня был точный SAME проблема, слава богу за ваш ответ. Я провел несколько часов, пытаясь найти разные вещи, найденные в google-ing. Ваше решение отлично работало. Я завернул '' в ''. –

1

Проверьте файл партии или скрипт оболочки tomcat startup.sh. Он содержит множество других файлов, кроме bootstrap.jar. проверьте setclasspath.sh. В нем все баночки устанавливаются в пути класса.

Другие более чистый подход должен был бы вызывать startup.sh скрипт из муравья. Это сделает все, что нужно для запуска Tomcat Server.

+0

Я использую tomcat 7 на окнах и содержит только 'bootstrap.jar',' tomcat-juli.jar', 'Tomcat7.exe' и' Tomcat7w.exe' в каталоге 'bin' – ivstas

3

Если вы хотите придерживаться с помощью Catalina, правильный метод заключается в добавлении \ setenv.bat с содержанием типа:

set CLASSPATH=D:\tomcat\apache-tomcat-7.0.42\bin\bootstrap.jar;D:\tomcat\apache-tomcat-7.0.42\bin\tomcat-juli.jar 

Я обнаружил, что, читая catalina.bat. Кто-то, возможно, захочет обновить это с помощью надлежащего документа Tomcat

Смежные вопросы