如何不依赖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
相关产品推荐
相关产品推荐

