2012-11-07 5 views
1

유닛 테스트가있는 maven 프로젝트가 있는데 "mvn install"을 실행할 때 큰 예외 추적이 발생합니다. 놀랍게도 -이 stacktrace 실제로 작업의 실패가 발생하지 않습니다! 그것은 Junit 라이브러리의 가용성과 관련이있는 것 같습니다 ...mvn install가 이상하게 실패했을 때 -

1)이 프로젝트를 위해이 프로젝트를 수정하는 방법을 알고 싶습니다. 그래야 라이브러리를 사용할 수 있고 테스트를 실행할 수 있습니다 (예, Junit4는 pom.xml 종속성에 있음).

2)이 문제를 확실하게 디버그하고 근본 원인을 찾는 가장 좋은 방법은 무엇입니까?

3) 분명히 확실한 유틸리티가 더러운 예외를 던졌을 때 메이븐이 "빌드 성공"이라고 말하는 이유는 무엇입니까?

org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException; nested exception is java.lang.reflect.InvocationTargetException: null java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:172) at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:104) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:70) Caused by: java.lang.NoClassDefFoundError: Test at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) at java.lang.Class.getMethod0(Class.java:2670) at java.lang.Class.getMethod(Class.java:1603) at org.apache.maven.surefire.util.ReflectionUtils.tryGetMethod(ReflectionUtils.java:57) at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.isSuiteOnly(JUnit3TestChecker.java:65) at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.isValidJUnit3Test(JUnit3TestChecker.java:60) at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.accept(JUnit3TestChecker.java:55) at org.apache.maven.surefire.common.junit4.JUnit4TestChecker.accept(JUnit4TestChecker.java:52) at org.apache.maven.surefire.util.DefaultDirectoryScanner.locateTestClasses(DefaultDirectoryScanner.java:80) at org.apache.maven.surefire.junit4.JUnit4Provider.scanClassPath(JUnit4Provider.java:174) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:83) ... 9 more Caused by: java.lang.ClassNotFoundException: Test at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 21 more

POM이는 어리 석음의 완벽한 폭풍의 definetly입니다

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>rudolf</groupId> 
    <artifactId>r1</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>r1</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>commons-lang</groupId> 
      <artifactId>commons-lang</artifactId> 
      <version>2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>1.3.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.derby</groupId> 
      <artifactId>derby</artifactId> 
      <version>10.9.1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.protobuf</groupId> 
      <artifactId>protobuf-java</artifactId> 
      <version>2.4.0a</version> 
     </dependency> 
    </dependencies> 


    <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.9</version> 
      <executions> 
       <execution> 
        <phase>test</phase> 
        <goals> 
         <goal>test</goal> 
        </goals> 
       </execution> 
      </executions> 
      </plugin>   
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
      </plugin> 
     </plugins> 
    </build> 



    <pluginRepositories> 
     <pluginRepository> 
      <id>onejar-maven-plugin.googlecode.com</id> 
      <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url> 
     </pluginRepository> 
    </pluginRepositories> 
</project> 
+0

'pom.xml '을 보여줄 수 있습니까? – maba

+0

명령 줄에서 실행 중이십니까? 주제는 Eclipse 다. –

+0

예, 좋은 지적 - 제목을 수정했습니다. – jayunit100

답변

2

이하 : 내 테스트 클래스는 참조기본 확실한 정규 표현식에 따라 이름이 지정되지 않은

1) 관련 Maven does not find JUnit tests to run. 그래서 테스트는 실제로 실행되지 않았습니다.

2) DID 실행이 실제로 "안전하지 않은"클래스를 사용하여 일부 JVM 해킹을 수행하여 세그멘테이션 오류가 발생했습니다. 이 세분화 오류는 전반적인 Maven 빌드와 조화를 이루며 결과 출력을 손상시킵니다.)

1) (100 % 확실하지만,이 나타납니다 - 몇 가지 이상한 낮은 수준의 실패가 MVN 빌드시 JVM에서 발생하는 경우, 하나는 이상한 결과를 기대할 수 있습니다

테이크 홈 교훈은 결국 오류/실패를 적절한 방법으로 나타내지는 않습니다.

2) 확실한 작동을위한 기본 Junit 테스트 케이스는 패키지의 모든 @Test 메소드를 자동으로 실행하지 않습니다. 클래스는 적절하게 이름을 지정하거나 수동으로해야합니다. 확실한 패턴 필터를 편집하십시오.

+0

안녕하세요 @ jayunit100 :이 오류를 제거하기 위해 어떤 변화가 있었는지 알 수 있습니까? "Build Success"에서 동일한 오류가 너무 많이 발생합니다.저 좀 도와 주 시겠어요. – techGaurdian

+0

junit 테스트 버전 3/4를 섞지 않도록하십시오. 가능한 경우 유닛 테스트에서 jvm hacks를하지 마십시오. 그렇지 않으면 – jayunit100

+0

을 불러 낼 수 없습니다. 정보를 가져 주셔서 감사합니다. – techGaurdian

0

TestNG 통합 테스트 (fail-safe)에서 이와 같은 문제가 발생했습니다. 비슷하게 정말로 비밀스러운 오류로 인해서 하루 종일 잃어 버리게되었습니다. (제발, Eclipse/TestNG, 우리에게 오류를 줄 예정이라면 도움이됩니다.) 필자의 경우 테스트 메서드의 접근자가 비공개로 공개되어야했기 때문입니다.

하루 종일 낭비되기 전에 다른 사람이 유용하다고 생각하길 바랍니다.

관련 문제