我使用以下版本:
我有以下项目结构:
pom.xml
|- libraries
|- pom.xml
|- library A
| - pom.xml
|- services
|- pom.xml
|- service B
|- pom.xml
library A
有一个在service B
中引用的服务类,因此service B
需要library A
中的jandex索引。此配置已经生效:我可以使用 quarkus:dev
以及 docker 镜像正确启动服务。通过 mvn(本地以及 CI 中)触发的测试也正常工作(通过 mvn clean verify -pl services/service-b -am
)
jandex 配置:
<plugin>
<groupId>org.jboss.jandex</groupId>
<artifactId>jandex-maven-plugin</artifactId>
<version>1.2.3</version>
<executions>
<execution>
<id>make-index</id>
<phase>compile</phase>
<goals>
<goal>jandex</goal>
</goals>
</execution>
</executions>
</plugin>
无论如何,当从一个干净的项目开始并尝试在IntelliJ中启动
service-b
中的集成测试时,它无法启动任何用@QuarkusTest
注释的测试。我还看到 jandex.idx
中的 library A
未生成。compile
阶段 library A
的任何操作,它就可以正常工作:jandex.idx 文件存在。
我尝试更改 jandex 插件的阶段以及将
-am
添加到 maven.config
,但这两种方法都没有使 IntelliJ 在测试期间构建 jandex 文件。
将构建委托给 Maven 又带来了麻烦(带有 maven-git-versioning-extension
的 Maven CI 友好版本)。
发现以下方法最终还可以(是自动化的+没有为测试运行添加太多时间):
BeforeRunTask
。这个运行任务必须是一个 Maven 任务,其目标是 jandex.jandex
.即用示例:将以下文件复制到
.run/Template Unit.run.xml
<component name="ProjectRunConfigurationManager">
<configuration default="true" type="JUnit" factoryName="JUnit">
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="class" />
<method v="2">
<option name="Make" enabled="true" />
<option name="Maven.BeforeRunTask" enabled="true" file="$PROJECT_DIR$/pom.xml" goal="jandex:jandex" />
</method>
</configuration>
</component>
这也适用于部分构建/清理项目,因为 jandex 仅针对已构建的类执行。