将gwt从2.1.1版升级到2.8.0后,我收到了错误消息
ec2-203-0-113-0.compute-1.amazonaws.com
我发现了其他一些包含类似消息的帖子,例如this或this,但情况似乎有所不同: 我不使用Maven或Ant,只使用纯IntelliJ,我没有引用任何Tomcat库,我不知道我们的应用程序中有任何JSP。
我通过调试发现,首先类加载器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
加载了包含接口com.google.gwt.dev.shell.jetty.Jettylauncher$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()
initialize
实例。
我根本不知道为什么需要初始化JspServlet,因为在我看到的应用程序中没有使用JSP,只有几个Servlet。并且似乎所有涉及此冲突的类都包含在单个jar org.eclipse.jetty.jsp.JettyJspServlet
中,因此我认为不可能通过类路径设置影响任何类加载行为。
知道如何解决这个问题吗?
答案 0 :(得分:0)
我最近升级到GWT 2.8.0时看到了这个错误。请尝试从项目中排除jetty-apache-Jsp相关的依赖项。
您可能也会看到其他与码头相关的问题,因此请确保您使用与GWT 2.8.0正在使用的完全相同的码头版本。
我现在在手机上,无法添加更多细节,但我希望这可以成为一个有用的方向。如果您仍然发现问题,请添加您的评论,然后我会在我的笔记本电脑上查看并更新答案。
答案 1 :(得分:0)
在添加gwt-test-utils:0.53
依赖项(使用GWT 2.8.1)
答案 2 :(得分:0)
我也从gwt从2.4版本升级到2.8.2遇到了这个错误。
Jake W的回答帮助了我。
为解决这个问题,我在项目上运行了一个Maven依赖树,以找出引用了Jetty的apache-jsp的东西。
要运行依赖关系树,我在Eclipse中创建了一个新的运行配置-> maven build->目标为“ dependency:tree -Doutput = / dependency / file.txt”。一旦运行,控制台输出将显示将输出保存到何处。它应该与-Doutput选项引用的位置相同。
在输出文件中查找如下内容:
-org.eclipse.jetty:apache-jsp: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>
这对我有用。谢谢:)
答案 3 :(得分:0)
我正在使用 ant 并且发现的所有关于此错误的信息表明类路径中有 2 个版本的 Juli Logging,但每次搜索都只找到 gwt-dev.jar。生产版本运行良好,但开发模式不需要 gwt-dev.jar。
部分构建过程将 jars 从本地 lib 目录复制到 war/WEB-INF/lib 以打包到 war。 ant 脚本指向用于调试的本地 lib 目录,而不是用于 war 文件的目录。尽管战争位置没有作为类路径列在 ant 文件中,但它仍在加载它。
最终,gwt-dev.jar 与自身的复制版本冲突。