我一直在尝试使用内置的Jetty服务器支持以及最新的Jetty版本(9.2.10.v20150310)在IntelliJ上运行Jetty。 但是,当我尝试部署我的战争时,它会失败并抛出异常:
警告:未找到模块[protonego-impl / alpn-1.8.0_45] 警告:**无法继续,必需的依赖项丢失。 [protonego-IMPL / alpn-1.8.0_45] 警告:**根据配置,由于缺少启用的模块依赖性,Jetty无法启动。 警告:**这可能是由于传递依赖性类似于npn上的spdy,它基于使用的JDK进行解析。 缺少引用的依赖:protonego-impl / alpn-1.8.0_45
这个模块版本确实不存在于jetty文件夹中(在protonego-impl文件夹中,版本以alpn-1.8.0_31结尾),我似乎无法在任何地方找到它下载..有没有人来过跨越这个例外?
答案 0 :(得分:1)
Jetty 9.2.10的发布早于Java 1.8.0u45的发布
为了支持HTTP / 2(和SPDY),需要Java Classlib级别的ALPN支持。这是通过Jetty生成的-Xbootclasspath
jar来实现的,它在Java本身内补充SSL以支持ALPN。
这意味着Jetty为Java的SSL维护了一组修改,这意味着Jetty还必须维护Java版本到ALPN lib版本的映射。
https://www.eclipse.org/jetty/documentation/current/alpn-chapter.html#alpn-versions
从那里你可以看到Java 1.8u45可以使用ALPN lib 8.1.3.v20150130(与Java 1.8u31使用的ALPN版本相同)
显然Jetty 9.2.10无法附带此映射,因为这需要时间机器来完成。
如何在您的计算机上更正此问题:
首先,所有这些更改都是针对${jetty.base}
目录中的实例配置(您确实有$ {jetty.base}目录,而不是修改${jetty.home}
,对吗?)< / p>
${jetty.base}/modules/protonego-impl
目录${jetty.home}/modules/protonego-impl/alpn-1.8.0_31.mod
复制(并重命名)为${jetty.base}/modules/protonego-impl/alpn-1.8.0_45.mod
${jetty.base}
目录启动您的Jetty实例。您已完成您的实例现在能够使用Java 1.8u45运行ALPN lib 8.1.3.v20150130
答案 1 :(得分:0)
您似乎正在使用JDK版本,而Jetty版本并未完全支持该版本。 事实上,如果您查看2015年4月15日的this Jetty commit,则说明
更新了JDK 7u79,7u80和8u45的ALPN和NPN版本。
它可能会插入9.2.11版本。 所以我的建议是使用official documentation support tables或Java 1.8.0u31中报告的JDK 1.7.x版。