如何在多项目grails / gradle构建中包含依赖jar?

时间:2012-11-14 11:51:37

标签: grails intellij-idea gradle

我的项目中有以下设置......

  • SOA样式项目的多项目gradle构建,使用rabbitmq和spring集成连接在一起。
  • 包含许多grails项目以及用于表示服务的普通java / groovy项目。
  • 每个服务项目旁边都是一个项目(jar),其中包含可以使用spring集成代理的服务的所有公共接口(和消息)。
  • 项目使用gradle依赖项相互关联,然后使用gradle idea插件生成IntelliJ项目文件。

我想做的是:

  • 在grails项目中包含接口jar,以便我可以使用spring集成来通过rabbitmq将我的调用代理到服务中。
  • 当我运行grails应用程序时,这个接口jar已构建并包含在grails中。
  • 当我从IntelliJ运行grails应用程序时,它会编译最新版本的接口并将它们包含在grails项目中。
  • 当我从gradle构建整个项目时,让gradle正确地将接口jar与grails app相关联。
  • 理想情况下,我希望能够在gradle中使用依赖声明来做到这一点,但这可能是个梦想......

我有什么选择?

  1. 在gradle中将任务添加到grails构建生命周期中以构建任何相关的jar并将它们复制到grails lib文件夹中?
  2. 通过使用Events.groovy或类似的方式挂钩到grails构建生命周期,以调用grails来构建和打包依赖的jar。这将涵盖IntelliJ和命令行路由。
  3. 将接口构建为grails插件?我已经打了折扣,因为它们也需要在非Grails项目中使用。
  4. 任何帮助/建议都将不胜感激。

3 个答案:

答案 0 :(得分:2)

原来我需要做的就是添加以下内容然后grails插件为我处理依赖项...

compile project(':dependent-project')

适用于run-app和war ......

答案 1 :(得分:0)

问题的部分解决方案是使用Gradle和Grails maven插件。我有类似的情况,我正在构建与Grails项目的依赖关系的jar。

我选择的方法是将install java工件放入本地.m2 / repo,然后使用mavenLocal()repo在grails/conf/BuildConfig.groovy下声明依赖关系。

我没有考虑的是将gradle挂钩到事件生命周期(有趣的想法,顺便说一句),而是定义了一个包装grails应用程序的gradle项目(执行test-app,run-app等)。我的grails应用程序的gradle包装器依赖于另一个组件的install任务,所以它总是检查是否需要重建它。

我是Eclipse用户,所以我不能对你问题的Intellij部分发表评论,但上面的内容对我有用,所以我希望它能给你一些想法吗?

答案 2 :(得分:0)

我目前的解决方案是:

  • 使用grails / gradle插件构建grails项目。
  • 使用此插件运行我的grails应用程序,即。 gradle grails-run-app。
  • 在gradle(即动创建)中挂钩grails-run-app任务,调用构建并将依赖项复制到lib目录中的任务。

目前这对IntelliJ的整个负载没有帮助,但我将以IntelliJ运行配置运行我的gradle任务。

我的build.gradle如下所示(依赖项目在这个例子中是jarred并放在lib中):

import org.grails.gradle.plugin.GrailsTask

evaluationDependsOn(':dependent-project')

buildscript {
    repositories {
        mavenCentral()
        mavenRepo name: "grails", url: 'http://repo.grails.org/grails/repo'
    }
    dependencies {
        classpath "org.grails:grails-gradle-plugin:1.1.1-SNAPSHOT"
    }
}

repositories {
    mavenCentral()
    mavenRepo name: "grails", url: 'http://repo.grails.org/grails/repo'
}

ext {
    version = "1.0"
    grailsVersion = "2.2.0.RC2"
    grailsTaskPrefix = "grails-"
}

apply plugin: "grails"

dependencies {
    ['dependencies', 'resources', 'core', 'test', 'hibernate', 'plugin-datasource', 'plugin-domain-class', 'plugin-tomcat', 'plugin-services'].each { plugin ->
        compile "org.grails:grails-$plugin:2.2.0.RC2"
    }
    bootstrap "org.codehaus.groovy:groovy-all:2.0.5"
}

// Get hold of the grails-run-app task (which is created on the fly) and add a dependency to the copyDependencies task
project.gradle.afterProject { p, ex ->
    if (p == project) {
        project.tasks.addRule("Grails dependencies") { String name ->
            if (name.startsWith(grailsTaskPrefix)) {
                tasks.getByName(name).dependsOn(copyDependencies)
            }
        }
    }
}

// Build and copy any dependent jar files...
task copyDependencies(type: Sync) {
    from project(':dependent-project').configurations.archives.allArtifacts.files
    into "$projectDir/lib"
}