【问题标题】:Eclipse Tomcat java.lang.NoClassDefFoundError LogFactoryEclipse Tomcat java.lang.NoClassDefFoundError LogFactory
【发布时间】:2014-07-11 16:51:37
【问题描述】:

过去几天我一直在努力解决这个错误 java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory 下面是控制台输出。

我正在使用最新版本的 Tomcat 和 Eclipse。编辑 - 我尝试卸载 WAMP 并安装最新版本的 MYSQL 社区服务器,但无济于事;我仍然遇到同样的错误。

注意 - 我已经咨询过相同问题的主题,但建议的解决方案都不适合我。例如:java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory

我尝试通过Eclipse中的服务器类路径配置将tomcat-juli.jar添加为外部jar,更新系统环境变量Classpath,将tomcat-juli.jar文件复制到JRE的lib文件夹中,然后打开文件并确认 LogFactory 类确实存在。

编辑 - 另外,我可以运行 Tomcat 服务器并通过运行 startup.bat 在浏览器中查看默认页面。非常感谢任何帮助。

Jul 11, 2014 12:38:13 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.30 using APR version 1.4.8.
Jul 11, 2014 12:38:13 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Jul 11, 2014 12:38:13 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server: ' did not find a matching property.
Jul 11, 2014 12:38:14 PM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.1g 7 Apr 2014)
Jul 11, 2014 12:38:15 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-8080"]
Jul 11, 2014 12:38:15 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-apr-8009"]
Jul 11, 2014 12:38:15 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1657 ms
Jul 11, 2014 12:38:15 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Jul 11, 2014 12:38:15 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.0.9
Jul 11, 2014 12:38:15 PM org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [127] milliseconds.
Jul 11, 2014 12:38:15 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ ]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:868)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ ]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 6 more
Caused by: java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.<clinit>(BasicDataSource.java:70)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:193)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.getObjectInstance(BasicDataSourceFactory.java:182)
    at org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:94)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:841)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:829)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
    at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1084)
    at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:663)
    at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:256)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5083)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 22 more

Jul 11, 2014 12:38:15 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:752)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:924)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:868)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more

Jul 11, 2014 12:38:15 PM org.apache.catalina.startup.Catalina start
SEVERE: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:752)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:924)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 11 more

Jul 11, 2014 12:38:15 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-apr-8080"]
Jul 11, 2014 12:38:15 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-apr-8009"]
Jul 11, 2014 12:38:15 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Jul 11, 2014 12:38:15 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-apr-8080"]
Jul 11, 2014 12:38:15 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["ajp-apr-8009"]
Jul 11, 2014 12:38:15 PM org.apache.catalina.deploy.NamingResourcesImpl cleanUp
WARNING: Failed to retrieve JNDI naming context for container [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ ]] so no cleanup was performed for that container
javax.naming.NamingException: No naming context bound to this class loader
    at org.apache.naming.ContextBindings.getClassLoader(ContextBindings.java:258)
    at org.apache.catalina.deploy.NamingResourcesImpl.cleanUp(NamingResourcesImpl.java:992)
    at org.apache.catalina.deploy.NamingResourcesImpl.stopInternal(NamingResourcesImpl.java:975)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5415)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:272)
    at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:840)
    at org.apache.catalina.core.ContainerBase.destroyInternal(ContainerBase.java:1013)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
    at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:840)
    at org.apache.catalina.core.ContainerBase.destroyInternal(ContainerBase.java:1013)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
    at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:603)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
    at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:842)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

【问题讨论】:

  • 'file into the lib folder of the JRE...'不正确,你必须把它放到$TOMCAT_HOME\lib文件夹。 $TOMCAT_HOME 是你的 tomcat 安装路径。
  • 它也位于 $TOMCAT_HOME\lib 文件夹中
  • 你确定你在类路径中有这个tomcat-juli.jar
  • 是的,我通过 Eclipse 中的 Tomcat 服务器配置将它作为外部 jar 添加到 Classpath 并添加到 System > Environment Variables 下的类路径

标签: java eclipse tomcat


【解决方案1】:
  • 确保你的 tomcat 启动配置中有正确的 juli jar 类路径。

  • 另外,您的 DBCP jar 位于何处?试着把juli jar放在同一个 位置

JDK 1.8 在“jre\lib\ext”中有以下 JAR。将所有其他 jar 移至指定认可的 tomcat。

access-bridge-64.jar
cldrdata.jar
dnsns.jar
jaccess.jar
jfxrt.jar
localedata.jar
meta-index
nashorn.jar
sunec.jar
sunjce_provider.jar
sunmscapi.jar
sunpkcs11.jar
zipfs.jar

【讨论】:

  • 我只是仔细检查了一下,tomcat 启动配置确实有正确的 tomcat-juli.jar 类路径。我的 tomcat-dbcp.jar 文件位于 lib 文件夹中。我也尝试将 tomcat-juli.jar 文件移动到 lib 文件夹中(更改了服务器配置中的类路径并更新了系统环境变量(关闭生效),但仍然收到相同的错误。
  • 尝试在eclipse中删除服务器条目并重新创建,以便eclipse中的新服务器配置可以从lib文件夹中获取juli
  • 按照@Shailendra 的建议使用 -verbose:class 后,我发现 tomcat-dbcp.jar 是从 C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext 加载的,所以我将 tomcat-juli.jar 也复制到此文件夹中,并更新服务器配置外部 Jar 条目以及系统环境变量(关闭生效)。这样做之后,它起作用了!谢谢!
  • 为什么C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext 目录下有tomcat-dbcp.jar?
  • 我不知道。我正在按照团队中其他人的指示将设置和代码传递给我,以进行最终的企业部署。我相当肯定它有或曾经有一个特定的目的,尽管它最初是这样设置的。
【解决方案2】:

这绝对可以帮助您找到原因。将以下内容附加到您的 tomcat jvm 启动参数

-verbose:class

如果您正在运行独立的 Tomcat(通过运行 startup.bat),您可以在 catalina.bat 中添加以下行

set JAVA_OPTS=%JAVA_OPTS% -verbose:class

它的作用是在控制台/日志上打印 - 从 java 引导程序开始加载它的类和 jar 文件位置,直到服务器引导程序和您的应用程序类。简而言之,成功运行应用程序所需的所有类。这些信息很冗长,但对于确定从中挑选类的确切 jar 或者即使没有挑选 jar 也非常有用。如果您将信息输出到文件中,然后使用文本编辑器进行文本搜索,将会非常有帮助。

在我的 Tomcat 安装中,它会显示类似这样的信息

[Loaded java.lang.Void from C:\Program Files\Java\jdk1.7.0_51\jre\lib\rt.jar]
[Loaded org.apache.juli.logging.LogFactory from file:/D:/apache-tomcat-7.0.50/bin/tomcat-juli.jar]
[Loaded org.apache.juli.logging.Log from file:/D:/apache-tomcat-7.0.50/bin/tomcat-juli.jar]
[Loaded org.apache.juli.logging.DirectJDKLog from file:/D:/apache-tomcat-7.0.50/bin/tomcat-juli.jar]
[Loaded java.util.logging.Logger from C:\Program Files\Java\jdk1.7.0_51\jre\lib\rt.jar]
[Loaded java.util.logging.Handler from C:\Program Files\Java\jdk1.7.0_51\jre\lib\rt.jar]

你可以看到org.apache.juli.logging.LogFactory是从file:/D:/apache-tomcat-7.0.50/bin/tomcat-juli.jar加载的

【讨论】:

  • 如何将其附加到 tomcat jvm 启动参数?
  • 我还在 catalina.bat 中添加了 "call startup.bat >textfile.txt 2>&1" 在输出 textfile.txt 它说:进程无法访问该文件,因为它正在被另一个过程。使用 CATALINA_BASE:“C:\Program Files\apache-tomcat-8.0.9” 使用 CATALINA_HOME:“C:\Program Files\apache-tomcat-8.0.9” 使用 CATALINA_TMPDIR:“C:\Program Files\apache-tomcat- 8.0.9\temp" 使用 JRE_HOME:"C:\Program Files\Java\jdk1.8.0_05" 使用 CLASSPATH:"C:\Program Files\apache-tomcat-8.0.9\bin\bootstrap.jar;C:\程序文件\apache-tomcat-8.0.9\bin\tomcat-juli.jar"
  • Go to startup.bat..modify call "%EXECUTABLE%" start %CMD_LINE_ARGS% to call "%EXECUTABLE%" run %CMD_LINE_ARG...这样tomcat在单个命令窗口中运行。然后通过转到 Tomcat 安装的 bin 目录并在命令提示符处键入 startup.bat > textfile.txt 运行 tomcat
  • 好的,在文本文件中它说 [Loaded org.apache.juli.logging.LogFactory from file:/C:/Program%20Files/apache-tomcat-8.0.9/bin/tomcat-juli .jar] 我从未遇到过通过 startup.bat 运行 Tomcat 的任何问题 该问题仅在我尝试通过 Eclipse 运行 Tomcat 时发生。有什么想法吗?
  • 这意味着图书馆在独立的tomcat中被正确地拾取。现在,您可以对从 Eclipse 内部运行的 Tomcat 服务器重复相同的步骤。双击 Server -> Tomcat -> Open Launch Configuration ->Argument 并添加 -verbose:class 并启动服务器。您可以以类似的方式调查 Eclipse 控制台。我猜你的 Open launch Configuration -> Classpath 不包含 tomcat-juli.jar 的条目
【解决方案3】:

虽然之前发布的答案解决了问题,但它是一个肮脏的解决方案。

按照以下链接中的说明正确配置 DBCP jar。还将任何其他 jar 移出到 $CATALINA_HOME/endorsed 目录

JNDI Datasource HOW-TO

The Tomcat JDBC Connection Pool

【讨论】:

    【解决方案4】:

    这是清单:-

    1. tomcat-juli.jar 的相同副本存在于 JRE\lib、TOMCAT\lib 和 eclipse 的启动配置中,以确保使用的一个包含 LogFactory。
    2. 您正在使用 Eclipse 的内置服务器配置工具而不是插件。
    3. 在您使用的 Tomcat 版本中可能是 bug

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 2016-01-25
      • 1970-01-01
      • 2019-01-23
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      相关资源
      最近更新 更多