Как настроить мультипроект Grails с помощью Gradle? - PullRequest
4 голосов
/ 07 июля 2011

Я пытаюсь настроить скрипт сборки Gradle для многопроектного приложения Grails.Я использовал плагин grails-gradle и запустил его для создания нового приложения.

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

Я объявил все подпроекты в моем файле settings.gradle следующим образом:

include 'core',

        //Plugins
        'plugin1',
        'plugin2'

и для каждого подпроекта установите свои зависимости в своих собственных файлах build.gradle.Например, plugin1 зависит от plugin2, поэтому я объявил следующее в файле build.gradle плагина1:

dependencies {
  compile project(':plugin2')
}

Однако при попытке выполнить команду gradle test я получил следующую ошибку:

Неразрешенные зависимости

Что пошло не так:Не удалось выполнить задачу ': plugin1: test'.Причина: не удалось разрешить все зависимости для конфигурации ': plugin1: runtime':- неразрешенная зависимость: {} # plugin2; 1.5-SNAPSHOT: конфигурация не найдена в {} # plugin2; 1.5-SNAPSHOT: 'по умолчанию'.Это требовалось из {} # plugin1; 1.5-SNAPSHOT compile

Мой вопрос: как мне установить зависимости подпроекта в gradle?

Я объявил их в каждом подпроекте BuildConfig.groovy как встроенные зависимости, я должен также объявить их в gradle?

Ответы [ 2 ]

3 голосов
/ 28 июля 2011

Я отвечаю на свой вопрос Если у кого-то еще есть такая же проблема.

Я хотел установить порядок сборки для многопроектного приложения grails (Основное приложение, которое зависело от нескольких плагинов grails, расположенных в отдельных папках).

В итоге я объявил dependsOn() в каждом файле сборки подпроекта.

Пример: Мое основное приложение зависит от плагина A и плагина B.PluginB зависит от PluginC

В моем корне build.gradle я объявил:

dependsOnChildren()

и в своем корне settings.gradle Я объявил:

include "pluginA","pluginB","pluginC"

В плагине B: s build.gradle файл, который я объявил

dependsOn(":pluginC")

Это решило мою проблему.Однако также появилась другая проблема: тесты для каждого плагина были скомпилированы, но не выполнены.

Я нашел решение для этого @ GRAILS-7296

Я создалФайл _Events.groovy в папке scripts для каждого подпроекта и включает:

// Override to workaround GRAILS-7296
org.codehaus.groovy.grails.test.support.GrailsTestTypeSupport.metaClass.getSourceDir = { ->
    new File(delegate.buildBinding.grailsSettings.testSourceDir, delegate.relativeSourcePath)
}

Это решило все мои проблемы, и теперь у меня есть приложение multiproject-grails, которое использует Gradle для сборки.

1 голос
/ 08 июля 2011

Оказывается, что плагин grails-gradle-plugin не применяется groovy или java плагинов, он добавляет только некоторые конфигурации, обычно добавляемые плагином java, а именно compile, runtime и test. Таким образом, нет ни конфигурации default, которая обычно используется в межпроектных зависимостях, ни конфигурации archive, в которой хранятся артефакты, созданные проектом.

Так что, похоже, такая конфигурация не поддерживается этим плагином в данный момент. Также обратите внимание, что, как правило, зависимости плагина Grails не обрабатываются в build.gradle. Я думаю, что мы можем попытаться это исправить, но я понял, что не совсем понимаю ваш вариант использования.

Я считаю, что то, что вы хотите сделать сейчас, - это что-то эквивалентное написанию

grails.plugin.location.'plugin-tws-communication' = "../plugin-tws-communication"

в BuildConfig.groovy для основного проекта, но как соотносятся плагины с точки зрения Grails? Это:

  • зависимость установки (как в dependsOn map в определении плагина)
  • зависимость порядка сборки (поэтому один плагин должен быть собран раньше, чем другой? Тогда мы можем выполнить его с помощью задач dependsOn)
  • зависимость компиляции (поэтому одному плагину нужны классы от другого для компиляции)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...