运行时面临Jacoco Method Too Large 错误

Mik*_*ton 7 maven jacoco jacoco-maven-plugin

面对 drools 库中方法的 jacoco 的方法太大错误,如何解决这个问题?我还尝试将 ** DRL6Lexer.class添加到 jacoco 中的排除项中,但它不起作用。我还能如何解决这个问题。

错误:

java.lang.instrument.IllegalClassFormatException:检测 org/drools/compiler/lang/DRL6Lexer 时出错。在 org.jacoco.agent.rt.internal_f3994fa.CoverageTransformer.transform(CoverageTransformer.java:94) 在 java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246) 在 java.instrument/sun.instrument .TransformerManager.transform(TransformerManager.java:188) 在 java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563) 在 java.base/java.lang.ClassLoader.defineClass1(本机方法) 在 java.base /java.lang.ClassLoader.defineClass(ClassLoader.java:1016) 在 java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) 在 java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader .java:800) 在 java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698) 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) 在 java.基/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)在java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)在java.base/java.lang。 ClassLoader.loadClass(ClassLoader.java:521) 在 org.drools.compiler.compiler.DRLFactory.getDRLLexer(DRLFactory.java:112) 在 org.drools.compiler.compiler.DRLFactory.buildLexer(DRLFactory.java:59) 在 org .drools.compiler.compiler.DrlParser.parse(DrlParser.java:163) 在 org.drools.compiler.compiler.DrlParser.parse(DrlParser.java:154) 在 org.drools.compiler.compiler.DrlParser.parse(DrlParser) .java:144) 在 DroolsParser.parseDrl(DroolsParser.java:36) 在 DroolsParserTest.generateRules_success(DroolsParserTest.java:39) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 java.base/ jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 位于 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于 java.base/java.lang.reflect.Method。在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 调用(Method.java:566) org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)在 org.junit.internal.runners.statements。 RunBefores.evaluate(RunBefores.java:26) 在 org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) 在 org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100) 在 org.junit .runners.ParentRunner.runLeaf(ParentRunner.java:366) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63) 在 org. junit.runners.ParentRunner$4.run(ParentRunner.java:331) 在组织。junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) 在 org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) 在 org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) 在 org.junit.runners.ParentRunner.run(ParentRunner.java :413)在org.junit.runner.JUnitCore.run(JUnitCore.java:137)在org.junit.runner.JUnitCore.run(JUnitCore.java:115)在org.junit.vintage.engine.execution.RunnerExecutor。在 java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) 处执行(RunnerExecutor.java:40) 在 java.base/java.util.stream.ReferencePipeline$3$1.accept( ReferencePipeline.java:195) 在 java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) 在 java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) 在 java.base /java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) 在 java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) 在 java.base/java.util.stream.ForEachOps $ForEachOp.evaluateSequential(ForEachOps.java:150) 在 java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) 在 java.base/java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234) 在 java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) 在 org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80) 在 org. junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:71) 在 org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170) 在 org.junit.platform.launcher.core.DefaultLauncher。在 org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90) 处执行(DefaultLauncher.java:154) 在 org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:150)在 org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:124) 在 org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384) 在 org.apache.maven.surefire .booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345) 在 org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126) 在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter) .java:418) 原因为:java.io.IOException:检测 org/drools/compiler/lang/DRL6Lexer 时出错。在 org.jacoco.agent.rt.internal_f3994fa.core.instr.Instrumenter.instrumentError(Instrumenter.java:160) 在 org.jacoco.agent.rt.internal_f3994fa.core.instr.Instrumenter.instrument(Instrumenter.java:110)在 org.jacoco.agent.rt.internal_f3994fa.CoverageTransformer.transform(CoverageTransformer.java:92) ... 64 更多 引起者:org.jacoco.agent.rt.internal_f3994fa.asm.MethodTooLargeException:方法太大:

pom.xml

  <dependencies>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-compiler</artifactId>
    </dependency>
    <dependency>
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.11.2</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.module</groupId>
      <artifactId>jackson-module-parameter-names</artifactId>
      <version>2.11.2</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.vintage</groupId>
      <artifactId>junit-vintage-engine</artifactId>
      <version>5.4.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.platform</groupId>
      <artifactId>junit-platform-launcher</artifactId>
      <version>1.2.0</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.10</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>11</source>
          <target>11</target>
          <compilerArgs>
            <compilerArg>-Amapstruct.defaultComponentModel=spring</compilerArg>
          </compilerArgs>
        </configuration>
      </plugin>
      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <dependencies>
                <dependency>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                    <version>5.4.0</version>
                </dependency>
                <dependency>
                    <groupId>org.junit.jupiter</groupId>
                    <artifactId>junit-jupiter-engine</artifactId>
                    <version>5.4.0</version>
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.6</version>
            <executions>
                <execution>
                    <id>default-prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>default-prepare-agent-integration</id>
                    <goals>
                        <goal>prepare-agent-integration</goal>
                    </goals>
                </execution>
                <execution>
                    <id>default-report</id>
                    <goals>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>
                            ${project.parent.basedir}/target/site/jacoco/${project.artifactId}
                        </outputDirectory>
                    </configuration>
                </execution>
                <execution>
                    <id>default-report-integration</id>
                    <goals>
                        <goal>report-integration</goal>
                    </goals>
                </execution>
                <execution>
                    <id>default-check</id>
                    <goals>
                        <goal>check</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <rule>
                                <element>BUNDLE</element>
                                <limits>
                                    <limit>
                                        <counter>LINE</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>${jacoco.percentage.line}</minimum>
                                    </limit>
                                    <limit>
                                        <counter>BRANCH</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>${jacoco.percentage.branch}</minimum>
                                    </limit>
                                    <limit>
                                        <counter>COMPLEXITY</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>${jacoco.percentage.complexity}</minimum>
                                    </limit>
                                </limits>
                            </rule>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
  </build>
</project>
Run Code Online (Sandbox Code Playgroud)

小智 3

使用 Jacoco 任务扩展(一个扩展 jacoco 注入到每个 Test 类型的任务中),您可以排除有问题的DRL6Lexer类。

对于我在 gradle 来说这很有效。

test {
        jacoco{
            excludes = ['org/drools/**/*']
        }
        useJUnitPlatform()
        finalizedBy jacocoTestReport
    }
Run Code Online (Sandbox Code Playgroud)