当来自 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
我一直在尝试 运行 使用内置的 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