Почему библиотека kotlin-рефлекса недоступна в упаковке, которую я упаковал? - PullRequest
0 голосов
/ 08 ноября 2019

Я строю библиотеку, написанную на Kotlin, и упаковываю ее в банку через Maven. В моем помпе у меня есть зависимость от артефактов kotlin-рефлекса. Я могу успешно скомпилировать и упаковать, но когда я пытаюсь использовать этот jar-файл в другом проекте (например, в сервисе), я получаю сообщение об ошибке: «Реализация отражения Kotlin не найдена во время выполнения. Убедитесь, что у вас есть kotlin-отражение. jar в пути к классам ". Если я включаю зависимость в pom службы, все работает, но я хочу, чтобы сам jar библиотеки уже имел эту зависимость, и пользователям библиотеки не нужно было добавлять эту зависимость в их файл pom.xml.

У меня естьпопытался изменить область в зависимости от компиляции до времени выполнения. Я просто не понимаю, почему kotlin -lect не будет упаковано в jar библиотеки.

<dependency>
  <groupId>org.jetbrains.kotlin</groupId>
  <artifactId>kotlin-reflect</artifactId>
  <version>1.3.50</version>
</dependency>

Ошибка, возникающая в службе:

Исключение в потоке "main "kotlin.jvm.KotlinReflectionNotSupportedError: Реализация отражения Kotlin не найдена во время выполнения. Убедитесь, что в пути к классам есть файл kotlin-refle.jar.

1 Ответ

0 голосов
/ 08 ноября 2019

То, что вы создали, это «тонкий» jar: он включает в себя только классы, скомпилированные из кода вашего проекта. не включает в себя зависимости.

(Вам все равно нужно указать зависимости в вашем POM, иначе он не сможет скомпилировать ваш код.)

Итак, ваши основные варианты:

  • Раздайте свою «тонкую» банку. Если это для вашего собственного использования, вы можете скопировать jar-файлы зависимостей в целевую среду и добавить их в ваш путь к классам в дополнение к тому, который вы создали. Или для библиотеки, которую вы предоставляете извне, вы можете просто перечислить зависимости в POM, который вы публикуете;тогда ваши пользователи должны забрать их оттуда.

  • Создайте «толстый» флягу, которая объединяет все зависимости в дополнение к вашему коду. См. этот вопрос для получения дополнительной информации об этом.

Если бы это было для веб-приложения, особенно с использованием Spring или аналогичного, вы могли бы вместо этого создать файл .war, который в любом случае объединяет зависимости.

...