2012-11-14 166 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" 
} 
相關問題