从版本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:Usersxxx.IntelliJIdea2017.1systemgwtxxx.97baa614xx.fdf824a8runwww}: 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.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
org.eclipse.jetty.jsp.JettyJspServlet
实例。
我不知道为什么根本需要初始化Jspservlet,因为据我所知,在应用程序中没有使用JSP。似乎所有涉及的冲突中的所有类都包含在单个JAR gwt-dev.jar
中,因此我认为没有可能通过类路径设置影响任何类加载行为。
知道我如何解决这个问题?
我也从GWT从2.4版升级到2.8.2。
杰克·W的答案对我有帮助。
为了解决这个问题,我在项目上跑了一条Maven依赖树,以弄清楚什么是引用Jetty的Apache-JSP。
要运行依赖项树,在Eclipse中,我创建了一个新的运行配置 -> maven构建 ->带有"依赖关系:tree -doutput =/distionency/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>
这对我有用。谢谢:)
我最近升级到GWT 2.8.0时看到了这个错误。请尝试将Jetty-Apache-JSP与项目相关的依赖项排除在您的项目中。
您也可能会看到其他与码头相关的问题,因此请确保您使用的是与GWT 2.8.0完全相同的码头版本。
我目前正在移动,无法添加更多详细信息,但我希望这是一个有用的方向。如果您仍然看到问题,请添加您的评论,然后在笔记本电脑上时,我会查看并更新答案。
我在添加 gwt-test-utils:0.53
依赖项(使用GWT 2.8.1(
我正在使用ANT,并且有关此错误的所有信息,表明Class Path中有2个版本的Juli记录版本,但是每个搜索都只有GWT-DEV.JAR。生产构建工作正常,但是开发模式不需要GWT-DEV.JAR。
构建过程的一部分使罐子从当地的LIB目录复制到战争/Web-Inf/lib,以打包到战争中。ANT脚本指向本地LIB目录进行调试,而不是用于战争文件的LIB目录。尽管战争位置未在ANT文件中列为类路径,但仍在加载它。
最终,gwt-dev.jar与自身的复制版本冲突。