使用Maven使2版的Janino协同进行Junit测试

如何解决使用Maven使2版的Janino协同进行Junit测试

我正在研究一个内部使用Drools的spark程序。该代码工作正常。现在,我正在编写测试用例以测试Drools代码。由于存在这错误https://issues.redhat.com/browse/DROOLS-329,我不得不添加依赖项

<dependency>
  <groupId>org.codehaus.janino</groupId>
  <artifactId>janino</artifactId>
  <version>2.5.16</version>
 </dependency>

然后将JVM参数用于jacoco测试

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <systemPropertyVariables>
            <jacoco-agent.destfile>${project.build.directory}/jacoco.exec</jacoco-agent.destfile>
          </systemPropertyVariables>
                    <argLine>-Ddrools.dialect.java.compiler=JANINO</argLine>
        </configuration>
      </plugin>

添加了Spark测试用例后,它们开始依赖于它们,因此开始失败

<dependency>
  <groupId>org.codehaus.janino</groupId>
  <artifactId>janino</artifactId>
  <version>3.0.8</version>
 </dependency>

因此,我在POM中注释了Drools测试和2.5.16 janino依赖项。现在,Spark代码运行正常。我们如何确保在Maven测试构建期间Janino 2.5.16和Janino 3.0.8可以共存并通过Drools测试和Spark测试通过?

这是我正在使用的Drools代码

public static void applyRules(ResultObj obj) {
        try {
            KNowledgeBuilder kbuilder = KNowledgeBuilderFactory.newKNowledgeBuilder();
            kbuilder.add( ResourceFactory.newClassPathResource( "rules/rules.drl",DroolsPreprocessor.class),ResourceType.DRL );
            if ( kbuilder.hasErrors() ) {
                System.err.println( kbuilder.getErrors().toString() );
            }
            StatelessKieSession session = kbuilder.newKieBase().newStatelessKieSession();
            session.execute(obj);
            System.out.println("Reached the end ");
        } catch (Exception e) {
            e.printstacktrace();
        }
    }

这是Drools依赖项

    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-decisiontables</artifactId>
      <version>7.7.0.Final</version>
    </dependency>

    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-core</artifactId>
      <version>7.7.0.Final</version>
    </dependency>
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-compiler</artifactId>
      <version>7.7.0.Final</version>
    </dependency>

对于Janino 2.5.16,Spark不满意,它将引发此异常

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/janino/InternalCompilerException
    at org.apache.spark.sql.catalyst.expressions.codegen.JavaCode$.variable(javaCode.scala:63)
    at org.apache.spark.sql.catalyst.expressions.codegen.JavaCode$.isNullVariable(javaCode.scala:76)
    at org.apache.spark.sql.catalyst.expressions.Expression.$anonfun$genCode$3(Expression.scala:145)
    at scala.Option.getorElse(Option.scala:189)
    at org.apache.spark.sql.catalyst.expressions.Expression.genCode(Expression.scala:141)
    at org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext.$anonfun$generateExpressions$1(CodeGenerator.scala:1170)
    at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:238)
    at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)
    at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)
    at scala.collection.TraversableLike.map(TraversableLike.scala:238)
    at scala.collection.TraversableLike.map$(TraversableLike.scala:231)
    at scala.collection.AbstractTraversable.map(Traversable.scala:108)
    at org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext.generateExpressions(CodeGenerator.scala:1170)
    at org.apache.spark.sql.catalyst.expressions.codegen.GenerateUnsafeProjection$.createCode(GenerateUnsafeProjection.scala:290)
    at org.apache.spark.sql.catalyst.expressions.codegen.GenerateUnsafeProjection$.create(GenerateUnsafeProjection.scala:338)
    at org.apache.spark.sql.catalyst.expressions.codegen.GenerateUnsafeProjection$.generate(GenerateUnsafeProjection.scala:327)
    at org.apache.spark.sql.catalyst.expressions.UnsafeProjection$.createCodeGeneratedobject(Projection.scala:123)
    at org.apache.spark.sql.catalyst.expressions.UnsafeProjection$.createCodeGeneratedobject(Projection.scala:119)
    at org.apache.spark.sql.catalyst.expressions.CodeGeneratorWithInterpretedFallback.createObject(CodeGeneratorWithInterpretedFallback.scala:52)
    at org.apache.spark.sql.catalyst.expressions.UnsafeProjection$.create(Projection.scala:150)
    at org.apache.spark.sql.catalyst.expressions.UnsafeProjection$.create(Projection.scala:143)
    at org.apache.spark.sql.catalyst.expressions.UnsafeProjection$.create(Projection.scala:135)
    at org.apache.spark.sql.kafka010.KafkaRecordToRowConverter.<init>(KafkaRecordToRowConverter.scala:36)
    at org.apache.spark.sql.kafka010.KafkaRelation.<init>(KafkaRelation.scala:52)
    at org.apache.spark.sql.kafka010.KafkaSourceProvider.createRelation(KafkaSourceProvider.scala:150)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:339)
    at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:279)
    at org.apache.spark.sql.DataFrameReader.$anonfun$load$2(DataFrameReader.scala:268)
    at scala.Option.getorElse(Option.scala:189)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:268)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:203)

如果我不添加Janino 2.5.16依赖项,则会出现以下测试错误

java.lang.RuntimeException: wrong class format
at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:302)
at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:255)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:174)
at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:214)
at org.eclipse.jdt.internal.compiler.lookup.compilationunitScope.findImport(compilationunitScope.java:466)
at org.eclipse.jdt.internal.compiler.lookup.compilationunitScope.findSingleImport(compilationunitScope.java:520)
at org.eclipse.jdt.internal.compiler.lookup.compilationunitScope.faultinimports(compilationunitScope.java:397)
at org.eclipse.jdt.internal.compiler.lookup.compilationunitScope.faultInTypes(compilationunitScope.java:445)
at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:860)
at org.eclipse.jdt.internal.compiler.Compiler.processCompiledUnits(Compiler.java:550)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:462)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:417)
at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler.compile(EclipseJavaCompiler.java:436)
at org.drools.compiler.commons.jci.compilers.AbstractJavaCompiler.compile(AbstractJavaCompiler.java:49)
at org.drools.compiler.rule.builder.dialect.java.JavaDialect.compileAll(JavaDialect.java:420)
at org.drools.compiler.compiler.DialectCompiletimeRegistry.compileAll(DialectCompiletimeRegistry.java:61)
at org.drools.compiler.compiler.PackageRegistry.compileAll(PackageRegistry.java:109)
at org.drools.compiler.builder.impl.KNowledgeBuilderImpl.compileAll(KNowledgeBuilderImpl.java:1471)
at org.drools.compiler.builder.impl.KNowledgeBuilderImpl.wireAllRules(KNowledgeBuilderImpl.java:950)
at org.drools.compiler.builder.impl.KNowledgeBuilderImpl.addPackage(KNowledgeBuilderImpl.java:938)
at org.drools.compiler.builder.impl.KNowledgeBuilderImpl.addPackageFromDrl(KNowledgeBuilderImpl.java:543)
at org.drools.compiler.builder.impl.KNowledgeBuilderImpl.addKNowledgeResource(KNowledgeBuilderImpl.java:743)
at org.drools.compiler.builder.impl.KNowledgeBuilderImpl.add(KNowledgeBuilderImpl.java:2288)
at org.drools.compiler.builder.impl.KNowledgeBuilderImpl.add(KNowledgeBuilderImpl.java:2277)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?