Quarkus Dev模式构建失败:依赖模块自定义outputDirectory路径异常
问题原因
Quarkus的quarkus:dev插件在处理多模块依赖时,默认会从依赖模块的target目录下加载类资源。当依赖模块(如你的my-app)自定义了<outputDirectory>为build后,插件没有正确读取该配置,反而错误地将自定义路径拼接到默认的target路径后,导致查找S:\trunk\moms\my-app\target\build这个不存在的目录。
解决方案
方案1:为依赖模块配置Quarkus插件的类目录
在my-app模块的pom.xml中,给quarkus-maven-plugin添加classesDirectory配置,明确告诉插件使用自定义的输出目录:
<build> <outputDirectory>build</outputDirectory> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.version}</version> <executions> <execution> <goals> <goal>build</goal> <goal>generate-code</goal> <goal>generate-code-tests</goal> </goals> </execution> </executions> <configuration> <!-- 指定dev模式使用的类目录为自定义的build目录 --> <classesDirectory>${project.build.outputDirectory}</classesDirectory> </configuration> </plugin> </plugins> </build>
这个配置会让Quarkus插件正确识别my-app的输出路径,避免硬拼接默认target路径。
方案2:在主模块中添加额外类路径
如果方案1不生效,可在依赖my-app的momsServerQuarkus模块的pom.xml中,给quarkus-maven-plugin添加extraClasspath配置,直接指定my-app的自定义输出目录:
<plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.version}</version> <configuration> <extraClasspath> <!-- 用相对路径指向my-app的build目录,根据实际模块层级调整 --> <extraClasspath>${project.basedir}/../my-app/build</extraClasspath> </extraClasspath> </configuration> </plugin>
这样Dev模式会额外从这个目录加载类资源,绕过插件的路径解析问题。
方案3:临时恢复默认输出路径(应急用)
如果上述配置都无法解决,可暂时将my-app的<outputDirectory>改回默认的target/classes,待开发完成后再切换回自定义路径。
是否属于Bug?
这个情况属于Quarkus插件的兼容性问题:插件在处理多模块依赖时,没有正确读取依赖模块的Maven构建输出路径配置,而是默认使用target路径进行拼接。你可以到Quarkus的官方GitHub仓库提交Issue,说明多模块场景下自定义outputDirectory导致Dev模式依赖解析失败的问题,并附上相关的pom.xml片段和报错日志,帮助官方修复该问题。
内容的提问来源于stack exchange,提问作者grischapaul

