2017-12-29 25 views
2

ich einen solchen Code haben:ClassNotFoundException: org/eclipse/Anlegestelle/ALPN/ALPN, aber ich habe den Zugang zu dieser Klasse

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

Dies ergibt eine derartige Ausgabe:

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 verwendet, und es sieht aus, dass Grpc versucht, die ALPN-Klasse dynamisch zu laden. Habe ich recht? Diese Klasse kann nicht gefunden werden, daher habe ich eine Fehlermeldung. Aber bitte schau, dass ich Zugang zu dieser Klasse habe (ich drucke diese Klasse in der ersten Zeile). Weiß jemand, warum es so passiert? Ich habe keine Ahnung:/

Ich löste dieses Problem torisch durch Hinzufügen von VM-Argument "-Xbootclasspath/p:" Konfigurationsoption ausführen, aber ich verstehe nicht, warum ich dies tun musste und auch nicht denke Das ist eine elegante Methode.

+0

Haben Sie die Rolle in der Fehlermeldung, die mit „ALPN ist nicht richtig konfiguriert“? –

+0

Glaubst du, dass org/eclipse/jetty/alpn/ALPN der richtige Name für diese Klasse ist? – laune

+0

Bevor weitere Vermutungen angestellt werden, sehen Sie sich die Fehlermeldung der ClassNotFoundException an, die vom Methodenaufruf forName ausgelöst wurde. Es zeigt die Zeichenfolge des in diesem Aufruf angegebenen Namens. Schrägstriche sind falsch - Sie sollten Punkte haben, um Paketnamen zu trennen. – laune

Antwort

1

Wenn Sie eine Fehlermeldung erhalten „wird ALPN nicht richtig konfiguriert“ oder „Jetty ALPN/NPN nicht richtig konfiguriert wurde“, bedeutet es wahrscheinlich, dass:

ALPN Zusammenhang dependencies sind entweder nicht in der Classpath oder dass es einen Konflikt classpath oder dass eine falsche Version aufgrund Abhängigkeitsmanagement verwendet wird.

eng an der vorgesehenen stacktrace Sehen, zeigt sich, dass Sie konfigurieren müssen „ALPN“ richtig

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 Unterstützung ist sehr JVM spezifischen lediglich die Schnittstellenklassen aufweisen, sind nicht genug. Sie benötigen außerdem die Runtime JVM-spezifischen Boot-Klassenpfad (-Xbootclasspath) Einträge in der Befehlszeile für ALPN zu funktionieren.

Hinweis: Java 9+ keine Boot-Classpath Anforderung haben, aber es hat noch eine Laufzeit JVM spezifische Implementierung jar, die Sie enthalten müssen.

+0

Das ist jedoch nicht OPs Problem. – laune

+0

Das ist genau das Problem, das das OP hat. Die Klasse 'org.eclipse.jetty.alpn.ALPN' wird nicht so geladen, wie Sie es für richtig halten. Es hat eine Boot-Klassenpfadabhängigkeit, die verhindert, dass es normal geladen wird. –

+0

Die Fehlermeldung für die ClassNotFoundException listet das Argument von Class.forName auf. Ich glaube nicht, dass ein Klassenname Schrägstriche als Trennzeichen zwischen Paketnamen hat. Es kann jedoch aus einer Konfigurationsdatei stammen. – laune

Verwandte Themen