2016-03-18 7 views
6

Ich versuche, alle -SNAPSHOT Abhängigkeiten mit einem lokalen Unterprojekt zu ersetzen. es funktioniert gut, aber ich habe ein Problem: Ich kann die Projektkonfiguration definieren, die ich verwenden möchte (es dauert default, die runtime erstreckt, und ich will, dass nicht):Gradle Abhängigkeit Substitution mit Projektkonfiguration

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; 
     } 
    } 
} 

Ich weiß, warum es nicht funktioniert, ist die Dokumentation ziemlich klar: https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/DependencySubstitutions.html#project%28java.lang.String%29 es unterstützt keinen Konfigurationsnamen.

Gibt es eine bekannte Problemumgehung für diese Einschränkung?

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); 
    } 
} 

Wenn Sie Lust haben, können Sie tun, was wir tun, und nicht eine statische Liste von Abhängigkeiten verwenden:

Antwort

0

In Ihrem settings.gradle Datei, die Sie etwas in diese Richtung tun könnte. Stattdessen können Sie die aktuellen Projekte automatisch erkennen. Dies erfordert, dass Ihr Unternehmen in jeder Abhängigkeit eine statische Konfigurationsvorlage verwendet, da Sie die Dateien manuell analysieren müssen.

Verwandte Themen