当来自 IntelliJ 的 运行 Jetty 时找不到模块 [protonego-impl/alpn-1.8.0_45]

Module not found [protonego-impl/alpn-1.8.0_45] when running Jetty from IntelliJ

我一直在尝试 运行 使用内置的 Jetty 服务器支持和最新的 Jetty 版本 (9.2.10.v20150310) 在 IntelliJ 上使用 Jetty。 但是,当我尝试部署我的 war 时,它失败并抛出异常:

WARNING: Module not found [protonego-impl/alpn-1.8.0_45] WARNING: ** Unable to continue, required dependency missing. [protonego-impl/alpn-1.8.0_45] WARNING: ** As configured, Jetty is unable to start due to a missing enabled module dependency. WARNING: ** This may be due to a transitive dependency akin to spdy on npn, which resolves based on the JDK in use. Missing referenced dependency: protonego-impl/alpn-1.8.0_45

jetty文件夹中确实没有这个模块版本(在protonego-impl文件夹中,版本以alpn-1.8结尾。0_31),而且我似乎无法在任何地方找到它下载..有没有人遇到过这个异常?

您使用的似乎是 JDK 版本,您的 Jetty 版本不完全支持该版本。 事实上,如果您查看日期为 2015 年 4 月 15 日的 this Jetty commit,它会显示

Updated ALPN and NPN versions for JDK 7u79, 7u80 and 8u45.

它很可能会被插入到版本 9.2.11 中。 因此,我的建议是使用 JDK 版本 1.7.x,如 official documentation support tables 或 Java 1.8.0u31.

中所述

Jetty 9.2.10 的发布早于 Java1.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 库 8.1.3.v20150130(与 Java 1.8u31 使用的 ALPN 版本相同)

显然 Jetty 9.2.10 无法附带此映射,因为这需要时间机器才能完成。

如何在您的机器上更正此问题:

首先,所有这些更改都是针对您 ${jetty.base} 目录中的实例配置(您确实有一个 ${jetty.base} 目录并且没有修改 ${jetty.home},对吧?)

  • 创建一个${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 实例。

你已经完成了你的实例现在能够 运行 ALPN lib 8.1.3.v20150130 和 Java 1.8u45