2016-03-18 2 views
6

Я пытаюсь заменить все зависимости -SNAPSHOT на локальный подпроект. она работает нормально, но у меня есть вопрос: Я не могу определить конфигурацию проекта, который я хочу использовать (он принимает default, который проходит runtime, и я не хочу этого):Замена зависимостей град с конфигурацией проекта

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

Я знаю, почему это не работает, документация довольно ясна: https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/DependencySubstitutions.html#project%28java.lang.String%29 не поддерживает имя конфигурации.

Есть ли известное обходное решение для этого ограничения?

ответ

0

В вашем settings.gradle файл, который вы могли бы сделать что-то вдоль этих линий:

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

Если вы фантазии, вы можете сделать, как мы делаем, и не использовать статический список зависимостей. Вместо этого вы можете автоматически обнаружить настоящие проекты. Это требует, чтобы ваша компания следила за статическим шаблоном конфигурации в каждой зависимости, потому что вам нужно вручную анализировать файлы.