如何使用Gradle设置多项目Grails?
我正在尝试为多项目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命令时,出现以下错误: 未解析的依赖项 出了什么问题:如何使用Gradle设置多项目Grails?,grails,gradle,Grails,Gradle,我正在尝试为多项目grails应用程序设置gradle构建脚本。 我已经使用了,并将其安装并运行,以创建一个新的应用程序 但是,当我想将现有的grails多项目应用程序转换为使用gradle时,我会遇到一些问题 我已在我的settings.gradle文件中声明了所有子项目,如下所示: include 'core', //Plugins 'plugin1', 'plugin2' 包括“核心”, //插件 “plugin1”, “插件2” 对于每个
任务“: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的角度来看,插件之间的关系是什么?是:
- 安装依赖项(如插件定义中的
map)dependsOn
- 构建顺序依赖关系(因此必须先构建一个插件,然后再构建另一个插件?这样我们就可以通过tasks
来完成它)dependsOn
- 编译依赖项(因此一个插件需要从另一个插件编译类)
- 如果其他人也有同样的问题,我会回答自己的问题
我想为多项目grails应用程序(一个依赖于位于不同文件夹中的几个grails插件的主应用程序)设置构建顺序
最后,我在每个子项目构建文件中声明了一个
dependsOn()
示例:
我的主要应用程序依赖于pluginA和pluginB。PluginB依赖于PluginC
在我的rootbuild.gradle
中,我声明:
dependsOnChildren()
include "pluginA","pluginB","pluginC"
在我的rootsettings.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我已经重写了我的答案,以包含来自您答案的输入。为了澄清我的用例,我想说这是我在插件之间的最后一个关系(编译依赖关系),但是有些插件更像是构建顺序依赖关系。