簡體   English   中英

通過瞬時Scala依賴關系為spring-xd項目優化gradle

[英]Optimize gradle for spring-xd project with transient scala dependency

我正在一個項目中,該項目包含用於Spring XD的一系列模塊子項目,這些子項目恰好對恰好使用Scala的非模塊子項目具有臨時依賴關系:

ext {
  springXdVersion = '1.1.0.RELEASE'
  moduleProjects  = subprojects.findAll { project -> project.path.startsWith(':modules.')}
  javaProjects    = subprojects - (moduleProjects + nonJavaProjects)
}

configure(moduleProjects) { moduleProject ->
  apply plugin: 'spring-xd-module'
}

project('core-dependency') {
  apply plugin: 'scala'
  // configuration/dependencies
}

project('modules.source.example') {
  dependencies {
    provided(":core-dependency")
  }
}

// More modules bearing resemblance to modules.source.example

最終將核心依賴性設置為位於我們的xd容器的類路徑中,並以這種方式在運行時將其提供給模塊。

不幸的是,似乎對於使用它的每個模塊,都會重新編譯核心依賴性(這特別昂貴,因為它還包括一個scala編譯器)。 這會導致構建在30分鍾以內運行,我希望對此進行改進。 有沒有辦法減少構建時間? 理想情況下,我不想重新編譯內核依賴性,但是考慮到bootRepackage似乎負責為每個模塊觸發它,因此我不確定如何實現這一目標。 我還嘗試了其他技巧,例如並行性,但是到目前為止,這樣做只能凍結我的系統。 我正在使用gradle 2.1。

我應該注意,gradle配置文件報告表明,對於每個模塊,大部分時間是在configureModule步驟中進行的,根據spring-xd repo的說法,該步驟如下所示:

project.task('configureModule') << {
            project.configurations.provided.resolvedConfiguration.firstLevelModuleDependencies.each {
                excludeTransitiveDependencies(project, it)
            }
        }

scala依賴項來自SpringXD中的Spark streaming集成。 我們正在努力消除spring-xd-dirt上的spark依賴項,並將其從模塊中提供:

https://jira.spring.io/browse/XD-2857

您依賴哪個特定的非模塊子項目? 如果它是spring-xd-module ,那么您可以嘗試1.2.0.M1,其中我們已將spark依賴項從spring-xd-module移到spring-xd-dirt

在configureModule步驟中,將評估所有項目的可傳遞提供的依賴關系,即核心依賴關系。 速度下降是由核心依賴性所依賴的大量依賴性導致的,因此需要進行掃描。 由於我們希望避免因為花費時間太長而使configureModule掃描核心相關性,並且我們知道需要將其從模塊fatjar中排除,因此適當的操作步驟是從提供的配置中刪除核心相關性,並且只需自己將它排除在胖子外。

為此,對gradle構建腳本進行了如下修改:

ext {
  springXdVersion = '1.1.0.RELEASE'
  moduleProjects  = subprojects.findAll { project -> project.path.startsWith(':modules.')}
  javaProjects    = subprojects - (moduleProjects + nonJavaProjects)
}

configure(moduleProjects) { moduleProject ->
  apply plugin: 'spring-xd-module'

  configurations{
    core
    compile.extendsFrom(core)
  }

configurations.exported.exclude module: 'core-dependency'
}

project('core-dependency') {
  apply plugin: 'scala'
  // configuration/dependencies
}

project('modules.source.example') {
  dependencies {
    core project(":core-dependency")
  }
}

// More modules bearing resemblance to modules.source.example

“核心”配置本質上是第二個“提供的”配置,它不會被configureModule任務接受,從而避免了浪費時間對其進行評估。 它也從“導出”配置中排除,該配置的內容決定了bootRepackage構建的胖罐中的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM