首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClassNotFoundException: org/eclipse/jetty/alpn/ALPN,但是我可以访问这个类

ClassNotFoundException: org/eclipse/jetty/alpn/ALPN,但是我可以访问这个类
EN

Stack Overflow用户
提问于 2017-12-30 05:35:25
回答 2查看 3.9K关注 0票数 3

我有这样的代码:

代码语言:javascript
复制
public static void main(String[] args) throws Exception {
    System.out.println("ALPN class: " + ALPN.class);
    HelloWorldClient client = new HelloWorldClient("localhost", 10009);
}

这会产生这样的输出:

代码语言:javascript
复制
ALPN class: class org.eclipse.jetty.alpn.ALPN
Exception in thread "main" java.lang.IllegalArgumentException: ALPN is not configured properly. See https://github.com/grpc/grpc-java/blob/master/SECURITY.md#troubleshooting for more information.
    at io.grpc.netty.GrpcSslContexts.selectApplicationProtocolConfig(GrpcSslContexts.java:163)
    at io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:136)
    at io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:124)
    at io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:94)
    at btcduke.node.ln.HelloWorldClient.<init>(HelloWorldClient.java:35)
    at btcduke.node.ln.HelloWorldClient.main(HelloWorldClient.java:76)
Caused by: java.lang.ClassNotFoundException: org/eclipse/jetty/alpn/ALPN
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at io.grpc.netty.JettyTlsUtil.isJettyAlpnConfigured(JettyTlsUtil.java:34)
    at io.grpc.netty.GrpcSslContexts.selectApplicationProtocolConfig(GrpcSslContexts.java:153)
    ... 5 more

HelloWorldClient使用grpc,看起来grpc试图动态加载ALPN类。我说的对吗?找不到这个类,所以我收到了错误消息。但是请看一下,我可以访问这个类(我在第一行打印这个类)。有人知道为什么会这样吗?我不知道:/

我通过添加VM参数"-Xbootclasspath/p:“来运行配置选项,从理论上解决了这个问题,但我不明白为什么我需要这样做,我也不认为这是一种优雅的方法。

EN

回答 2

Stack Overflow用户

发布于 2017-12-30 05:42:29

https://www.eclipse.org/jetty/documentation/jetty-9/index.php#alpn-chapter上记录

包括用于Java8直到1.8.0_242的

您必须为您的特定JVM使用alpn-boot提供程序,因为它修改了OpenJDK类以启用对ALPN的支持。

参见ALPN到OpenJDK版本列表:

https://www.eclipse.org/jetty/documentation/jetty-9/index.html#alpn-versions

alpn-boot-<ver>.jar需要在JVM命令行上使用-Xbootclasspath/p:选项。

您还将在您的特定版本的Jetty服务器的普通服务器类路径上使用jetty-alpn-openjdk8-server-.jar

来自1.8.0_252和更高版本的Java8的(包括Java 9+)。

对于包含的1.8.0_252中的Java8和更高版本,此提供程序使用Java9中引入的标准OpenJDK ALPN (见下文),这些API已向后移植到1.8.0_252,并且不需要在命令行上使用-Xbootclasspath/p:选项

对于此操作模式,请使用服务器类路径上的jetty-alpn-java-server-.jar工件。

票数 3
EN

Stack Overflow用户

发布于 2017-12-30 05:41:47

如果您收到错误消息"ALPN未正确配置“或"Jetty ALPN/NPN未正确配置”,则很可能意味着:

与ALPN相关的dependencies要么不存在于类路径中,要么存在类路径冲突,要么由于依赖项管理而使用了错误的版本。

仔细查看提供的堆栈跟踪,您会发现需要正确配置"ALPN“

代码语言:javascript
复制
Caused by: java.lang.ClassNotFoundException: 
org/eclipse/jetty/alpn/ALPN
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at 
io.grpc.netty.JettyTlsUtil.isJettyAlpnConfigured(JettyTlsUtil.java:34)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48028697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档