2012-11-14 180 views
3

我有我的项目中的下列设置...如何在多项目grails/gradle构建中包含依赖jar?

  • 多的gradle项目建立一个SOA风格的项目,使用的RabbitMQ和Spring的集成连接在一起。
  • 包含许多grails项目以及普通的java/groovy项目来表示服务。
  • 除了每个服务项目之外,还有一个项目(jar),其中包含可以使用spring集成进行代理的服务的所有公共接口(和消息)。
  • 这些项目使用gradle dependencies相互关联,然后使用gradle idea插件生成IntelliJ项目文件。

我想要做的是:

  • 包含在Grails项目,这样我可以通过RabbitMQ的使用Spring的集成有没有代理我的电话到服务接口罐子。
  • 当我运行Grails应用程序时,这个interts 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项目中使用。

任何帮助/意见,将不胜感激。

回答

2

打开了所有我需要做的是添加以下内容,然后Grails的插件涉及的依赖关系对我来说...

compile project(':dependent-project') 

很好Works的运行应用程序和战争......

0

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

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

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

我是Eclipse用户,所以我不能评论你的问题的Intellij部分,但上面的作品对我来说,所以我希望它给你一些想法?

+0

感谢您的建议......我已经贴现的本地本地安装依赖的想法MAV因为我认为这是一个额外的步骤,如果罐子频繁更换会很烦人。我是否认为每次进行更改时,都必须增加存储库和grails项目中的版本以迫使其从存储库重新下载? –

0

我暂时的解决办法是:

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

这不会帮助IntelliJ整个负载,但我会运行我的gradle任务作为IntelliJ运行配置。

我的build.gradle如下(相关项目正在震动,放在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" 
} 
相关问题