3

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

  • 用于 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 应用程序相关联。
  • 理想情况下,我希望能够在 gradle 中使用依赖声明来做到这一点,但这可能是一个白日梦......

我有哪些选择?

  1. 将任务添加到 gradle 中的 grails 构建生命周期以构建任何依赖的 jar 并将它们复制到 grails lib 文件夹中?
  2. 通过使用 Events.groovy 或类似方法调用 grails 来构建和打包依赖的 jar,从而挂钩到 grails 构建生命周期。这将涵盖 IntelliJ 和命令行路由。
  3. 将接口构建为 grails 插件?我打折了这一点,因为它们也需要在非 grails 项目中使用。

任何帮助/建议将不胜感激。

4

3 回答 3

2

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

compile project(':dependent-project')

适用于运行应用程序和战争......

于 2012-11-15T13:49:38.970 回答
0

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

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

我没有考虑过将 gradle 挂钩到事件生命周期(有趣的想法,顺便说一句),而是定义了一个包装 grails 应用程序的 gradle 项目(执行测试应用程序、运行应用程序等)。我的 grails 应用程序的 gradle 包装器依赖于其他组件的install任务,因此它总是检查它是否需要重新构建。

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

于 2012-11-15T00:48:10.277 回答
0

我目前的解决方案是:

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

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

我的 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"
}
于 2012-11-15T11:50:05.873 回答