首先,我有一个像这样的多模块Maven层次结构:
├── project (parent pom.xml)
│ ├── service
│ ├── api-library
现在解决问题:
我正在使用api库中的类的服务模块中编写一个JAX-RS端点。
当我开始quarkus时,我得到以下警告:
13:01:18,784 WARN [io.qua.dep.ste.ReflectiveHierarchyStep] Unable to properly register the hierarchy of the following classes for reflection as they are not in the Jandex index:
- com.example.Fruit
- com.example.Car
Consider adding them to the index either by creating a Jandex index for your dependency or via quarkus.index-dependency properties.
这com.example.Fruit
和com.example.Car
类位于api-library
模块中。
所以我认为我需要将它们添加到application.properties中的Jandex索引依赖项中。
但是如何将Jandex索引依赖项添加到quarkus中?
答案 0 :(得分:5)
Quarkus自动索引主模块,但是,当您拥有包含CDI bean,实体,序列化为JSON的对象的附加模块时,您需要显式索引它们。
有两个不同的选项(易于实现)。
使用Jandex Maven插件
只需将以下内容添加到您的pom.xml中:
<build>
<plugins>
<plugin>
<groupId>org.jboss.jandex</groupId>
<artifactId>jandex-maven-plugin</artifactId>
<version>1.0.5</version>
<executions>
<execution>
<id>make-index</id>
<goals>
<goal>jandex</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
如果依赖项在项目外部,并且您希望一劳永逸地建立索引,这是最有益的选择。
添加一个空的META-INF / beans.xml
如果您在META-INF/beans.xml
中添加一个空的src/main/resources
文件,这些类也将被索引。
这些类将被Quarkus本身索引。
索引其他依赖项
如果您不能修改依赖关系(例如,考虑第三方依赖关系),则仍可以通过在application.properties
中添加条目来对其建立索引:
quarkus.index-dependency.<name>.group-id=
quarkus.index-dependency.<name>.artifact-id=
quarkus.index-dependency.<name>.classifier=(this one is optional)
使用<name>
作为您用来识别依赖项的名称。
答案 1 :(得分:0)
我曾尝试添加Jandex索引,添加beans.xml以及将其他依赖项编入索引,如@emre-işık答案中所述,但是我的第三方类(EpAutomationRs)未注册为在本机模式下进行反射。 因此,我最终得到了一个快速且肮脏的注册解决方案(请参阅下文)。 我创建了一个未使用的REST JSON端点,该端点返回了该类。
/**
* the purpose of this method is to register for reflection EpAutomationRs class
*
* @return
*/
@GET
@Path(GET_EMPTY_RS)
@Produces(MediaType.APPLICATION_JSON)
public EpAutomationRs entry() {
return new EpAutomationRs();
}
答案 2 :(得分:0)
对于gradle用户,您可以在所依赖模块的build.gradle中使用this插件。