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

如何使用Gradle设置多项目Grails?,grails,gradle,Grails,Gradle,我正在尝试为多项目grails应用程序设置gradle构建脚本。 我已经使用了,并将其安装并运行,以创建一个新的应用程序 但是,当我想将现有的grails多项目应用程序转换为使用gradle时,我会遇到一些问题 我已在我的settings.gradle文件中声明了所有子项目,如下所示: include 'core', //Plugins 'plugin1', 'plugin2' 包括“核心”, //插件 “plugin1”, “插件2” 对于每个

我正在尝试为多项目grails应用程序设置gradle构建脚本。 我已经使用了,并将其安装并运行,以创建一个新的应用程序

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

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

include 'core', //Plugins 'plugin1', 'plugin2' 包括“核心”, //插件 “plugin1”, “插件2” 对于每个子项目,在其自己的build.gradle文件中设置其依赖项。例如 plugin1依赖于plugin2,因此我在plugin1的build.gradle文件中声明了以下内容:

dependencies { compile project(':plugin2') } 依赖关系{ 编译项目(':plugin2') } 但是,当我尝试运行gradle test命令时,出现以下错误:

未解析的依赖项

出了什么问题:
任务“:plugin1:test”的执行失败。
原因:无法解析配置的所有依赖项:plugin1:runtime:
-未解决的依赖项:{}#plugin2;1.5-快照{}#plugin2中未找到配置;1.5-快照:“默认”。它是从{}#plugin1需要的;1.5-快照编译

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


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

结果表明grails gradle插件没有应用
groovy
java
插件,只添加了
java
插件通常添加的一些配置,即
compile
运行时
测试
。因此,没有通常在跨项目依赖关系中使用的
default
配置,也没有存储项目生成的工件的
archive
配置

所以这个插件目前似乎不支持这种配置。还请注意,通常Grails插件依赖项也不会在
build.gradle
中处理。我认为我们可以尝试修复它,但我意识到我并不完全理解您的用例

我相信你现在想要完成的就是写作

grails.plugin.location.'plugin-tws-communication' = "../plugin-tws-communication"
在主项目的
BuildConfig.groovy
中,但是从Grails的角度来看,插件之间的关系是什么?是:

  • 安装依赖项(如插件定义中的
    dependsOn
    map)
  • 构建顺序依赖关系(因此必须先构建一个插件,然后再构建另一个插件?这样我们就可以通过tasks
    dependsOn
    来完成它)
  • 编译依赖项(因此一个插件需要从另一个插件编译类)

    • 如果其他人也有同样的问题,我会回答自己的问题

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

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

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

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

      dependsOnChildren()
      
      include "pluginA","pluginB","pluginC"
      
      在我的root
      settings.gradle
      中,我声明:

      dependsOnChildren()
      
      include "pluginA","pluginB","pluginC"
      
      在pluginB:s build.gradle文件中,我声明

      dependsOn(":pluginC")
      
      这解决了我的问题。然而,它也引入了另一个问题,即每个插件的测试都是编译的,但没有执行

      我找到了解决办法@

      我在
      scripts
      文件夹中为每个子项目创建了一个
      \u Events.groovy
      文件,其中包括:

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

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

      通过主构建文件中的
      子项目
      闭包将“grails”插件添加到子项目中。Stacktrace可以在这里查看:感谢您的回复。所有子项目都通过主构建文件中的
      子项目
      闭包拥有grails插件。stacktrace可以在这里找到:@Mathias我已经重写了我的答案,以包含来自您答案的输入。为了澄清我的用例,我想说这是我在插件之间的最后一个关系(编译依赖关系),但是有些插件更像是构建顺序依赖关系。