Quarkus超级英雄工作坊Dev模式下LinkageError问题解决
Quarkus Dev模式运行时出现LinkageError,独立测试正常
问题概述
我是Quarkus新手,正在学习超级英雄工作坊,在Dev模式运行时遇到了一个LinkageError——该问题曾在Quarkus的Issue 23660中被报告并解决,但使用Maven命令./mvnw quarkus:dev启动应用并运行测试时仍会出现该问题,使用./mvnw test运行独立测试则一切正常。
错误日志
Caused by: java.lang.LinkageError: loader constraint violation in interface itable initialization for class io.agroal.pool.util.XAConnectionAdaptor: when selecting method 'javax.transaction.xa.XAResource javax.sql.XAConnection.getXAResource()' the class loader 'platform' for super interface javax.sql.XAConnection, and the class loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @398c8a2 of the selected method's class, io.agroal.pool.util.XAConnectionAdaptor have different Class objects for the type javax.transaction.xa.XAResource used in the signature (javax.sql.XAConnection is in module java.sql of loader 'platform'; io.agroal.pool.util.XAConnectionAdaptor is in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @398c8a2, parent loader 'app') at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:226) at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:535) at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:516) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:75) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ... 1 more
rest-villains模块POM文件
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>io.quarkus.workshop.super-heroes</groupId> <artifactId>rest-villains</artifactId> <version>1.0.0-SNAPSHOT</version> <properties> <compiler-plugin.version>3.10.1</compiler-plugin.version> <maven.compiler.release>17</maven.compiler.release> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id> <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id> <quarkus.platform.version>2.16.1.Final</quarkus.platform.version> <skipITs>true</skipITs> <surefire-plugin.version>3.0.0-M7</surefire-plugin.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>${quarkus.platform.artifact-id}</artifactId> <version>${quarkus.platform.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-reactive-jackson</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-arc</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-reactive</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-hibernate-orm-panache</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-hibernate-validator</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-jdbc-postgresql</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-openapi</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-junit5</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.platform.version}</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>build</goal> <goal>generate-code</goal> <goal>generate-code-tests</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>${compiler-plugin.version}</version> <configuration> <compilerArgs> <arg>-parameters</arg> </compilerArgs> </configuration> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>${surefire-plugin.version}</version> <configuration> <systemPropertyVariables> <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> <maven.home>${maven.home}</maven.home> </systemPropertyVariables> </configuration> </plugin> <plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>${surefire-plugin.version}</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <systemPropertyVariables> <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path> <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> <maven.home>${maven.home}</maven.home> </systemPropertyVariables> </configuration> </execution> </executions> </plugin> </plugins> </build> <profiles> <profile> <id>native</id> <activation> <property> <name>native</name> </property> </activation> <properties> <skipITs>false</skipITs> <quarkus.package.type>native</quarkus.package.type> </properties> </profile> </profiles> </project>
复现步骤
运行工作坊到「构建生产包」步骤即可复现。
版本与环境信息
- Quarkus版本:2.16.1.Final
- Apache Maven 3.8.7
- Java版本:17.0.5(Oracle Corporation)
- 操作系统:Windows 11(版本10.0,amd64架构)
- 默认区域:pt_PT
解决方案
经排查,问题源于rest-villains模块中多余的javaee-api依赖,移除该依赖后问题解决:
<dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency>
感谢Clement的帮助。
内容的提问来源于stack exchange,提问作者Orlix
相关产品推荐
相关产品推荐

