2

我刚刚开始使用 tomcat 并且运行良好,但是从昨天开始我在启动它时遇到了麻烦。我也重新安装了它。我在其日志文件中得到的错误报告发布在下面.....

块引用

   2013-01-01 19:10:21 Commons Daemon procrun stderr initialized
   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(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at sun.misc.Launcher$ExtClassLoader.findClass(Unknown Source)
     at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
   ... 1 more

线程“主”中的异常

4

1 回答 1

4

实际上我将库从tomcat复制到jdk的ext文件夹中..

你不应该那样做。它会导致类加载灾难。您不应该移动/复制/更改 servletcontainer 自己的库。/lib您应该不碰它们,并且永远不要在 JRE/JDK或/lib/ext文件夹中丢弃与 Java SE 没有任何关系的任意 JAR 。清理那些文件夹。

在相关的说明中,即使您似乎没有这样做,您也不应该将特定于 servletcontainer 的 JAR 文件放在 webapp 的/WEB-INF/lib文件夹中。

这是一个常见的初学者错误,以规避 JSP/Servlet API 上的编译错误或“简化”编译而不摆弄%CLASSPATH%or -cp/ -classpath。如果您使用的是 Eclipse/Netbeans 之类的 IDE,那么您实际上应该在 IDE 中注册了服务器运行时并将其与 Web 项目关联为“目标运行时”。如果您使用的是 plain javac,那么您实际上应该使用-cp/-classpath参数来指定用于编译的特定于 servletcontainer 的 JAR 文件。为了进一步抽象化以避免重新输入整个类路径值,您应该将命令放在可重用.bat.cmd文件中,或者只是拥有像 Maven、Gradle 或什至像 Eclipse/Netbeans 这样的 IDE 这样的体面的构建工具。

也可以看看:

于 2013-01-02T16:10:25.437 回答