使用Ant启动Tomcat 7时出现java.lang.NoClassDefFoundError错误

7

我的目标是使用Ant启动Tomcat。以下是我的脚本:

<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中!可能出了什么问题?

你确定classpath的条目指向了正确的位置吗?你列出了jar文件,但是你没有展示你将它存储在哪里,而且Ant可能没有在正确的目录中查找它。 - chrylis -cautiouslyoptimistic-
@chrylis,我已经使用<echo>检查了文件路径,并尝试了在<java> ant任务中设置classpath的不同方法,但都没有帮助。 - ivstas
3个回答

6

由于某些奇怪的原因,即使我使用java -jar命令从命令行启动Tomcat,系统中的Tomcat也无法启动。

然而,我成功地使用java -cp "bin\bootstrap.jar;bin\tomcat-juli.jar" org.apache.catalina.startup.Bootstrap命令从tomcat.home目录启动它。

在Ant中执行相同操作的代码:

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

我曾经遇到完全相同的问题,谢天谢地有了你的回复。我花了几个小时尝试通过谷歌搜索找到的不同方法。你的解决方案完美地解决了我的问题。我将<exec .../>包装在<target.../>中。 - Chris R

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文档来更新此内容。

1
请查看Tomcat的startup.sh批处理文件或shell脚本。除了bootstrap.jar之外,它还有很多其他文件。检查setclasspath.sh。它设置了类路径中的所有jar包。
另一个更简洁的方法是从Ant中调用startup.sh脚本。这将为启动Tomcat服务器所需的一切做好准备。

我在Windows上使用Tomcat 7,bin目录下只包含bootstrap.jartomcat-juli.jarTomcat7.exeTomcat7w.exe文件。 - ivstas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接