【问题标题】:java.lang.NoClassDefFoundError while starting tomcat 7 from Ant从 Ant 启动 tomcat 7 时出现 java.lang.NoClassDefFoundError
【发布时间】:2013-12-30 10:52:01
【问题描述】:

我的目标是使用 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

可能出了什么问题?

【问题讨论】:

  • 您确定类路径条目指向正确的位置吗?您列出了 jar,但您没有显示存储它的位置,并且 Ant 可能没有在正确的目录中查找它。
  • @chrylis,我已经使用&lt;echo&gt; 检查了文件路径,并且还尝试了在&lt;java&gt; ant 任务中设置类路径的不同方法。没有任何帮助。

标签: java tomcat ant


【解决方案1】:

由于一些未知的奇怪原因,即使我使用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>

【讨论】:

  • 我遇到了完全相同的问题,感谢您的回复。我花了几个小时尝试通过 google-ing 找到的不同的东西。您的解决方案完美运行。我将&lt;exec .../&gt; 包裹在&lt;target.../&gt; 中。
【解决方案2】:

如果你想坚持使用 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 文档更新它

【讨论】:

    【解决方案3】:

    查看startup.sh 批处理文件或tomcat 的shell 脚本。除了bootstrap.jar,它还有很多其他文件。检查setclasspath.sh。它在类路径中设置了所有 jar。

    其他更干净的方法是从 ant 调用 startup.sh 脚本。这将完成启动 Tomcat 服务器所需的一切。

    【讨论】:

    • 我在windows上使用tomcat 7,它只包含bin目录中的bootstrap.jartomcat-juli.jarTomcat7.exeTomcat7w.exe
    猜你喜欢
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2014-11-05
    相关资源
    最近更新 更多