2013-08-07 4 views
0

테스트를 실행하는 프로젝트가 있습니다. Selenium을 사용하는 maven 프로젝트입니다. 로컬 시작 때 제대로 실행되지만 허드슨 플랫폼에서, 그것은 NoClassDefFoundError를 던졌습니다 :NoClassDefFoundError, hudson이 Maven 프로젝트를 실행할 때

Parsing POMs 
[elsevier-selenium] $ "C:\Program Files\Java\jdk1.7.0_25/bin/java" -Xmx1024m -cp E:\hudson\plugins\maven-plugin\WEB-INF\lib\maven-agent-1.353.jar;E:\maven\boot\classworlds-1.1.jar hudson.maven.agent.Main E:\maven E:\hudson\war\WEB-INF\lib\remoting-1.353.jar E:\hudson\plugins\maven-plugin\WEB-INF\lib\maven-interceptor-1.353.jar 1753 E:\hudson\plugins\maven-plugin\WEB-INF\lib\maven2.1-interceptor-1.2.jar 
<===[HUDSON REMOTING CAPACITY]===>channel started 
Executing Maven: -B -f E:\hudson\jobs\tests-selenium\workspace\elsevier-selenium\pom.xml integration-test 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building selenium-elsevier 
[INFO] task-segment: [integration-test] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [compiler:testCompile {execution: default}] 
[INFO] Changes detected - recompiling the module! 
[INFO] Compiling 5 source files to E:\hudson\jobs\tests-selenium\workspace\elsevier-selenium\target\test-classes 
[INFO] [site:attach-descriptor {execution: default-attach-descriptor}] 
[INFO] [failsafe:integration-test {execution: default}] 
[INFO] Failsafe report directory: E:\hudson\jobs\tests-selenium\workspace\elsevier-selenium\target\failsafe-reports 

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running fr.elsevier.tests.disponibilite.SearchTest 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.203 sec <<< FAILURE! 
fr.elsevier.tests.disponibilite.SearchTest Time elapsed: 0.203 sec <<< ERROR! 
java.lang.NoClassDefFoundError: Could not initialize class fr.elsevier.tests.BaseSelenium 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:190) 
    at org.apache.maven.surefire.report.SmartStackTraceParser.getClass(SmartStackTraceParser.java:63) 
    at org.apache.maven.surefire.report.SmartStackTraceParser.<init>(SmartStackTraceParser.java:53) 
    at org.apache.maven.surefire.common.junit4.JUnit4StackTraceWriter.smartTrimmedStackTrace(JUnit4StackTraceWriter.java:72) 
    [...] 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) 

SearchTest이 BaseSelenium을 확장합니다.

내 원본 폴더에서 클래스를 찾을 수 없다는 의미입니다. 프로젝트 구조는 다음과 같다 :

src/ 
    fr.elsevier.tests/ 
    disponibilite/ 
     SearchTest.java 
    BaseSelenium.java 
pom.xml 

왜 빌드는이 NoClassDefFoundErrors를 생성 않고 어떻게 그것을 해결하기 위해?

+1

로컬 및 hudson 빌드에서 -e 또는 -X 명령 줄 인수를 사용해보십시오. 그런 다음 시작된 Java 프로세스의 클래스 경로를 비교해보십시오. – SSR

+0

감사합니다 @SSR, -X 옵션과 함께, 메이븐 프로파일이 잘못 구성되어 BaseSelenium의 정적 변수를 초기화하는 동안 예외가 발생했음을 알 수있었습니다. classpath는 ok이었다. 클래스가 실제로 발견되었지만 초기화하지 못했을 때 "NoClassDefFoundError"라고 인쇄 된 예외는 너무 비현실적입니다. – BiAiB

+0

답변을 다음과 같이 추가했습니다. – SSR

답변

3

로컬 및 hudson 빌드에서 -e 또는 -X 명령 줄 인수를 사용해보십시오. 그런 다음 시작된 Java 프로세스의 클래스 경로를 비교해보십시오.

그러면 더 나은 스택 추적으로 예외를 던진 Maven 라이프 사이클의 부분을 실제로 파악할 수 있습니다.

관련 문제