我正在尝试为多项目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中声明它们?
答案 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不适用groovy
或java
个插件,只添加了java
插件通常添加的一些配置,即{{1} },compile
和runtime
。因此,没有test
配置通常用于跨项目依赖项,也没有default
配置存储项目生成的工件。
目前看来此插件不支持此类配置。另请注意,通常不会在archive
中处理Grails插件依赖项。我认为我们可以尝试修复它,但我意识到我并不完全理解你的用例。
我相信你现在想要完成的事情等同于写作
build.gradle
主要项目的grails.plugin.location.'plugin-tws-communication' = "../plugin-tws-communication"
中的,但Grails视角的插件之间的关系是什么?是吗:
BuildConfig.groovy
地图)dependsOn
完成它)