gpt4 book ai didi

java.lang.LinkageError : loader 'bootstrap' attempted duplicate class definition for java. lang.$JaCoCo 与 Java11 和 Jacoco 0.8.5

转载 作者:行者123 更新时间:2023-12-05 05:41:03 25 4
gpt4 key购买 nike

我在 Jenkins 中运行测试项目时出现以下错误

Caused by: java.lang.LinkageError: loader 'bootstrap' attempted duplicate class definition for java.lang.$JaCoCo. (java.lang.$JaCoCo is in module java.base of loader 'bootstrap')

Jacoco 在父 pom 和当前测试 pom 中定义了不同的目标。

parent-pom.xml

<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>validate-headless</id>
<phase>validate</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<skip>true</skip>
<propertyName>failsafe.argLine</propertyName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

测试项目-pom.xml

<properties>
<maven.repo.local>${user.home}/.m2/repository</maven.repo.local>
<itCoverageAgent>-javaagent:${maven.repo.local}/org/jacoco/org.jacoco.agent/0.8.5/org.jacoco.agent-0.8.5-runtime.jar=destfile=${basedir}/target/jacoco-it.exec</itCoverageAgent>
</properties>

<build>
<plugins>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<argLine>${failsafe.argLine} ${itCoverageAgent}</argLine>
<testFailureIgnore>true</testFailureIgnore>
<reuseForks>true</reuseForks>
</configuration>
</plugin>
</plugins>
</build>

<profiles>
<profile>
<id>coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version>
<executions>
<execution>
<id>prepare-agent-unit</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>prepare-agent-integration</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<propertyName>itCoverageAgent</propertyName>
</configuration>
</execution>
<execution>
<id>report-unit</id>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>report-integration</id>
<goals>
<goal>report-integration</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>

如果${itCoverageAgent}<argLine> 中删除在 test-project-pom.xml 它工作正常。我们如何为同一版本的 Jacoco 执行来自 parent-pom 和 test-project-pom 的不同目标?

最佳答案

当您在运行时失败并返回 java.lang.LinkageError在使用 Maven 构建之后,通常表明同一依赖项的不同版本正在加载到 JVM 中。当 POM 中的其他依赖条目之一对同一 Java 库或 Java 类的不同版本具有传递依赖时,就会出现这种类型的冲突。

您可以使用 Maven Dependency Plugin通过在项目的根目录下运行以下命令来生成依赖项及其所有传递依赖项的详细概述:

mvn dependency:tree

输出非常有用,但它是一个详尽的依赖列表,有时最终会成为一件好事。如果您的项目是这样,则有一个 includes。可用于过滤输出的选项,以便它专注于特定的依赖项或依赖项组。例如,您可以使用它如下,带星号 ('*')通配符只关注 Jacoco依赖项:

mvn dependency:tree -Dincludes=org.jacoco.*

includes选项允许多个过滤器子句,以逗号分隔 (',') , 并且还支持多级 Maven 依赖过滤, 使用如下格式结构:

[groupId]:[artifactId]:[type]:[version]

您可以在 Maven 依赖插件的 Filtering the dependency tree web page 上找到更多引用资料和文档。 .

如果您确实发现有导致冲突的传递依赖项,通常可以通过添加 <exclusions> 来解决该问题。导致问题的依赖项定义中的条目:

<dependency>
<groupId>org.open.source.library</groupId>
<artifactId>problematic-artifact</artifactId>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.jacoco</groupId>
<artifactId>conflicting-transitive-artifact</artifactId>
</exclusion>
</exclusions>
</dependency>

这会维护您想要的依赖关系,但不包括解决造成冲突的传递依赖关系,并将解决运行时链接错误。


实际上,我不认为您的根本问题是依赖版本不匹配;我认为您的问题是构建插件配置冲突。

Maven 中的默认构建插件配置处理会自动将父 pom 中定义的所有插件配置传播到子 pom - 这通常正是您想要的。

但在您的情况下,它会破坏您的构建。然而,有一种简单的方法可以让您声明本质上是排除的内容——只是您想要排除构建插件配置继承而不是构建依赖项。您可以使用以下命令关闭常规插件配置传播:<inherited>标记如下所示:

<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version>
<inherited>false</inherited>
<!-- Additional build lifecycle goals,
plugin configuration entries, and
plugin execution definitions: ...
-->
</plugin>
</plugins
</build>

关于java.lang.LinkageError : loader 'bootstrap' attempted duplicate class definition for java. lang.$JaCoCo 与 Java11 和 Jacoco 0.8.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72328470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com