Подтвердить что ты не робот

Получение Intellij IDEA (13+) для распознавания взаимосвязи модулей Gradle

У меня есть два проекта Gradle, назовите их Blue и Green. Зеленый цвет зависит от синего, как указано в build.gradle:

repositories {
  mavenLocal()
}

dependencies {
    compile 'org.example:blue:1.0'
}

Blue использует плагин Maven для создания соответствующего артефакта:

apply plugin: 'maven'
group = 'org.example'
version = '1.0'

Если я запускаю задачу install на синем, она создает JAR и POM и помещает их в мой ~/.m2/repository, без проблем.

Я импортирую Blue build.gradle в проект IDEA, и он создает модуль для Blue, опять же никаких проблем.

Если теперь я импортирую Green build.gradle в проект IDEA, он создаст модуль для Green, подберет Mavenized версию Blue из репозитория, создаст соответствующую библиотеку и добавит Blue-библиотеку в модуль Green как зависимость.

Однако, если я сейчас сделаю изменение кода в синем, это изменение кода не будет выбрано в Green. Зеленый будет продолжать использовать теперь устаревшую копию из репозитория Maven. Единственный способ получить синие изменения - это переустановить Blue, и что касается рефакторинга чего-то в синем и с рефакторингом, который охватывает использование в Green, забудьте об этом. Проблема.

Как я могу получить IDEA для распознавания взаимозависимостей между моими проектами Gradle и их соответствующими модулями IDEA?


Отредактировано для добавления: Многомодульный модуль не является вариантом, поскольку соответствующие зависимости распределяются между несколькими проектами приложений (не говоря уже о других проектах с общей библиотекой) и не подходят аккуратно в единую иерархическую структуру каталогов.


Отредактировано для добавления:. Указатель на то, что я в итоге придумал, см. этот ответ. Он по-прежнему требует ручного создания многомодульных проектов, когда вы хотите работать как с проектом, так и с его зависимостями, но он позволяет вам более или менее свободно менять исходные и двоичные зависимости.

4b9b3361

Ответ 1

Обнаружено следующее обходное решение:

После импорта Green build.gradle откройте "Параметры модуля" для модуля "Зеленый" (или выберите его в разделе "Структура проекта" ). Затем на вкладке "Зависимости" вручную добавьте "живые" зависимости и переместите их выше версий Gradle в списке:

screenshot of manually-added 'live' dependencies

Это будет сохраняться даже через "Обновить внешний проект" в "Зеленый" build.gradle, что полезно, когда вы его редактируете, чтобы добавить сторонние библиотеки и т.д.

Обратите внимание, что вы можете удалить версии Gradle (Gradle: blue-2.0-snapshot и т.д.), но они будут добавлены повторно при обновлении проекта.

Также стоит отметить: это позволит вам жить и редактировать рефакторинг Blue, Yellow и Green вместе, но если вам нужно сделать конструкцию Gradle по любой причине (например, если вы используете Gradle jettyRun для запуска webapp), вам нужно убедиться, что вы Gradle - install Синий и Желтый, потому что (пока мы не говорим о многомодульном проекте) Gradle только когда-либо собирается использовать консервированные версии из репо.

Ответ 2

Возможно, вам было бы лучше создать конструкцию Gradle с двумя подпроектами, а затем и Gradle, и IDEA немедленно закроет изменения.

Другая возможность заключается в замене зависимости от JAR в .m2/repository с JAR файлом в build вашего синего проекта или еще лучше с зависимостью модуля. Затем вы можете пропустить шаг публикации. Вы можете сделать это вручную или поместить его в build.gradle в качестве настройки модуля IDEA - http://www.gradle.org/docs/current/userguide/idea_plugin.html