2016-03-18 15 views
6

Tüm -SNAPSHOT bağımlılıklarını yerel bir alt projeyle değiştirmeye çalışıyorum. iyi çalışıyor, ancak bir sorun var: Ben kullanmak istiyorum proje yapılandırmasını tanımlayamazsınız (o runtime uzandığı, default alır ve bunu istemiyorum):Proje yapılandırmasıyla birlikte yapılan çakışma bağımlılığı

configurations.all { 
    resolutionStrategy.dependencySubstitution { 
     all { dependency -> 
      if (!dependency.requested.version.endsWith('SNAPSHOT')) 
       return 
      def isRootProject = rootProject.name.equals(dependency.requested.module) 
      def matching = rootProject.subprojects.find { 
       it.name.equals(dependency.requested.module) 
      } 
      if (isRootProject) 
       dependency.useTarget rootProject 
      else if (matching) 
       // The specified syntax with path: and configuration: does not work. How can I do ? 
       dependency.useTarget project(path: ":" + dependency.requested.module, configuration: 'compile') 
      else 
       println 'Keep SNAPSHOT: ' + dependency.requested.module; 
     } 
    } 
} 

biliyorum Neden çalışmazsa, belgeler oldukça açık: https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/DependencySubstitutions.html#project%28java.lang.String%29 bir yapılandırma adını desteklemiyor.

Bu sınırlama için bilinen bir çözüm var mı? senin settings.gradle dosyasında

cevap

0

için bu doğrultuda bir şey yapabilirsiniz:

def myDeps = ['my-dependency', 'my-dependency-2'] 
for (String projectName : myDeps) { 
    if (new File(rootDir, '../' + projectName).exists()) { 
    def path = '../' + projectName 
    def mod = 'my.company:' + projectName 
    System.out.println("Adding composite build for project: " + projectName + " using path: " + path + " replacing module: " + mod); 
    includeBuild(path) { 
     dependencySubstitution { 
     substitute module(mod) with project(':') 
     } 
    } 
    } else { 
    System.out.println("Skipping composite build for project: " + projectName); 
    } 
} 

Eğer fantezi iseniz, yaptığımız gibi yapın ve bağımlılıkları statik listesini kullanamaz. Bunun yerine, mevcut projeleri otomatik olarak keşfedebilirsiniz. Bu, şirketinizin her bağımlılıkta statik bir yapılandırma şablonunu takip etmesini gerektirir, çünkü dosyaları el ile ayrıştırmanız gerekir.

İlgili konular