Как ссылаться на библиотеку Kotlin из другого проекта в мультипроекте Gradle в Eclipse? - PullRequest
0 голосов
/ 13 сентября 2018

Предпосылка

Я работаю над проектом Kotlin с общей библиотекой и несколькими другими модулями, использующими эту библиотеку - структура проекта соответствует рекомендациям руководства для нескольких проектов Gradle :

parent-project
├──library
│  ├──src\main\kotlin\...
│  │  └──UsefulThing.kt
│  └──build.gradle
├──application
│  ├──src\main\kotlin\...
│  │  └──Main.kt
│  └──build.gradle
├──build.gradle
└──settings.gradle

application\build.gradle ссылается на модуль :library как на зависимость, и оба модуля включены в базу settings.gradle.

Когда я работаю над этим проектом с IntelliJ IDEA, все работает как положено. Однако мой коллега предпочитает работать с Eclipse и должен иметь возможность сотрудничать со мной, поэтому мы попытались импортировать проект Gradle в Eclipse. И не удалось ...

Задача

Вот как мы думаем, это должно работать:

  1. Создать новое рабочее пространство в Eclipse (вероятно, не нужно, просто для безопасности)
  2. Установите плагин Kotlin из Eclipse Marketplace (требуется только один раз) см. Здесь , чтобы узнать, как
  3. Щелкните правой кнопкой мыши по Package Explorer (или откройте меню «Файл»)> «Импорт» >> «Gradle»> «Существующий проект Gradle»> «Далее» >> Войдите в корневой каталог> «Готово»
  4. Отметьте проекты Kotlin, щелкнув их правой кнопкой мыши> «Настроить Kotlin»> «Добавить Kotlin Nature»
  5. Продолжайте работать как обычно, в конце концов, используя «Debug As»> «1 Kotlin Application» на Main.kt, чтобы запустить его, подобно тому, как это делается в IntelliJ IDEA

Проблема возникает на шаге 5 при попытке запустить модуль, который импортирует класс из другого модуля. Через некоторое время в консоли Eclipse появится сообщение Error: Could not find or load main class test.stackoverflow.example.application.MainKt. Другое окно консоли под названием org.jetbrains.kotlin.ui.console показывает более подробную информацию:

ERROR: Unresolved reference: library (3, 35)
ERROR: Unresolved reference: UsefulThing (7, 14)

library - это библиотечный модуль, UsefulThing определенный в нем класс, на который ссылается Main.kt в модуле application.

Пользовательский интерфейс Eclipse не показывает ошибок, и указанный проект отображается в разделе «Проект и внешние зависимости», как и ожидалось.

Я подозреваю, что Eclipse неправильно передает информацию о зависимостях в плагин Kotlin, и это как-то вызвано иерархической структурой проекта. При попытке сделать то же самое с двумя проектами Kotlin, созданными в Eclipse (без Gradle и без иерархической структуры), все работало правильно.

Попробуй дома

Я подготовил минимальный работающий (или не работающий, в данном случае) пример , который вы можете загрузить. Пример был создан с помощью IntelliJ IDEA. Это нетронутый (без строительных артефактов и т. Д.) И нетронутый Eclipse. При попытке импортировать и запустить его в соответствии с шагами, перечисленными выше, описанная проблема появляется 100% времени.

Что мы пробовали до сих пор

  • Добавление модуля библиотеки в путь сборки модуля приложения через свойства модуля приложения.
  • Запуск задач Gradle для сборки напрямую (работает без проблем, но не устраняет ошибку при попытке отладки)
  • Добавление плагина Gradle Eclipse в соответствии с рекомендациями некоторых руководств (например, этот ответ SO ). Похоже, это автоматически добавляет «Kotlin Nature» (см. Шаг 4 выше), но ничего не делает для решения нашей проблемы.
  • Использование разных версий JDK

Подробнее

Мы используем

  • Windows 10 v1803 (но также воспроизводит проблему на компьютере с Windows 7)
  • IntelliJ IDEA Community Edition 2018.1.6
  • Eclipse Photon Release 4.8.0
    • Плагин Kotlin для Eclipse 0.8.6
    • Buildship Gradle Integration 2.0
  • Oracle Java JDK 1.8.0 (также попытался и не удалось с 1.9)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...