2014-03-19 10 views
16

Ich habe gerade die finale Version von Java 8 installiert. Wenn ich versuche, mein Projekt mit Maven zu erstellen, scheitern viele Tests, wenn ich Java 8 verwende, aber gut mit Java 7. Ich habe versucht, es über die Befehlszeile mit JAVA_HOME auszuführen Legen Sie C: \ Programme \ Java \ jdk1.8.0 und Eclipse mit jdk1.8.0 als Standard-JRE in Installierte JREs fest. Beide scheitern. Beachten Sie, dass alle fehlgeschlagenen Tests Drools 6 (und seine Abhängigkeiten) verwenden. HierWarum arbeitet Drools nicht mit Java 8?

ist die Ausgabe:

------------------------------------------------------------------------------- 
Test set: com.local.lds.rules.LocmChiTest 
------------------------------------------------------------------------------- 
Tests run: 3, Failures: 0, Errors: 3, Skipped: 0, Time elapsed: 1.245 sec <<< FAILURE! 
test(com.local.lds.rules.LocmChiTest) Time elapsed: 0.001 sec <<< ERROR! 
java.lang.ExceptionInInitializerError 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:187) 
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at mockit.internal.util.MethodReflection.invoke(MethodReflection.java:63) 
    at mockit.Invocation.proceed(Invocation.java:192) 
    at mockit.integration.junit4.internal.BlockJUnit4ClassRunnerDecorator.createTest(BlockJUnit4ClassRunnerDecorator.java:59) 
    at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at mockit.internal.util.MethodReflection.invokeWithCheckedThrows(MethodReflection.java:95) 
    at mockit.internal.mockups.MockMethodBridge.callMock(MockMethodBridge.java:75) 
    at mockit.internal.mockups.MockMethodBridge.invoke(MockMethodBridge.java:41) 
    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java) 
    at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:236) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:233) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    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:175) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 
Caused by: java.lang.RuntimeException: wrong class format 
    at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:279) 
    at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:219) 
    at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:113) 
    at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:49) 
    at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:122) 
    at org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.resolve(ParameterizedTypeBinding.java:861) 
    at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:100) 
    at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveTypeFor(BinaryTypeBinding.java:1081) 
    at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.getField(BinaryTypeBinding.java:869) 
    at org.eclipse.jdt.internal.compiler.lookup.Scope.findField(Scope.java:1052) 
    at org.eclipse.jdt.internal.compiler.lookup.Scope.findField(Scope.java:998) 
    at org.eclipse.jdt.internal.compiler.lookup.MethodScope.findField(MethodScope.java:354) 
    at org.eclipse.jdt.internal.compiler.lookup.BlockScope.getBinding(BlockScope.java:474) 
    at org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference.resolveType(QualifiedNameReference.java:930) 
    at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:374) 
    at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:947) 
    at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:90) 
    at org.eclipse.jdt.internal.compiler.ast.IfStatement.resolve(IfStatement.java:260) 
    at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:456) 
    at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:252) 
    at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:415) 
    at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1148) 
    at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1258) 
    at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:539) 
    at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:763) 
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:468) 
    at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler.compile(EclipseJavaCompiler.java:405) 
    at org.drools.compiler.commons.jci.compilers.AbstractJavaCompiler.compile(AbstractJavaCompiler.java:49) 
    at org.drools.compiler.rule.builder.dialect.java.JavaDialect.compileAll(JavaDialect.java:405) 
    at org.drools.compiler.compiler.DialectCompiletimeRegistry.compileAll(DialectCompiletimeRegistry.java:46) 
    at org.drools.compiler.compiler.PackageRegistry.compileAll(PackageRegistry.java:110) 
    at org.drools.compiler.compiler.PackageBuilder.compileAll(PackageBuilder.java:1334) 
    at org.drools.compiler.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:975) 
    at org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.buildRules(CompositeKnowledgeBuilderImpl.java:266) 
    at org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:98) 
    at org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:87) 
    at org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:204) 
    at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:39) 
    at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:323) 
    at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:193) 
    at com.local.lds.rules.RuleEngineManager.buildKieBase(RuleEngineManager.java:90) 
    at com.local.lds.rules.LocmChiTest.<clinit>(LocmChiTest.java:33) 
    ... 41 more 
Caused by: org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException 
    at org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:372) 
    at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.createNameEnvironmentAnswer(EclipseJavaCompiler.java:303) 
    at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:274) 
    ... 82 more 
testNoFeatured(com.local.lds.rules.LocmChiTest) Time elapsed: 0 sec <<< ERROR! 
java.lang.NoClassDefFoundError: Could not initialize class com.local.lds.rules.LocmChiTest 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:187) 
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at mockit.internal.util.MethodReflection.invoke(MethodReflection.java:63) 
    at mockit.Invocation.proceed(Invocation.java:192) 
    at mockit.integration.junit4.internal.BlockJUnit4ClassRunnerDecorator.createTest(BlockJUnit4ClassRunnerDecorator.java:59) 
    at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at mockit.internal.util.MethodReflection.invokeWithCheckedThrows(MethodReflection.java:95) 
    at mockit.internal.mockups.MockMethodBridge.callMock(MockMethodBridge.java:75) 
    at mockit.internal.mockups.MockMethodBridge.invoke(MockMethodBridge.java:41) 
    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java) 
    at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:236) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:233) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    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:175) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 
testFeaturedSort(com.local.lds.rules.LocmChiTest) Time elapsed: 0.001 sec <<< ERROR! 
java.lang.NoClassDefFoundError: Could not initialize class com.local.lds.rules.LocmChiTest 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:187) 
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at mockit.internal.util.MethodReflection.invoke(MethodReflection.java:63) 
    at mockit.Invocation.proceed(Invocation.java:192) 
    at mockit.integration.junit4.internal.BlockJUnit4ClassRunnerDecorator.createTest(BlockJUnit4ClassRunnerDecorator.java:59) 
    at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at mockit.internal.util.MethodReflection.invokeWithCheckedThrows(MethodReflection.java:95) 
    at mockit.internal.mockups.MockMethodBridge.callMock(MockMethodBridge.java:75) 
    at mockit.internal.mockups.MockMethodBridge.invoke(MockMethodBridge.java:41) 
    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java) 
    at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:236) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:233) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    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:175) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 

Das ist also ein Problem mit Java 8, Maven, die todsicheren Plugin oder geifert?

+0

Vielleicht würde das helfen? https://www.java.net/forum/topic/jdk/java-se-snapshots-project-feedback/drools-stop-working-java-8 – anonymous

+0

Woher hast du das Finale von JDK 8? Es ist noch nicht auf der JDK8-Download-Seite verfügbar (obwohl es gestern veröffentlicht wurde). –

+1

@Geoffreydesmet ist es: http://www.oracle.com/technetwork/java/javase/downloads/index.html – assylias

Antwort

15

Sieht aus wie ein Fehler in Drools (in der Eclipse-Compiler ist die Standardeinstellung):

Sie sind in Befestigungs suchen sie in 6.1.0.Beta2.

der Zwischenzeit versuchen, dieses Problem zu umgehen : die ecj Abhängigkeit Version 4.3.1 außer Kraft setzen .

+0

Wenn ich Maven nicht benutze, wie sollte ich die ecj-abhängigkeit übersteuern? Ich konnte nicht finden, welches der Drools-Gläser Eclipse-Compiler hat. –

+0

Es ist das Glas namens "ecj - *. Jar". Das Problem ist auf Master-BTW behoben, so wird es Teil von 6.1.0.Beta2 sein (die in Kürze veröffentlicht wird). –

+0

Not buddy .. – ThinkTank

0

Aktualisieren Sie Ihren org.eclipse.jdt.internal.compiler (ecj.jar) auf den neuesten, d. H. Verwenden Sie ecj-4.4.jar und versuchen Sie es.

+2

Könnten Sie bitte weitere Details hinzufügen, so dass der Benutzer verstehen kann, warum er diese JAR-Datei ändern muss – YMomb

0

ECJ, das zum Kompilieren von Java-Code in Ihren Regeln verwendet wird, unterstützte erst seit kurzem die Java 8-Syntax mit Luna (4.4), daher ist ein Update erforderlich.

Wenn Sie die Java 8-Syntax in Ihren Regeln verwenden möchten, sollten Sie auch Drools 6.4.0.Final verwenden, da sie Java 8 jetzt als Java 8 erkennen (sie haben 8 auf 7 umgestellt, um Probleme mit ECJ zu beheben) 4.3)

MVEL 2.2.x-Version oder höher, die eine Abkürzung Alternative zu Java-Syntax ist, unterstützt auch Java 8.

1

ich dieses Problem in maven von bearbeiten pom gelöst haben.

<dependency> 
     <groupId>org.eclipse.jdt.core.compiler</groupId> 
     <artifactId>ecj</artifactId> 
     <version>4.5.1</version> 
    </dependency> 

    <!-- core --> 
    <dependency> 
     <groupId>org.drools</groupId> 
     <artifactId>drools-core</artifactId> 
     <version>5.5.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.drools</groupId> 
     <artifactId>drools-compiler</artifactId> 
     <version>5.5.0.Final</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.eclipse.jdt.core.compiler</groupId> 
       <artifactId>ecj</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
+0

Welche Version Saboler Compiler verwenden Sie. Das hat bei mir nicht funktioniert. – Maulzey

+0

Sogar das Hinzufügen von 4.3.1 funktionierte nicht für mich – Maulzey

+0

Hi nicht helfen Sie beraten. – ThinkTank

0

Aktualisieren Sie org.eclipse.jdt.core.jar auf den neuesten verfügbaren.

In unserem Fall haben wir org.eclipse.jdt.core-3.5.1.v_972_R35x.jar auf org.eclipse.jdt.core_3.11.2.v20160128-0629.jar aktualisiert.

Dies ist das Jar, das die java_version entscheidet, mit der der Drools-Code kompiliert wird.

einmal ur alten Java-6 kompatiblen Drools-Code in java-8 kompiliert bekommen. Sie können es mit java -8 ohne einen solchen Fehler ausführen. Dies sind bewährte Schritte. Bitte kehren Sie im Zweifelsfall zurück.

+0

Wenn dies nachgewiesene Schritte sind, können Sie bitte einige Quellen für weitere Informationen bereitstellen? –

Verwandte Themen