我一直在搜索,但找不到答案。我刚刚升级了STS(从3.2开始),所以我可以试用Tomcat 8(从7.0.53开始)。我有STS 3.6.2和Tomcat 8.0.15。添加TC8服务器并对其进行配置后,它拒绝启动,出现以下根错误:
java.lang.ClassNotFoundException: org.apache.juli.WebappProperties
所以我读了很多,发现this guide从硬编码的公共区域切换 - 通过Juli登录到Log4J并且没有任何运气跟着它到了字母。相关摘录:
Apache Tomcat的内部日志记录使用JULI,一个打包的重命名 Apache Commons Log的一个分支,默认情况下是硬编码使用的 java.util.logging框架。这确保了Tomcat的内部 日志记录和任何Web应用程序日志记录都将保持独立 如果Web应用程序使用Apache Commons Logging。
要将Tomcat配置为使用备用日志记录框架进行内部日志记录,必须替换JULI强制实施 是硬编码使用java.util.logging与JULI实现 保留完整的Commons Logging发现机制。这样的 实现作为附加组件提供。说明如何 配置Tomcat以使用Log4j框架进行内部日志记录 可能会在下面找到。
我还从这里找到了this answer(对于另一个问题)和this question,其中后者似乎有一个几乎相同的问题而没有任何解决方案。
我在Tomcat的bin / lib文件夹中搜索了所有JAR,但没有找到这样的类(包括tomcat-juli.jar
和tomcat-juli-adapters.jar
的各种版本)。除了之前链接的Tomcat 8 Logging指南之外,我几乎没有在这个类/接口的互联网上找到任何参考。所以,问题是:为什么Tomcat正在寻找这个类?
再次从链接指南中,这里是它所说的:
如果使用实现的类加载器
org.apache.juli.WebappProperties
接口(Tomcat的Web应用程序 类加载器确实)然后执行属性替换${classloader.webappName}
,${classloader.hostName}
和${classloader.serviceName}
被Web应用程序替换 名称,主机名和服务名称。
为什么我的Tomcat类加载器实际上没有实现,或者为什么不找到它?
答案 0 :(得分:1)
该接口位于tomcat-juli.jar中,而Tomcat的Web应用程序类加载器实现了该接口。
您无需切换到基于log4j的日志记录来解决此问题。
tomcat-juli.jar(应该在bin目录中)似乎在某个类路径中丢失了。不确定这是否是需要调整Eclipse集成Apache Tomcat的东西的配置错误。我建议您从ASF开始安装干净的Tomcat 8.0.15,确保从命令行运行,然后尝试将其与STS / Eclipse集成。
答案 1 :(得分:1)
我们的Ant Tomcat配置过程将Tomcat 7的tomcat-juli.jar复制到Tomcat 8,导致问题。
从Apache的Tomcat Extras部分获取Tomcat 8的正确tomcat-juli.jar解决了这个问题。
答案 2 :(得分:1)
检查您正在使用的Tomcat上的版本。我们现在默认Tomcat 8.5.4或更高版本。如果您想使用旧版本,则需要添加tomcat-juli,如发行说明中所述