Библиотека Kotlin экспортируется в виде Jar-файла, используемого в коде Java, но не в коде Kotlin - PullRequest
1 голос
/ 04 апреля 2019

Я написал служебную библиотеку для проекта, над которым я работаю в Котлине. Проект имеет ряд зависимостей (например, библиотеки AWS). Я хочу упаковать библиотеку как «толстый» .jar, чтобы я мог без проблем использовать библиотеку в других проектах.

В настоящее время я использую плагин gradle shadow. Я могу успешно использовать классы .jar в Java-коде / проектах без проблем. Однако при использовании классов .jar в проектах / коде Kotlin (или при попытке) я сталкиваюсь с проблемами видимости (код не компилирует b / c неразрешенных ссылок). Я понятия не имею, что я делаю неправильно, и я не уверен, является ли это общей проблемой.

Я уже пробовал:

  • Плагин Gradle Shadow здесь
  • Модификация задачи gradle jar для включения всех зависимостей самостоятельно

Жирная банка успешно создана в обоих случаях и может использоваться в коде Java, но Kotlin не может разрешить ссылки. Однако, когда я создаю неполную флягу, классы видимы, но очевидно сломаны (bc отсутствующих зависимостей). Поэтому, по сути, только когда я создаю толстый .jar, только мой код Kotlin не может использовать библиотеку.

У кого-нибудь есть понимание?

1 Ответ

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

Скорее всего, в вашем повторно упакованном JAR отсутствуют файлы META-INF/*.kotlin_module из исходных JAR. Это файлы метаданных пакета Kotlin, которые компилятор Kotlin должен иметь для чтения объявлений верхнего уровня из классов.

Если эти файлы будут потеряны, вы столкнетесь с проблемами видимости с объявлениями и расширениями верхнего уровня.

Вам необходимо сконфигурировать ваши толстые инструменты JAR, чтобы также копировать эти файлы в получившийся JAR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...