How to create a Jandex index in Quarkus for classes in a external module

Emre Isik :

First of all, I have a multi-module maven hierarchy like that:

├── project (parent pom.xml)
│   ├── service
│   ├── api-library

So now to the problem:

I am writing a JAX-RS Endpoint in the service module which uses classes in the api-library.
When I start quarkus, I am getting this warning:

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.

This two classes com.example.Fruit and com.example.Car are located in the api-library module.

So I think I need to add them to the Jandex index-dependency in the application.properties.

But how can I add Jandex index-dependencies into quarkus?

Guillaume Smet :

Quarkus automatically indexes the main module but, when you have additional modules containing CDI beans, entities, objects serialized as JSON, you need to explicitly index them.

There are a couple of different (easy to implement) options to do so.

Using the Jandex Maven plugin

Just add the following to your pom.xml:

<build>
  <plugins>
    <plugin>
      <groupId>org.jboss.jandex</groupId>
      <artifactId>jandex-maven-plugin</artifactId>
      <version>1.0.7</version>
      <executions>
        <execution>
          <id>make-index</id>
          <goals>
            <goal>jandex</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

It's the most beneficial option if your dependency is external to your project and you want to build the index once and for all.

Adding an empty META-INF/beans.xml

If you add an empty META-INF/beans.xml file in your src/main/resources, the classes will also be indexed.

The classes will be indexed by Quarkus itself.

Indexing other dependencies

If you can't modify the dependency (think of a third-party dependency, for instance), you can still index it by adding an entry to your application.properties:

quarkus.index-dependency.<name>.group-id=
quarkus.index-dependency.<name>.artifact-id=
quarkus.index-dependency.<name>.classifier=(this one is optional)

with <name> being a name you choose to identify your dependency.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=35851&siteId=1