Предпосылка
Я работаю над проектом 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. И не удалось ...
Задача
Вот как мы думаем, это должно работать:
- Создать новое рабочее пространство в Eclipse (вероятно, не нужно, просто для безопасности)
- Установите плагин Kotlin из Eclipse Marketplace (требуется только один раз) см. Здесь , чтобы узнать, как
- Щелкните правой кнопкой мыши по Package Explorer (или откройте меню «Файл»)> «Импорт» >> «Gradle»> «Существующий проект Gradle»> «Далее» >> Войдите в корневой каталог> «Готово»
- Отметьте проекты Kotlin, щелкнув их правой кнопкой мыши> «Настроить Kotlin»> «Добавить Kotlin Nature»
- Продолжайте работать как обычно, в конце концов, используя «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)