2016-03-18 15 views
6

Sto cercando di sostituire tutte le dipendenze -SNAPSHOT con un progetto secondario locale. funziona benissimo, ma ho un problema: non riesco a definire la configurazione di progetto che voglio usare (ci vuole default, che si estende runtime, e non voglio che):Sostituzione dipendenza gradle con configurazione progetto

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

lo so perché non funziona, la documentazione è abbastanza chiara: https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/DependencySubstitutions.html#project%28java.lang.String%29 non supporta un nome di configurazione.

Esiste una soluzione nota per questa limitazione?

risposta

0

Nella tua settings.gradle file che si potrebbe fare qualcosa del genere:

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

Se si è di fantasia, si può fare come noi e non si utilizza un elenco statico di dipendenze. Invece, puoi scoprire automaticamente i progetti presenti. Ciò richiede che la tua azienda segua un modello statico di configurazione in ogni dipendenza perché devi analizzare i file manualmente.