多模块Maven构建下多个Quarkus应用如何使用quarkus:dev开发模式并实时加载共享库代码
解决方案:多模块Maven下启动指定Quarkus应用并实时加载共享库变更
你完全不用合并共享库,通过Maven的参数组合和Quarkus的原生支持就能实现需求,下面是具体的可行方案:
方法一:用-pl+-am参数直接启动目标应用
Maven的-pl(指定要操作的模块)和-am(自动构建目标模块的所有依赖)参数组合,刚好能解决你从根目录启动指定应用、同时关联共享库的问题:
在项目根目录执行以下命令(以启动Quarkus应用1为例):
mvn quarkus:dev -pl quarkus-app1 -am-pl quarkus-app1:明确告诉Maven只针对这个应用模块执行dev命令-am:自动触发共享库模块的构建,确保Quarkus能拿到最新的共享代码
验证实时加载效果:
- 修改共享库的代码并保存,Maven会自动重新编译共享库的类文件
- Quarkus的dev模式会立刻检测到类文件变化,自动重新加载相关代码,完全不需要重启应用
关键注意事项
- 绝对不要提前执行
mvn install:如果先把共享库安装到本地Maven仓库,Quarkus会优先调用仓库里的旧版本,而非本地源码的最新变更。保持共享库为项目内模块依赖(默认的<scope>compile</scope>即可)就好。 - 确认共享库是应用的直接依赖:在Quarkus应用的pom.xml中,共享库的依赖必须指向项目内模块,比如:
<dependency> <groupId>你的项目groupId</groupId> <artifactId>共享库的artifactId</artifactId> <version>项目统一版本号</version> </dependency>
方法二:用Maven Profiles简化启动命令(可选)
如果觉得每次输入长命令麻烦,可以在根pom.xml里定义Profiles,把启动逻辑封装起来:
在根pom的
<profiles>节点中添加:<profile> <id>dev-app1</id> <modules> <module>共享库</module> <module>quarkus-app1</module> </modules> <build> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <executions> <execution> <goals> <goal>dev</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> <profile> <id>dev-app2</id> <modules> <module>共享库</module> <module>quarkus-app2</module> </modules> <build> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <executions> <execution> <goals> <goal>dev</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile>启动应用时只需执行:
mvn -P dev-app1这样会自动构建共享库和目标应用,同时启动dev模式,同样支持实时加载共享库的代码变更。
这两种方案都能完美解决你的问题,不需要合并共享库模块,两个Quarkus应用都能独立启动并实时感知共享代码的变化。
内容的提问来源于stack exchange,提问作者ewramner
相关产品推荐
相关产品推荐

