2012-06-03 6 views
6

Ich habe eine einfache Klasse mit Testfall dafür und alles funktioniert gut in Eclipse, aber wenn ich maven build laufen lasse (mit diesem Ziel: install cobertura: cobertura checkstyle: checkstyle-aggregate) I ' Ich sehe einen Verify-Fehler im todsicheren Bericht. HierMaven build verursacht VerifyError mit Java 1.7

sind die genauen Fehler:

------------------------------------------------------------------------------- 
Test set: com.diploma.testProject.ClassUnderTestTest 
------------------------------------------------------------------------------- 
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.034 sec <<< FAILURE! 
testMethodReturnsTrue(com.diploma.testProject.ClassUnderTestTest) Time elapsed: 0.005 sec <<< ERROR! 
java.lang.VerifyError: Expecting a stackmap frame at branch target 79 in method com.diploma.testProject.ClassUnderTest.method(II)Z at offset 24 
    at com.diploma.testProject.ClassUnderTestTest.testMethodReturnsTrue(ClassUnderTestTest.java:37) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:146) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103) 
    at $Proxy0.invoke(Unknown Source) 
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:145) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:87) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69) 

testMethodReturnFalse(com.diploma.testProject.ClassUnderTestTest) Time elapsed: 0 sec <<< ERROR! 
java.lang.VerifyError: Expecting a stackmap frame at branch target 79 in method com.diploma.testProject.ClassUnderTest.method(II)Z at offset 24 
    at com.diploma.testProject.ClassUnderTestTest.testMethodReturnFalse(ClassUnderTestTest.java:42) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:146) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103) 
    at $Proxy0.invoke(Unknown Source) 
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:145) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:87) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69) 

Dies ist die Klasse:

public class ClassUnderTest { 
    public static boolean method(int a, int b) { 
     if (a == b) { 
      System.out.println(""); 
      return true; 
     } 
     return false; 
    } 
} 

Und der Test:

public class ClassUnderTestTest { 

    @Test 
    public void testMethodReturnsTrue() { 
     assertTrue(ClassUnderTest.method(1, 1)); 
    } 

    @Test 
    public void testMethodReturnFalse() throws Exception { 
     assertFalse(ClassUnderTest.method(1, 2)); 
    } 

} 

Und pom.xml:

<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>com.diploma</groupId> 
    <artifactId>testProject</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>testProject</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.10</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

    <build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
        <testSource>1.7</testSource> 
        <testTarget>1.7</testTarget> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
    </build> 
</project> 

Wenn ich das Ziel auf 1,5 setze, funktioniert das, aber ich brauche es, um mit 1.7 zu arbeiten. Mehr seltsam ist, dass das Verfahren modifiziert nur eine Rückkehr wie diese zu haben:

public class ClassUnderTest { 
    public static boolean method(int a, int b) { 
     if (a == b) { 
      System.out.println(""); 
     } 
     return false; 
    } 
} 

behebt auch das Problem. Ich habe versucht, die Ziel-und Quellversion in Eigenschaften Block von Pom, aber das Ergebnis war das gleiche.

Gibt es eine Möglichkeit, dies auf Version 1.7 laufen zu lassen?

EDIT: Auch dieses Problem erscheint nur mit dem Ziel cobertura: cobertura.

+0

Dies scheint ein allgemeines Problem zu sein, mit sehr ähnlichen Fragen auf SO gebucht. Ich postete die Auflösung zu unserem Problem wurde mit diesem gelöst: http://StackOverflow.com/a/20001391/1279002 – theINtoy

Antwort

20

Das Problem scheint in cobertura zu sein. Sieht aus wie es Java 1.7 nicht sehr gut unterstützt. Das Update war ähnlich dem Link, den @Raghuram für die Eclipse schrieb. Ändern pom wie dieser Test macht funktioniert gut:

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.12</version> 
       <configuration> 
        <argLine>-XX:-UseSplitVerifier</argLine> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
        <testSource>1.7</testSource> 
        <testTarget>1.7</testTarget> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
+0

Eine ähnliche Einstellung funktioniert mit buildr: ENV ['JAVA_OPTS'] || = "-XX: UseSplitVerifier" – Dzhaughn

4

Edit: mvn cobertura:cobertura funktioniert nicht wegen der fehlenden Unterstützung von cobertura für Java 7. This SO question diskutiert dies. Sieht aus wie JaCoCo ist der Weg zu gehen.

mvn install für mich von Befehlszeile mit maven-3.0.4 und java 1.7.0_04 auf Windows 7. Möglicherweise Sie schlagen this eclipse bug gut funktioniert?

Um @Pau 'Antwort hinzuzufügen, wird <pluginManagement> in Poms mit mehreren Modulen verwendet, um <plugin> Elemente zu deklarieren, die nach Bedarf von Kindern vererbt werden können.

Ich bekomme keine Fehler mit dem pom in der Frage, wie gut die folgenden Ausschnitt:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <testSource>1.7</testSource> 
       <testTarget>1.7</testTarget> 
      </configuration> 
     </plugin> 
    </plugins> 

+0

Hm .. Ich habe den gleichen Fehler von der Befehlszeile auch, aber jetzt habe ich herausgefunden, dass es vom Ziel cobertura ist : Cobertura. Bei laufender Installation funktioniert das einwandfrei. Danke für den Hinweis zum

+0

@ZhivkoDelchev. Ich bekomme den gleichen Fehler mit 'cobertura'. Update der Antwort – Raghuram

+0

Cobertura 2.x ist neu, beansprucht Java 7 Unterstützung. – Dzhaughn