Java 将gwt从2.1.1升级到2.8.0:ServiceConfigurationError:org.apache.juli.logging.Log:Provider org.eclipse.jetty.apache.jsp.JuliLog不是子类型
在将gwt从版本2.1.1升级到2.8.0之后,我收到了错误消息Java 将gwt从2.1.1升级到2.8.0:ServiceConfigurationError:org.apache.juli.logging.Log:Provider org.eclipse.jetty.apache.jsp.JuliLog不是子类型,java,gwt,classloader,Java,Gwt,Classloader,在将gwt从版本2.1.1升级到2.8.0之后,我收到了错误消息 2017-04-20 12:59:19.551:WARN:oejuc.AbstractLifeCycle:main: FAILED c.g.g.d.s.j.WebAppContextWithReload@341fbaf1{/,file:/C:/Users/xxx/.IntelliJIdea2017.1/system/gwt/xxx.97baa614/xxx.fdf824a8/run/www/,STARTING}{C:\Users\
2017-04-20 12:59:19.551:WARN:oejuc.AbstractLifeCycle:main: FAILED c.g.g.d.s.j.WebAppContextWithReload@341fbaf1{/,file:/C:/Users/xxx/.IntelliJIdea2017.1/system/gwt/xxx.97baa614/xxx.fdf824a8/run/www/,STARTING}{C:\Users\xxx\.IntelliJIdea2017.1\system\gwt\xxx.97baa614\xx.fdf824a8\run\www}: java.util.ServiceConfigurationError: org.apache.juli.logging.Log: Provider org.eclipse.jetty.apache.jsp.JuliLog not a subtype
java.util.ServiceConfigurationError: org.apache.juli.logging.Log: Provider org.eclipse.jetty.apache.jsp.JuliLog not a subtype
我发现其他一些帖子也有类似的信息,比如或,但情况似乎有所不同:
我不使用Maven或Ant,只使用纯IntelliJ,我没有参考任何Tomcat库,并且我不知道我们的应用程序中有任何JSP
我通过调试发现,第一个类加载器com.google.gwt.dev.shell.jetty.JettyLancher$WebAppContextWithReload$WebAppClassLoaderExtension
加载类org.eclipse.jetty.apache.jsp.JuliLog
包括接口org.apache.juli.logging.Log
然后,稍后的接口org.apache.juli.logging.Log
由sun.misc.Launcher$AppClassLoader加载,由
org.eclipse.jetty.webapp.WebAppContext.startContext()
它调用
org.eclipse.jetty.jsp.JettyJspServlet
例如
我完全不知道为什么需要初始化JspServlet,因为应用程序中没有使用jsp,据我所知,只有几个servlet。而且似乎所有参与冲突的类都包含在单个jargwt-dev.jar
中,因此我认为不可能通过类路径设置影响任何类加载行为
知道如何解决这个问题吗?最近升级到GWT 2.8.0时,我看到了这个错误。请尝试从项目中排除jetty apache Jsp相关依赖项
您可能还会看到其他与jetty相关的问题,因此也请确保您使用的jetty版本与GWT 2.8.0使用的版本完全相同
我现在在手机上,无法添加更多细节,但我希望这能成为一个有用的方向。如果您仍然看到问题,请添加您的评论,然后我会在我的笔记本电脑上查看并更新答案。在添加gwt test utils:0.53
dependency(使用gwt 2.8.1)我从gwt版本2.4升级到2.8.2时也遇到此错误
杰克的回答帮助了我
为了解决这个问题,我在我的项目上运行了一个maven依赖关系树,以找出什么引用了jetty的ApacheJSP
为了运行依赖关系树,我在Eclipse中创建了一个新的运行配置->maven build->,目标是“dependency:tree-Doutput=/dependency/file.txt”。一旦运行,控制台输出将显示保存输出的位置。它应该与使用-Doutput选项引用的位置相同
在输出文件中查找类似的内容:
-jetty:apachejsp:jar:9.2.14.v20151106:compile
然后往树上看,看看它是从哪里来的。就我而言,它来自于:
+- com.google.gwt:gwt-dev:jar:2.8.2:compile
+- net.sourceforge.htmlunit:htmlunit:jar:2.19:compile
\- org.eclipse.jetty:apache-jsp:jar:9.2.14.v20151106:compile
一旦知道了它的来源,(假设您使用的是maven),就可以在pom.xml文件中为它添加一个排除项:
</dependencies>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
<version>${gwt.version}</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>apache-jsp</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
com.google.gwt
gwt开发
${gwt.version}
org.eclipse.jetty
apache jsp
这对我有用。谢谢:)我正在使用ant,找到的所有关于此错误的信息都表明类路径中有两个版本的Juli日志,但每次搜索都只找到了gwt-dev.jar。生产构建工作正常,但开发模式不需要gwt-dev.jar
构建过程的一部分是将JAR从本地lib目录复制到war/WEB-INF/lib以打包到war中。ant脚本指向用于调试的本地lib目录,而不是用于war文件的目录。尽管war位置没有作为类路径列在ant文件中,但它仍在加载它
最终,gwt-dev.jar与复制的版本本身发生了冲突。在我们的项目中,我根本没有发现任何与Jetty相关的依赖关系。然而,我现在将休假几周,一些同事将接管这项任务。我们决定将我们的项目减少到最小的项目,并重新尝试迁移。我尝试从GWT 2.1.1升级到2.6.1以减少更改量,但遇到了另一个异常,它似乎与GIN/Guice有关。问题依赖项不是来自您的直接依赖项,它可能是一个可传递的依赖项。如果您使用的是gradle,您可以轻松地将其从所有项目中排除。