Зависимости проекта Gradle в Eclipse с помощью Buildship

Я использую Eclipse Mars.2 (4.5.2) с Buildship 1.0.14. Версия Gradle 2.12.

Я импортирую свой проект Gradle в Eclipse. Перед импортом не существует файлов .project или .classpath. Все модули успешно импортированы. Но почти в каждом проекте с java-кодом пропущены зависимости и отображается красный крестик.

Если вы откроете файл Java с ошибкой, вы увидите, что Eclipse не может разрешить импорт. Но если вы откроете импортированный класс по имени, он сможет найти его в зависимости другого модуля.

Gradle -> Обновить проект не помогает.

Необходимые зависимости объявлены в корне build.gradle таким образом:

ext.library = [
    swagger: [
            [ group: "io.swagger", name: "swagger-annotations", version: "1.5.3" ],
            [ group: "io.swagger", name: "swagger-core", version: "1.5.3" ],
            [ group: "io.swagger", name: "swagger-jaxrs", version: "1.5.3" ]
    ]
]

и в модулях я объявляю это так:

dependencies {
    providedCompile library.swagger
}

Когда вы выполняете gradle build из командной строки или даже из Eclipse, сборка проходит успешно.

Пример небольшого проекта для воспроизведения этой проблемы можно найти на github ( спасибо RaGe за участие в этом).

Не могли бы вы помочь мне решить эту проблему с Eclipse?


person dds    schedule 14.04.2016    source источник
comment
Какую версию Gradle вы используете?   -  person RaGe    schedule 15.04.2016
comment
Вы используете плагин gradle war?   -  person RaGe    schedule 15.04.2016
comment
Версия Gradle 2.12. Да, используется военный плагин.   -  person dds    schedule 15.04.2016
comment
Невозможно воспроизвести с помощью eclipse mars 2 и buildship 1.0.14. Вот пример кода, который я использовал. При новом импорте в eclipse buildship загружает все swagger и переходные зависимости и импорт работает нормально.   -  person RaGe    schedule 15.04.2016
comment
RaGe, я смог изменить ваш пример, чтобы воспроизвести проблему. Разветвлено на github.com/ddska/SO-36633482-eclipse-with-buildship< /а>   -  person dds    schedule 15.04.2016
comment
Я еще не пробовал, но разве ваше изменение не выходит из командной строки gradle? Теперь предоставленная конфигурация Compile отсутствует в пути к классам компиляции.   -  person RaGe    schedule 15.04.2016
comment
Да, вы правы, извините. Будем и дальше пытаться воспроизвести.   -  person dds    schedule 15.04.2016


Ответы (2)


Отвечая со ссылкой на образец кода, который вы предоставили здесь.

Вы не используете военный плагин, а вместо этого объявляете свою собственную конфигурацию под названием providedCompile. Gradle и, соответственно, buildship/eclipse не знают, что означает providedCompile. Таким образом, зависимости, перечисленные вами в providedCompile, не используются в качестве зависимостей времени компиляции.

Из этого следует, что ваши операторы импорта становятся ошибками времени компиляции - как в eclipse, так и из командной строки gradle с gradle build

Вы можете добавить providedCompile в путь к классам компиляции, выполнив:

sourceSets.main.compileClasspath += [configurations.providedCompile]

Если вы также добавите плагин eclipse в свой проект, вы можете изменить путь к классу компиляции eclipse с помощью:

eclipse {
  classpath {
    plusConfigurations += [configurations.providedCompile]
  }
}
person RaGe    schedule 15.04.2016
comment
добавление плагина eclipse и настройка решили проблему, спасибо! - person dds; 15.04.2016
comment
здорово! Вы также должны рассмотреть вопрос о том, чтобы проголосовать за ответ. - person RaGe; 15.04.2016

Ребята из официального трекера ошибок сказали мне, что с gradle 2.12 теперь можно использовать область compileOnly, которая также по умолчанию подключена к Eclipse.

person dds    schedule 15.04.2016