2014-01-07 75 views
0

在我的項目,這是項目根部分:在gradle中,子項目是否可以覆蓋rootProject中定義的resolutionStrategy?

configure(allprojects) { 
    apply plugin: "java" 
    apply plugin: "idea" 
    apply plugin: "eclipse" 
    apply from: "${gradleScriptDir}/ide.gradle" 

    group = "org.springframework.data" 

    configurations.all { 

    // Hack to let Gradle pickup latest SNAPSHOTS 
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds' 

    // Force all core Spring Framework libraries into the same version 
    resolutionStrategy.eachDependency { DependencyResolveDetails details -> 
     if (details.requested.group == 'org.springframework') { 
      details.useVersion "$springVersion" 
     } 
    } 
... 

在一個具體的子項目,我想改變應用的版本,並使用另一個。我嘗試過放置配置{},配置{}和簡單的resolutionStrategy,但它們都不起作用。這是可能的,還是一個標誌,我需要將這個子項目完全移出到一個不同的項目?

UPDATE:

我嘗試這樣做:

project("spring-data-rest-boot") { 
    apply plugin: "spring-boot" 
    description = "Spring Data REST example using Spring Boot" 

    configurations { 
     resolutionStrategy.eachDependency { DependencyResolveDetails details -> 
      if (details.requested.group == 'org.springframework') { 
       details.useVersion "4.0.0.RELEASE" 
      } 
     } 
    } 
... 

,並得到這樣的:找不到上配置的論點[build_p7c7h594c24dhb3ll7q8nj34m $ _run_closure4_closure19_closure21 @ 3eff4d1f]法eachDependency():彈簧數據休息-boot:resolutionStrategy」。

此:

project("spring-data-rest-boot") { 
    apply plugin: "spring-boot" 
    description = "Spring Data REST example using Spring Boot" 

    resolutionStrategy.eachDependency { DependencyResolveDetails details -> 
     if (details.requested.group == 'org.springframework') { 
      details.useVersion "4.0.0.RELEASE" 
     } 
    } 
... 

產生這樣的:項目找不到屬性「resolutionStrategy」「:彈簧數據休息啓動」。

+0

你是什麼意思「遷出到另一個項目」?一個子項目是一個不同的項目(在同一個版本中)。你的意思是「不同的構建腳本」? –

+0

另外,你究竟做了什麼,它究竟做了什麼不工作? –

+0

除了包含我的新演示應用程序的子文件夾之外,在整個項目結構之外的另一個文件夾中創建一個完全獨立的應用程序。 – gregturn

回答

0

相關性規則是每個配置,配置是每個項目。爲了讓您的新規則的工作,你必須使用你allprojects下使用相同的,正確的語法:

project("spring-data-rest-boot") { 
    ... 
    configurations.all { 
     resolutionStrategy.eachDependency { ... } 
    } 
} 

但是,如果你把allprojects爲第一依賴規則,你將最終有兩個競爭規則spring-date-rest-boot,這提出了誰會贏的問題。

如果僅僅是需要特殊處理一個單一的項目,您還可以使用條件在allprojects規則:

allprojects { 
    ... 
    resolutionStrategy.eachDependency { DependencyResolveDetails details -> 
     if (details.requested.group == 'org.springframework') { 
      if (project.name == "spring-data-rest-boot") { 
       details.useVersion("4.0.0.RELEASE") 
      } else { 
       details.useVersion(springVersion) 
      } 
     } 
    } 
} 

可能工作另一個解決方案是簡單地改變springVersion值:

project("spring-data-rest-boot") { 
    ... 
    springVersion = "4.0.0.RELEASE" 
} 

還有更多的方法可以解決這個問題,但我希望你現在就能明白這個主意。

+0

謝謝。這給了我幾個選擇。 – gregturn

相關問題