2010-08-17 4 views
1

내 파일에 외부 항아리를 사용하는 데 문제가 있습니다. 난 항상 얻을 :클래스 패스의 외부 항아리 및 HBase

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration` 
at this line: `Configuration config = HBaseConfiguration.create(); 

그리고 항아리 실행할 때 클래스 경로에, 내가 옵션을 설정하고있어이 파일은 다음과 같습니다

$ javac -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*" HBaseScanner.java 
:이 명령을 호출 한 후에 성공적으로

$ java -jar hbase.jar -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*" 

이 파일은 컴파일을

무엇을할까요?

답변

0

내 문제는 -classpath 옵션을 사용하여 클래스 경로를 설정하고 jar을 실행하여 -classpath 옵션을 무시한다는 것입니다.

매니페스트 파일에 jar 파일을 추가했습니다. 자바는 우리에게 오류를 준 또는이 상황에서 적어도 경고 경우 Setting multiple jars in java classpath

2

클래스 로더가 클래스의 정적 멤버를 초기화 할 수없는 경우 JVM이 java.lang.NoClassDefFoundError를 throw합니다. 예를 들어 예외가 throw됩니다. 또는,이 클래스의 정적 이니셜 라이저에서 액세스하는 다른 클래스를 찾을 수없는 경우 클래스 로더가 HBaseConfiguraton을로드 할 때 HBaseConfiguration이로드 할 때 HBaseConfiguration 클래스가 가져올 수없는 예외가 발생하여로드가 손실 될 수 있습니다.
이런 종류의 실패를 디버깅하는 것은 어렵습니다.
EDIT : 빠진 것이 무엇인지 알아내는 가장 쉬운 방법은 Eclipse에있는 모든 HBase 소스가 연결된 디버거에서 프로그램을 실행하고 HBaseConfiguration.create() 호출을 추적하는 것입니다.

0

정말 편리 할 것입니다 :

이 비슷한 문제입니다. 한 가지 해결책은이 항아리를 실행하는 것입니다.

java -cp "myclasspath":myjarfile.jar MyClassname