2014-03-19 32 views
16

我剛剛安裝了Java 8的最終版本。當我嘗試使用Maven構建項目時,如果使用Java 8,許多測試都會失敗,但在Java 7中傳遞良好。我嘗試通過命令行使用JAVA_HOME設置爲C:\ Program Files \ Java \ jdk1.8.0,並通過Eclipse選擇jdk1.8.0作爲已安裝JRE中的默認JRE。兩者都失敗。請注意,失敗的測試都使用Drools 6(及其依賴項)。Drools爲什麼不使用Java 8?

這裏是輸出:

------------------------------------------------------------------------------- 
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) 

所以這是一個問題與Java 8時,Maven,Surefire插件,或Drools的?

+0

也許這會有幫助嗎? https://www.java.net/forum/topic/jdk/java-se-snapshots-project-feedback/drools-stop-working-java-8 – anonymous

+0

你從哪裏獲得JDK 8的最終版?目前尚未在JDK8下載頁面上提供(儘管它的目標是昨天發佈)。 –

+1

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

回答

15

看起來像在Drools中的錯誤(在Eclipse編譯器是默認):

他們正在調查在固定6.1.0.Beta2

同時,試試這個解決方法: 重寫ecj依賴性4.3.1版本。

+0

如果我不使用Maven,我應該重寫ecj依賴關係嗎?我找不到哪個drools jar有eclipse編譯器。 –

+0

這是一個名爲'ecj - *。jar'的jar。 這個問題在master btw上是固定的,所以它將成爲6.1.0.Beta2(即將發佈)的一部分。 –

+0

不工作的朋友.. – ThinkTank

0

將你的org.eclipse.jdt.internal.compiler(ecj.jar)更新到最新版本,即使用ecj-4.4.jar並嘗試。

+2

請問您可以添加更多詳細信息,以便用戶可以理解他爲什麼必須更改該jar文件 – YMomb

0

ECJ,用於在規則中編譯Java代碼,最近纔開始用Luna(4.4)支持Java 8語法,因此需要進行更新。

如果您要在規則中使用Java 8語法,您還需要使用Drools 6.4.0.Final,因爲他們現在將Java 8識別爲Java 8(它們將8映射到7來解決ECJ問題4.3)

MVEL 2.2.X版本或更高版本,這是一個速記替代Java的語法,還支持Java 8

1

我已經編輯POM Maven中解決了這個問題。

<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

您使用的是哪個版本的drool編譯器。這不適合我。 – Maulzey

+0

即使添加4.3.1沒有爲我工作 – Maulzey

+0

嗨,不幫助您的建議。 – ThinkTank

0

將org.eclipse.jdt.core.jar更新到最新版本。

在我們的例子中,我們已經將org.eclipse.jdt.core-3.5.1.v_972_R35x.jar更新爲org.eclipse.jdt.core_3.11.2.v20160128-0629.jar。

這是決定java編譯drools代碼的java_version的jar。

一旦你的舊Java-6兼容的drools代碼在java中編譯-8。你可以運行它使用Java -8沒有任何這樣的錯誤。 這些都是經過驗證的步驟。 如果有任何疑問,請回復。

+0

如果這些都是經過驗證的步驟,您能否提供一些資料供進一步閱讀? –

相關問題