Chapter 51.依存管理

12864 ワード

51.1紹介
                     ,Gradle                                。          Maven  Ivy,       Gradle        ,                。

Gradleが依存管理をサポートすることについて、いくつかのハイライトがあります.
  • 伝達依存管理:Gradleはあなたにプロジェクトの依存ツリーを十分に制御しました.
  • は管理されていない依存をサポートします.もしあなたの依存がバージョン管理や共有ハードディスクで非常に簡単なファイルであれば、Gradleはこれらをサポートする強力な機能を提供します.
  • はカスタム依存定義をサポートします.Gradleのモジュール定義は、構築スクリプトで依存階層を記述する能力を与えます.
  • 完全にカスタマイズ可能な依存解決方法:Gradleは、依存代替をより容易にするために、解決仕様をカスタマイズする能力を提供します.
  • MavenとIvyの完全な互換性:Maven POMまたはIvy fileに依存することを定義した場合、Gradleはシームレスに統合された人気のある構築ツールを提供します.
  • 既存の依存管理インフラストラクチャを統合:GradleはMavenとIVy倉庫に互換性があります.Archiva、Nexus、またはArtifactoryを使用する場合、Gradleはすべての倉庫フォーマットに完全に互換性があります.
                              ,                   。              ,                    ,         。                  ,Gradle        。
    

  • 51.1.1柔軟な依存管理移行
                                            。          Ant  Maven   Gradle,             。  ,         Ant      version-less jar        。                       。  Gradle,                          。    Gradle             。       ,                   ,              ,               。
    
                                Eclipse.classpath            , Gradle   Gradle              。        ,         。(  ,       ,   .claspath       ,    Gradle               。)
    

    51.1.2依存管理とJava
            ,               Java             。 Java ,          JVM,    Hibernate3.0.5  ,           foo-1.0.jar   bar-2.0.jar。                   。        Maven Ivy。Maven            ,  IVY        。
    
                XML    ,      jar      。          Jar pom  ,        Jar       。
                  jar            ,           jar           。             ,Gradle    Ivy          。Gradle         IVY,                     pom Ivy     Gradle      。
    

    51.2依存管理ベストプラクティス
         Gradle            ,               :                        。     Gradle              。
               ,                   。             Java             ,    Clojure         ,                      ,         ,     。                           ,                    。        ,   Gradle                 :
    

    51.2.1.ファイル名にバージョン番号(jarバージョン)を追加
                         。jar       Manifest   ,         ,      。        20 Jar     ,      ?      commons-beanutils-1.3.jar          spring.jar?                              。
    
                 ,               。             Hibernate2.5。            3.0.5   Hibernate                                。            bug,                    bug,     Hibernate  now—deprecated  。           ,              。                 ,                       Hibernate   2.5    3.0.5。
    
            Jar              ,           。              。
    

    51.2.2.転送依存の管理
                   ,         ,   ,      。                               ,     ,  。                       ,                     。   Gradle    ,Gradle       ,    , Gradle                 。       ,       Spring,Hibernate,     ,          ,            。
    
                      ,               。              ,            。Gradle                   ,  Gradle                       。
    
                       ,              。                        Jars        。                   ,                 。               ,                :                       。          ,  ,            ,       。
    

    NOTE:あるプロジェクトで、クラスパスに神秘的なLDAP関連jarがあることを発見しました.このjarにコードが関連付けられていないので、ここには接続項目がありません.このjarが何をしているのか、このクラスをプロジェクトから削除するまで、アプリケーションはLDAPで検証しようとしたときに大きなパフォーマンスの問題を受けた.この神秘的なjarファイルは、伝達依存管理を使用する人がいないため、必要な4級伝達依存であり、無視されやすい.
        Gradle                  。  Gradle             :  ,       Jars   SCM    XML                。
    

    51.2.3バージョンの競合の解決
          jar                       。            ,                                  。       ,          ,                                  (    bug            )。
    
                        jar          ,            。     30          ,                    ,  Spring 2.5        2.4。        ,                         。     ,Spring                    ,                     。
    
            ,        ,               。                                        。            , Gradle,                                。*                 ,     。*                                    ,  JVM                 JAR          。(  Section51.1.1,“     JAVA”)
    

    Gradleは、次の競合解決策を提供します.
  • 最新:最新バージョンの依存が使用されています.これはGradleのデフォルトポリシーであり、バージョンが後方に互換性がある限り、これは常に適切な方法です.
  • 失敗:バージョンの競合により構築に失敗しました.このポリシーでは、すべてのバージョンの競合がコンストラクションスクリプトで明確に解決される必要があります.ResolutionStrategyを参照して、バージョンの選択方法の詳細を確認します.

  • 上記のポリシーは、ほとんどの競合を基本的に解決し、Gradleはバージョン競合の問題を解決するためのより微細なメカニズムを提供します.
  • は、1つのレベル依存を構成することを余儀なくされた.この方法は,この依存が衝突においてすでに1次依存である場合に有効である.例をDependencyHandlerで確認します.
  • は、任意の依存(伝達または非伝達)を強制的に構成する.この方法は,この依存が衝突において伝達依存である場合に有効である.同様に、一級依存バージョンを強制するために使用することができます.例をResolutionStrategyで確認します.
  • 依存解決規則は、Gradle 1における孵化における特性である.4に導入されたのは、特定の依存に対して、より細かく制御されたバージョンの選択を与えます.

  • バージョン競合による問題を解決するために、依存図のレポートも役立ちます.このようなレポートのもう一つの特性は、依存管理です.
    51.2.4動的バージョンおよび修正モジュールの使用
                                ,           。               ,          ,                 。                           。                  (  2.+)                   。(  ,latest.integration)。
    
            ,                   ,         。                  Maven SNAPSHOT   ,          。    ,     Mavensnapshot            ,        。
    
                                      ,       ,         。          ,            ,               。
    
           ,Gradle 24H            。                  。                       。(  Section51.9.3 "Fine-tuned control over dependency caching").
    

    51.3依存構成
         Gradle ,         。       ,          ,          。  Gradle                 。Java  ,  ,                  。  Section23.5“Dependency”      。            。           。                            。(  ,   JDBC            )。
    
                          configurations  。                   API。         API   ,     ConfigurationContainer。
    

    configurationを定義する:例51.1 configuration buildを定義する.gradle
    configurations{
        compile
    }   
    

    configurationに入る:例51.2 configuration buildに入る.gradle
    println configurations.compile.name
    println configurations['compile'].name
    

    configurationを構成する:例51.3 configuration buildを構成する.gradle
    configurations {
        compile {
            description = 'compile classpath'
            transitive = true
        }
        runtime{
            extendsFrom compile
        }
    }
    configurations.compile {
        description = 'compile classpath'
    }
    

    51.4依存をどのように説明するか
    あなたの依存を説明するにはいくつかの方法があります:Table 51.1依存種
    External module dependency:
          ,              。
    

    Project dependency
           ,           。
    

    File dependency

    Client module dependency
                 ,                         。                       。
    

    Gradle API dependency
           Gradle   API      。                 Gradle       。
    

    Local Groovy dependency
          Gradle     Groovy        。               Gradle       。
    

    51.4.1外部モジュール依存
    外部モジュール依存は最も一般的な依存です.モジュールを外部の倉庫に接続します.
    例51.4.モジュール依存build.gradle
    dependencies {
        runtime group: 'org.springframework', name: 'spring-core', version: '2.5'
        runtime 'org.springframework:spring-core:2.5',
            'org.springframework:spring-aop:2.5'
        runtime(
        [group: 'org.springframework', name: 'spring-core', version: '2.5'],
        [group: 'org.springframework', name: 'spring-aop', version: '2.5']
        )
        runtime('org.hibernate:hibernate:3.0.5') {
        transitive = true
        }
        runtime group: 'org.hibernate', name: 'hibernate', version: '3.0.5', transitive: true
        runtime(group: 'org.hibernate', name: 'hibernate', version: '3.0.5') {
        transitive = true
        }
    }
    

    APIのDependencyHandlerクラスを参照して、より多くの例と完全な参照を検索します.
        Gradle             。        ,      。         API        。  ExternalModuleDependency     API  。  API          。       ,            。               。       API,                ,                     。
    
                    ,Gradle          (pom.xml  ivy.xml)    。                 ,
                     (  hibernate-3.0.5.jar)      (  cglib)     。               ,Gradle        hibernate-3.0.5.jar   。 Maven ,              。 Gradle ivy,            。                。
    

    51.4.1.1多重ワークを有するモジュールに依存する
            ,  Maven        。  ,         Maven  ,          。  Gradle  Ivy,         。Ivy     (ivy.xml)        。         Ivy ivy.xml  。 Gradle ,           Ivy   ,                。        (    jars)                   。                :
    
  • モジュールのデフォルト構成には、存在したくないワークピースが含まれています.全体の構成に依存するよりも,依存は宣言したいワークにのみ存在する.
  • に必要なワークピースはデフォルトの構成ではありません.構成は、依存宣言として明示的に命名された部分です.

  • 他にも、依存宣言を調整する必要があります.APIファイルにおけるDependencyHandlerクラスの例と完全な参照宣言依存を参照してください.
    51.4.1.2ワーク一意符号
               ,               ,Gradle          Jar。       ,           ,         jar  ,     。             zip       ,      。Gradle     artifact only         ,                  “@”:
    

    **例51.5 Artifact only notation**build.gradle > dependencies{ runtime “org.groovy:groovy:2.2.0@jar” runtime group:’org.groovy’,name:’groovy’,version:’2.2.0’,ext:’jar’ }
    ワークピースの一意のシンボル作成モジュールは、ファイル拡張子を作成するワークピースのみをダウンロードすることに依存します.
    51.4.1.3分類器
    Maven依存管理には分類器の概念がある.Gはこれをサポートするまで回りました.Maven倉庫から分類依存を検索するには、**例51.6と書くことができます.分類器依存*build.gradle
    compile “org.gradle.test.classfiers:service:1.0:jdk@jar” otherConfgroup:’org.gradle.test.classfiers’,name:’service’,version:’1.0’,classfier:’jdk14’
    上の最初の行では、分類器はワークとともに記号を使用することができます.ワークの構成に依存する反復が容易である:例51.7構成buildを反復する.gradle
    task listJars << { configurations.compile.each{File file -> println file.name} }
    gradle-q listJar出力:
    gradle -q listJars hibernate-core-3.6.7.Final.jar antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar hibernate-commons-annotations-3.2.0.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar jta-1.1.jar slf4j-api-1.6.1.jar
    51.4.2クライアントモジュール依存関係
                                。                  。
    

    例51.8.クライアントモジュール依存-伝達依存build.gradle
    dependencies { runtime module(“org.codehaus.groovy:groovy:2.3.6”) { dependency(“commons-cli:commons-cli:1.0”) { transitive = false } module(group: ‘org.apache.ant’, name: ‘ant’, version: ‘1.9.3’) { dependencies “org.apache.ant:ant-launcher:1.9.3@jar”, “org.apache.ant:ant-junit:1.9.3” } } }
                Groovy    。Groovy     。  Gradle       xml                      。                                   。     API   ClientModule 。
    
                       。           ,             maven  ivy   。Gradle        jars       ,     XML    。          , XML               。             Gradle   。
    

    51.4.3.プロジェクト依存
        Gradle                        。           。
    

    **例51.9プロジェクト依存**build.gradle
    dependencies{ compile project(‘:shared’) }
    詳細はAPIドキュメントProjectDependency.へマルチプロジェクト構築ディスカッションChapter 57、マルチプロジェクト構築
    51.4.4ファイル依存
                           ,          。          ,     ,        。                     ,
    

    構成の依存としてファイルを追加するには、file collectionを依存として簡単に渡すことができます:**例51.10.ファイル依存**build.gradle
    dependencies{ runtime files(‘libs/a.jar’,’libs/b.jar’) runtime fileTree(dir:’libs’,include:’*.jar’) }
                               。  ,                   。                  ,            。
    

    タスクによって生成されたファイルの依存を宣言できます.たとえば、生成されたファイル構築など、そうすることができます.
    例51.11生産書類依存builg=d.gradle
    dependencies { compile files(“$buildDir/classes”) { builtBy ‘compile’ } }
    task compile << {
        println 'compiling classes'
    }
    
    task list(dependsOn: configurations.compile) << {
        println "classpath = ${configurations.compile.collect {File file -> file.name}}"
    }
    

    gradle-a list出力:
    gradle q list compiling classes classpath = [classes]
    例51.12 GradleAPI依存
    現在のバージョンのGradleのAPIに依存するDependencyHandlerを宣言することができます.gradleApi()メソッド.カスタムGradleタスクまたはプラグインを開発する場合に有効です.**例51.12 Gradle API依存**build.gradle
    dependencies{ compile gradleApi() }
    51.4.6ローカルGroovy依存
    GroovyとGradleに依存して分散型DependencyHandlerを利用することを宣言することができます.localGroovy()メソッド.カスタムGradleタスクやプラグインを開発するとGroovyで非常に効果的です.
    例51.13 GradleのGroovy依存build.gradle
    dependencies { compile localGroovy() }