首页 文章

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

提问于
浏览
4

我正在尝试为多项目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 回答

  • 1

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

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

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

    Example: 我的主要应用程序依赖于pluginA和pluginB . PluginB依赖于PluginC

    在我的根 build.gradle 我声明:

    dependsOnChildren()
    

    在我的根 settings.gradle 我声明:

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

    在我声明的pluginB:s build.gradle文件中

    dependsOn(":pluginC")
    

    这解决了我的问题 . 然而,它还引入了另一个问题,即每个插件的测试都已编译但未执行 .

    我找到了一个解决方案@ GRAILS-7296

    我在每个子项目的 scripts 文件夹中创建了一个 _Events.groovy 文件,其中包括:

    // 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应用程序 .

  • 3

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

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

    我相信你现在想要完成的事情与写作相当

    grails.plugin.location.'plugin-tws-communication' = "../plugin-tws-communication"
    

    BuildConfig.groovy 中,主要项目,但Grails视角插件之间的关系是什么?是吗:

    • 安装依赖项(如插件定义中的 dependsOn map)

    • 构建顺序依赖(所以一个插件必须在另一个之前构建?然后我们可以用任务 dependsOn 完成它)

    • 编译依赖(因此一个插件需要另一个插件才能编译)

相关问题