2017-12-29 29 views
2

私はそのようなコードを持っている:にClassNotFoundException:ORG /日食/桟橋/ alpn/ALPNが、私はこのクラスへのアクセス権を持って

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

これは、このような出力が得られます。

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:"を追加してこの問題を解決しましたが、なぜこれを行う必要があるのか​​分からず、私は考えませんこれはエレガントな方法です。

ALPN dependenciesは、いずれかのクラスパスに存在しない関連:エラーメッセージ「桟橋ALPN/NPNが正しく設定されていない」「ALPNが正しく設定されていない」かを受け取った場合

+0

「ALPNが正しく設定されていません」で始まるエラーメッセージの部分を読んだことがありますか? –

+0

'org/eclipse/jetty/alpn/ALPN'はそのクラスの適切な名前だと思いますか? – laune

+0

これ以上の推測が行われる前に、forNameメソッド呼び出しによってスローされたClassNotFoundExceptionのエラーメッセージを見てください。その呼び出しで指定された名前の文字列を表示します。スラッシュは間違っています。パッケージ名を区切るには期間が必要です。 – laune

答えて

1

は、それが最も可能性が高いことを意味し またはクラスパスの競合があるかどうか、または依存関係の管理のために間違ったバージョンが使用されていることを確認してください。適切

提供スタックトレースをよく見ると、それはあなたが「ALPN」を設定する必要があることを明らかに

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) 
2

ALPNサポートは、単にインターフェイスクラスが十分ではない持つ、非常にJVM特定です。また、ALPNが機能するためには、ランタイムJVM固有のブートクラスパス(-Xbootclasspath)エントリがコマンドラインに必要です。

注:Java 9+にはブートクラスパスの要件はありませんが、実行時に必要なJVM固有の実装JARはまだあります。

+0

それはOPの問題ではありません。 – laune

+0

これはOPの持つ問題です。 'org.eclipse.jetty.alpn.ALPN'クラスはあなたが思うように読み込まれません。これは、ブートクラスパスの依存関係により、正常にロードされないようにしています。 –

+0

ClassNotFoundExceptionのエラーメッセージは、Class.forNameの引数をリストします。クラス名の間に区切り記号としてスラッシュがあるとは思わない。しかし、それは設定ファイルから来るかもしれません。 – laune

関連する問題