Как создать индекс Jandex в Quarkus для классов во внешнем модуле - PullRequest
7 голосов
/ 04 апреля 2019

Прежде всего, у меня есть многомодульная иерархия maven, подобная этой:

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

Итак, теперь к проблеме:

Я пишу JAX-RS Endpoint в сервисном модуле, который использует классы в API-библиотеке.
Когда я запускаю 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.

Так что я думаю, что мне нужно добавить их в индексную зависимость Jandex в application.properties.

Но как я могу добавить индексные зависимости Jandex в quarkus?

1 Ответ

9 голосов
/ 04 апреля 2019

Quarkus автоматически индексирует основной модуль, но, когда у вас есть дополнительные модули, содержащие компоненты CDI, сущности, объекты, сериализованные как JSON, вам необходимо явно проиндексировать их.

Существует несколько различных (простых в реализации) варианты сделать это.

Использование плагина Jandex Maven

Просто добавьте следующее в ваш pom.xml:

<build>
  <plugins>
    <plugin>
      <groupId>org.jboss.jandex</groupId>
      <artifactId>jandex-maven-plugin</artifactId>
      <version>1.0.6</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>, которое вы выбираетеопровергайте вашу зависимость.

...