2016-03-18 25 views
6

-SNAPSHOTすべての依存関係をローカルサブプロジェクトに置き換えようとしています。それが正常に動作しますが、私は問題を持っている:私は、私が使用したいプロジェクト構成を定義することはできません(それはruntimeを拡張した、defaultを取り、私はそれをしたくない):プロジェクト構成を使用したGradle依存関係置換

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は設定名をサポートしていません。

この制限には、既知の回避策がありますか?あなたのsettings.gradleファイルで

答えて

0

は、あなたがそれらの線に沿って何かをすることができます:

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

あなたが空想している場合、あなたは我々がそうであるように行うと、依存関係の静的リストを使用することはできません。代わりに、現在のプロジェクトを自動検出することができます。これには、ファイルを手動で解析する必要があるため、依存関係ごとに構成の静的テンプレートに従う必要があります。

関連する問題