[英]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.