我正在尝试为多项目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 回答
我回答我自己的问题如果其他人有同样的问题 .
我想为多项目grails应用程序(一个主应用程序,它依赖于位于不同文件夹中的几个grails-plugins)设置构建顺序 .
我最后在每个子项目构建文件中声明了
dependsOn()
.Example: 我的主要应用程序依赖于pluginA和pluginB . PluginB依赖于PluginC
在我的根
build.gradle
我声明:在我的根
settings.gradle
我声明:在我声明的pluginB:s build.gradle文件中
这解决了我的问题 . 然而,它还引入了另一个问题,即每个插件的测试都已编译但未执行 .
我找到了一个解决方案@ GRAILS-7296
我在每个子项目的
scripts
文件夹中创建了一个_Events.groovy
文件,其中包括:这解决了我的所有问题,现在我有一个使用Gradle进行构建的multiproject-grails应用程序 .
事实证明,grails-gradle-plugin不适用
groovy
或java
插件,只添加了java
插件通常添加的一些配置,即compile
,runtime
和test
. 因此,没有default
配置通常用于跨项目依赖项,也没有archive
配置存储项目生成的工件 .所以此插件似乎不支持此类配置 . 另请注意,通常也不会在
build.gradle
中处理Grails插件依赖项 . 我认为我们可以尝试修复它,但我意识到我并不完全理解你的用例 .我相信你现在想要完成的事情与写作相当
在
BuildConfig.groovy
中,主要项目,但Grails视角插件之间的关系是什么?是吗:安装依赖项(如插件定义中的
dependsOn
map)构建顺序依赖(所以一个插件必须在另一个之前构建?然后我们可以用任务
dependsOn
完成它)编译依赖(因此一个插件需要另一个插件才能编译)