如何使用Gradle设置多项目Grails?

时间:2011-07-07 11:53:46

标签: grails gradle

我正在尝试为多项目grails应用程序设置gradle构建脚本。 我使用了grails-gradle plugin并启动并运行以创建新的应用程序。

但是,当我想将现有的grails多项目应用程序转换为使用gradle时,我遇到了一些问题。

我已在settings.gradle文件中声明了所有子项目,如下所示:

include 'core',

        //Plugins
        'plugin1',
        'plugin2'

并为每个子项目在其自己的build.gradle文件中设置其依赖项。例如 plugin1依赖于plugin2所以我在plugin1的build.gradle文件中声明了以下内容:

dependencies {
  compile project(':plugin2')
}

但是,当我尝试运行 gradle test 命令时出现以下错误:

无人解决的依赖

出了什么问题:
任务'执行失败':plugin1:test'。
原因:无法解析配置':plugin1:runtime'的所有依赖项:
     - 未解决的依赖关系:{}#plugin2; 1.5-SNAPSHOT:{}#plugin2中找不到配置; 1.5-SNAPSHOT:'default'。它来自{}#plugin1; 1.5-SNAPSHOT编译

我的问题是,如何在gradle中设置子项目依赖项?

我已经在每个子项目 BuildConfig.groovy 中将它们声明为内联依赖项,我是否也必须在gradle中声明它们?

2 个答案:

答案 0 :(得分:3)

我回答我自己的问题如果其他人有同样的问题。

我想设置多项目grails应用程序的构建顺序(一个主应用程序依赖于位于不同文件夹中的几个grails-plugins)。

我最后在每个子项目构建文件中声明dependsOn()

示例: 我的主要应用程序依赖于pluginA和pluginB。 PluginB依赖于PluginC

在我的根build.gradle中,我声明:

dependsOnChildren()

并在我的根settings.gradle中宣布:

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

在pluginB: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)
}

这解决了我所有的问题,现在我有了一个使用Gradle进行构建的multiproject-grails应用程序。

答案 1 :(得分:1)

事实证明,grails-gradle-plugin不适用groovyjava个插件,只添加了java插件通常添加的一些配置,即{{1} },compileruntime。因此,没有test配置通常用于跨项目依赖项,也没有default配置存储项目生成的工件。

目前看来此插件不支持此类配置。另请注意,通常不会在archive中处理Grails插件依赖项。我认为我们可以尝试修复它,但我意识到我并不完全理解你的用例。

我相信你现在想要完成的事情等同于写作

build.gradle
主要项目的grails.plugin.location.'plugin-tws-communication' = "../plugin-tws-communication" 中的

,但Grails视角的插件之间的关系是什么?是吗:

  • 安装依赖项(如插件定义中的BuildConfig.groovy地图)
  • 构建顺序依赖项(因此必须在另一个插件之前构建一个插件?然后我们可以使用任务dependsOn完成它)
  • 编译依赖项(因此一个插件需要另一个插件来编译)