当前位置: 首页 > 知识库问答 >
问题:

Maven肯定会引发Jacoco、JMockit和JDK14的插件问题

夏振国
2023-03-14

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

    <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时,surefire插件抛出了这个错误:

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

我将问题追踪到surefire argLine配置中的@{argLine}。如果我删除这个,构建运行良好。不幸的是,Jacoco需要这个配置。没有它,它就不会产生任何报告。

有什么建议吗?

共有1个答案

慎望
2023-03-14

根据JaCoCo changelog(https://www.JaCoCo.org/JaCoCo/trunk/doc/changes.html)的说法,JaCoCo 0.8.5版本中增加了对Java14类文件的支持,但是最新的JMockit 1.49版本仍然不完全支持Java11字节码-请参见JMockit https://github.com/JMockit/jmockit1/issues/615#issuecomment-501009439中的开放票证:

应该修复JMockit以正确处理condy(https://openjdk.java.net/jeps/309)。

 类似资料:
  • 以下是我的POM中的一些相关片段: 版本:Maven 3.0.4、Tomcat Maven Plugin2.1、Jacoco 0.6.2.201302030002、Java7

  • 有办法让这成为可能吗? 感谢您的关注!

  • 执行maven时发生以下错误(mvn clean install) 无法在项目测试上执行目标org.jacoco:jacoco-maven-plugin:0.7.2.201409121644:prepare-agent(默认值)ng:目标org.jacoco:jacoco-maven-plugin:0.7.2.201409121644:prepare-agent失败:无法在插件“org.jacoc

  • 所有POM都有作为它们的版本,也在dependencies标签下。它通过上传到Nexus repo。 我们最近开始做。因此,所有20个父POM现在都是和版本,因为它们都位于nexus中。所有标记现在都指向 开发人员不想指向发布版本。他们需要来自同行的edge开发版本,不管它是否不稳定。 SCM只希望指向版本,因为他必须每周执行一次,但由于指向快照版本而失败。 现在我知道了版本插件,但问题是,我应该

  • null 现在,当我使用mvn从Jenkins内部运行maven release插件时,我仍然得到以下信息: 不显示错误 按预期创建SVN标记 然后在部署期间,它失败,出现上述错误 正如我提到的,快照部署经常发生并且没有错误,因此settings.xml、distributionManagement和Nexus权限似乎都是正常的。 我能够手动访问 我已经用和进行了检查,似乎一切正常 有什么想法吗?

  • 当我使用现有的Maven项目选项将一个插件导入到eclipse时,遇到了以下错误。 项目生成错误:无法解析的生成扩展:Plugin com.atlassian.maven.plugins:maven-jira-plugin:3.2.3或其依赖项之一无法解析:在http://repo1.maven.org/maven2中查找com.atlassian.maven.plugins:maven-jira