未能 运行 @QuarkusTest。不支持 api 524288。更新 quarkus 插件版本后

Failed to run @QuarkusTest. Unsupported api 524288. After update quarkus plugin version

当我 运行 我在 intellij 上测试时,它正在返回

[error]: Build step io.quarkus.jsonb.deployment.JsonbProcessor#generateCustomizer threw an exception: 
    java.lang.IllegalArgumentException: Unsupported api 524288
    at org.objectweb.asm.ClassVisitor.
[error]: Build step io.quarkus.vertx.http.deployment.HttpSecurityProcessor#setupAuthenticationMechanisms threw an exception: 
    java.lang.IllegalArgumentException: Unsupported api 524288
[error]: Build step io.quarkus.smallrye.openapi.deployment.SmallRyeOpenApiProcessor#handler threw an exception: 
    java.lang.IllegalArgumentException: Unsupported api 524288
    at org.objectweb.asm.ClassVisitor.<init>(ClassVisitor.java:70)
    at org.objectweb.asm.ClassVisitor.<init>(ClassVisitor.java:70)
[error]: Build step io.quarkus.deployment.steps.BootstrapConfigSetupBuildStep#setupBootstrapConfig threw an exception: java.lang.IllegalArgumentException: Unsupported api 524288
    at org.objectweb.asm.ClassVisitor.<init>(ClassVisitor.java:70)

我的问题是在将 quarkus 插件版本从 1.4.2.Final 更新到 1.6.0.Final 后出现的。我不知道如何解决这个问题。当回到 1.4.2 时一切正常。在我的例子中,需要更新来实现 quarkus-smallrye-graphql。当我使用 1.4.2 版本将 graphql 依赖项添加到我的 pom 时,它说缺少 quarkus-smallrye-graphql 依赖项。我执行了 mvn clean install -U 来更新。但还是说不见了。

但后来我发现当我将 quarkus-plugin-version 更新到 1.6 时,quarkus-graphql 依赖成功加载。0.Final,但这破坏了我所有的测试用例。

这是我的测试

package org.me.service;

import io.quarkus.hibernate.orm.panache.PanacheQuery;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.me.model.Nutrition;

import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.ws.rs.core.Response;

import static org.junit.jupiter.api.Assertions.assertEquals;

@QuarkusTest
class NutritionServiceTest {

    @Inject
    NutritionService nutritionService;

    @AfterEach
    @Transactional
    public void tearDown() {
        Nutrition.deleteAll();
    }

    @Test
    void addNutritionCatalog_shouldSave_whenSuccessSendToDatabase() {
        Nutrition nutrition = Nutrition.builder()
                .name("nameee")
                .description("descriptionn")
                .build();

        final Response response = nutritionService.addNutritionCatalog(nutrition);
        final PanacheQuery<Nutrition> all = Nutrition.findAll();

        assertEquals(1, all.count());
        assertEquals(nutrition, response.getEntity());
    }
}

我想那是因为我的依赖。所以,这是我的 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>org.me</groupId>
  <artifactId>catalog</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <properties>
    <compiler-plugin.version>3.8.1</compiler-plugin.version>
    <maven.compiler.parameters>true</maven.compiler.parameters>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <quarkus-plugin.version>1.6.0.Final</quarkus-plugin.version>
    <quarkus.platform.artifact-id>quarkus-universe-bom</quarkus.platform.artifact-id>
    <quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
    <quarkus.platform.version>1.6.0.Final</quarkus.platform.version>
    <surefire-plugin.version>2.22.1</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-jsonb</artifactId>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-smallrye-openapi</artifactId>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.module</groupId>
      <artifactId>jackson-module-jaxb-annotations</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-smallrye-graphql</artifactId>
    </dependency>

    <!--    TEST    -->
    <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>io.quarkus</groupId>
      <artifactId>quarkus-junit5-mockito</artifactId>
      <version>1.4.1.Final</version>
      <scope>test</scope>
    </dependency>

<!--    DATABASE    -->
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-hibernate-orm-panache</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-jdbc-h2</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-liquibase</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-jdbc-postgresql</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-maven-plugin</artifactId>
        <version>${quarkus-plugin.version}</version>
        <executions>
          <execution>
            <goals>
              <goal>build</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${compiler-plugin.version}</version>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${surefire-plugin.version}</version>
        <configuration>
          <systemProperties>
            <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
          </systemProperties>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>native</id>
      <activation>
        <property>
          <name>native</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>${surefire-plugin.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <systemProperties>
                    <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
                  </systemProperties>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      <properties>
        <quarkus.package.type>native</quarkus.package.type>
      </properties>
    </profile>
  </profiles>
</project>

首先,我将从 quarkus-junit5-mockito 工件中删除版本。

那么你应该检查你的依赖树中没有旧的 ASM 版本。

我们在使用 Quarkus 1.6.1-Final 版时遇到了同样的问题。

pom 文件中没有为 Quarkus 依赖项指定额外的版本属性。

删除 .idea 目录并将整个项目重新导入 IntelliJ IDEA 解决了我们的问题。