Jandex 索引未在 IntelliJ 中使用 Maven 为 Quarkus 多模块设置中的依赖模块构建

问题描述 投票:0回答:1

我使用以下版本:

  • Intellik:2024.1.4
  • maven:内置(3.9.6)
  • org.jboss.jandex:1.2.3
  • 夸库斯:3.12.3

我有以下项目结构:

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 友好版本)。

maven intellij-idea quarkus jandex
1个回答
0
投票

发现以下方法最终还可以(是自动化的+没有为测试运行添加太多时间):

  1. 删除所有 JUnit 运行配置
  2. 添加模板运行配置,其中添加
    BeforeRunTask
    。这个运行任务必须是一个 Maven 任务,其目标是
    jandex.jandex
    .
  3. 将模板存储为运行配置。

即用示例:将以下文件复制到

.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 仅针对已构建的类执行。

© www.soinside.com 2019 - 2024. All rights reserved.