You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不依赖Maven运行QuarkusTest并使用本地项目类?

解决方案

一、让QuarkusTest直接使用本地库项目的target/classes(无需mvn install)

1. 合并为Maven多模块项目(推荐)

如果本地库和Quarkus项目属于同一代码库,直接将两者放到一个Maven父模块下:

  • 父模块pom.xml中声明两个子模块:
    <modules>
        <module>local-library</module>
        <module>quarkus-project</module>
    </modules>
    
  • Quarkus项目的pom.xml中依赖本地库时,直接使用模块坐标(无需指定版本或路径):
    <dependency>
        <groupId>your.group.id</groupId>
        <artifactId>local-library</artifactId>
        <version>${project.version}</version>
    </dependency>
    

这样Maven会自动关联子模块的编译产物,修改本地库后只需重新编译,无需执行mvn install,QuarkusTest会直接加载local-library/target/classes中的类。

2. 独立项目的依赖配置(非多模块场景)

如果两个项目是独立的,可通过Maven的system依赖指定本地库的target/classes目录:

  • 在Quarkus项目的pom.xml中添加依赖:
    <dependency>
        <groupId>your.group.id</groupId>
        <artifactId>local-library</artifactId>
        <version>your-version</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/../local-library/target/classes</systemPath>
    </dependency>
    
  • 同时配置maven-compiler-plugin确保编译器能识别该目录:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
            <compilerArgs>
                <arg>-cp</arg>
                <arg>${project.basedir}/../local-library/target/classes</arg>
            </compilerArgs>
        </configuration>
    </plugin>
    

注意:systemPath使用相对路径可提升配置的可移植性。

二、不调用Maven运行QuarkusTest的方法

1. IDE直接运行测试

在IntelliJ IDEA或Eclipse中,直接配置测试类的Run Configuration:

  • 添加本地库项目的target/classes目录到测试的类路径中
  • 运行测试时,IDE会绕过Maven的依赖解析,直接使用本地编译的类文件

2. 手动搭建Quarkus测试上下文

使用@QuarkusUnitTest替代@QuarkusTest,并通过代码手动扩展类路径:

import io.quarkus.test.junit.QuarkusUnitTest;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

@QuarkusUnitTest
public class MyLocalLibraryTest {

    static {
        try {
            // 加载本地库的classes目录到类路径
            File libraryClassesDir = new File("../local-library/target/classes");
            URLClassLoader classLoader = (URLClassLoader) Thread.currentThread().getContextClassLoader();
            Method addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
            addUrlMethod.setAccessible(true);
            addUrlMethod.invoke(classLoader, libraryClassesDir.toURI().toURL());
        } catch (Exception e) {
            throw new RuntimeException("Failed to add local library to classpath", e);
        }
    }

    @Test
    void testLibraryFunction() {
        // 测试逻辑
    }
}

这种方式无需通过Maven构建,直接由JUnit加载上下文并使用本地类。

三、其他Quarkus上下文搭建方式

使用Quarkus Dev模式运行测试,自动检测本地依赖变化:

./mvnw quarkus:dev --test

Dev模式会实时监听本地库的代码修改,自动重新编译并加载最新类,无需手动执行mvn install。如果本地库也是Quarkus项目,还可以通过quarkus dev同时启动两个项目的开发模式,实现联动调试。


内容的提问来源于stack exchange,提问作者Jotschi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:07:40