2017-12-29 15 views
2

에 액세스 할 수 있습니다의 ClassNotFoundException : 조직/일식/부두/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

, 그것은 가장 가능성이 있음을 의미 이거나 클래스 경로 충돌 이 있거나 종속성 관리로 인해 잘못된 버전이 사용되었습니다.

제공된 스택 트레이스를 자세히 보면, 제대로

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"를 구성 할 필요가 있음을 알 수있다. 또한 ALPN이 작동하려면 명령 행에 런타임 JVM 특정 부트 클래스 경로 (-Xbootclasspath) 항목이 필요합니다.

주 : Java 9 이상에는 부트 클래스 경로 요구 사항이 없지만 포함해야 할 런타임 JVM 특정 구현 jar는 여전히 있습니다.

+0

그건 OP의 문제가 아니지만. – laune

+0

이것이 바로 OP가 갖는 문제입니다. 'org.eclipse.jetty.alpn.ALPN' 클래스는 여러분이 생각하는대로로드되지 않습니다. 부트 클래스 경로 종속성으로 인해 정상적으로로드되지 않습니다. –

+0

ClassNotFoundException에 대한 오류 메시지는 Class.forName의 인수를 나열합니다. 패키지 이름 사이에 클래스 이름에 슬래시가 포함되어 있다고 생각하지 않습니다. 그것은 구성 파일에서 올 수 있습니다. – laune

관련 문제