首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Jacoco、JMockit和JDK14解决Maven的插件问题

用Jacoco、JMockit和JDK14解决Maven的插件问题
EN

Stack Overflow用户
提问于 2020-09-12 13:52:47
回答 3查看 11.7K关注 0票数 5

我试图将我的项目从JDK 11升级到JDK 14,但是在将java版本设置为14之后,运行测试失败了。由于我正在结合使用JMockit,所以我将构建配置如下(编辑: jacoco版本为0.8.3 / 0.8.5,JMockit版本为1.49):

代码语言:javascript
复制
    <build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${version.jacoco}</version>
            <executions>
                <execution>
                    <id>coverage-initialize</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>coverage-report</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${version.surefire-plugin}</version>
            <configuration>
                <argLine>
                    @{argLine} -javaagent:"${settings.localRepository}"/org/jmockit/jmockit/${version.jmockit}/jmockit-${version.jmockit}.jar
                </argLine>
            </configuration>
        </plugin>
...

如果我将Java版本设置为11运行maven,那么一切正常,但是当我将Java版本设置为14时,将引发此错误:

代码语言:javascript
复制
[ERROR] java.lang.instrument.IllegalClassFormatException: Error while instrumenting sun/util/resources/cldr/provider/CLDRLocaleDataMetaInfo.
[ERROR]         at org.jacoco.agent.rt.internal_1f1cc91.CoverageTransformer.transform(CoverageTransformer.java:93)
[ERROR] sun.util.locale.provider.LocaleDataMetaInfo: Unable to load sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo
[ERROR]         at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
[ERROR]         at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
[ERROR]         at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
[ERROR]         at java.base/java.lang.ClassLoader.defineClass2(Native Method)
[ERROR]         at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1109)

我在“保险”argline的配置中追踪到了@{argLine}的问题。如果我删除这个,构建就会运行得很好。不幸的是,JaCoCo需要这种配置。没有它,它就不会产生任何报告。

有什么建议吗?

增编:刚刚发现,在使用JDK14运行时,测试会失败。它不依赖于pom.中的编译版本集。

EN

回答 3

Stack Overflow用户

发布于 2020-09-14 07:58:52

根据JaCoCo changelog (https://www.jacoco.org/jacoco/trunk/doc/changes.html)对Java 14类文件的支持是在JaCoCo版本0.8.5中添加的,但是最近的JaCoCo版本1.49仍然不完全支持Java11字节码-请参阅JMockit https://github.com/jmockit/jmockit1/issues/615#issuecomment-501009439中的打开票证:

应该修复

JMockit以正确处理condy (https://openjdk.java.net/jeps/309).

票数 3
EN

Stack Overflow用户

发布于 2021-03-23 05:18:10

访问https://www.jacoco.org/jacoco/trunk/doc/changes.html

它明确提到了对JDK 14的支持。将“plugin”更新为"0.8.6“。

票数 2
EN

Stack Overflow用户

发布于 2020-11-10 13:09:21

对于那些不迫切需要JDK14+的人来说,只有升级到JDK13才能防止这个问题的发生。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63861026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档