Chapter 51.依存管理
12864 ワード
51.1紹介
Gradleが依存管理をサポートすることについて、いくつかのハイライトがあります.伝達依存管理:Gradleはあなたにプロジェクトの依存ツリーを十分に制御しました. は管理されていない依存をサポートします.もしあなたの依存がバージョン管理や共有ハードディスクで非常に簡単なファイルであれば、Gradleはこれらをサポートする強力な機能を提供します. はカスタム依存定義をサポートします.Gradleのモジュール定義は、構築スクリプトで依存階層を記述する能力を与えます. 完全にカスタマイズ可能な依存解決方法:Gradleは、依存代替をより容易にするために、解決仕様をカスタマイズする能力を提供します. MavenとIvyの完全な互換性:Maven POMまたはIvy fileに依存することを定義した場合、Gradleはシームレスに統合された人気のある構築ツールを提供します. 既存の依存管理インフラストラクチャを統合:GradleはMavenとIVy倉庫に互換性があります.Archiva、Nexus、またはArtifactoryを使用する場合、Gradleはすべての倉庫フォーマットに完全に互換性があります.
51.1.1柔軟な依存管理移行
51.1.2依存管理とJava
51.2依存管理ベストプラクティス
51.2.1.ファイル名にバージョン番号(jarバージョン)を追加
51.2.2.転送依存の管理
NOTE:あるプロジェクトで、クラスパスに神秘的なLDAP関連jarがあることを発見しました.このjarにコードが関連付けられていないので、ここには接続項目がありません.このjarが何をしているのか、このクラスをプロジェクトから削除するまで、アプリケーションはLDAPで検証しようとしたときに大きなパフォーマンスの問題を受けた.この神秘的なjarファイルは、伝達依存管理を使用する人がいないため、必要な4級伝達依存であり、無視されやすい.
51.2.3バージョンの競合の解決
Gradleは、次の競合解決策を提供します.最新:最新バージョンの依存が使用されています.これはGradleのデフォルトポリシーであり、バージョンが後方に互換性がある限り、これは常に適切な方法です. 失敗:バージョンの競合により構築に失敗しました.このポリシーでは、すべてのバージョンの競合がコンストラクションスクリプトで明確に解決される必要があります.ResolutionStrategyを参照して、バージョンの選択方法の詳細を確認します.
上記のポリシーは、ほとんどの競合を基本的に解決し、Gradleはバージョン競合の問題を解決するためのより微細なメカニズムを提供します.は、1つのレベル依存を構成することを余儀なくされた.この方法は,この依存が衝突においてすでに1次依存である場合に有効である.例をDependencyHandlerで確認します. は、任意の依存(伝達または非伝達)を強制的に構成する.この方法は,この依存が衝突において伝達依存である場合に有効である.同様に、一級依存バージョンを強制するために使用することができます.例をResolutionStrategyで確認します. 依存解決規則は、Gradle 1における孵化における特性である.4に導入されたのは、特定の依存に対して、より細かく制御されたバージョンの選択を与えます.
バージョン競合による問題を解決するために、依存図のレポートも役立ちます.このようなレポートのもう一つの特性は、依存管理です.
51.2.4動的バージョンおよび修正モジュールの使用
51.3依存構成
configurationを定義する:例51.1 configuration buildを定義する.gradle
configurationに入る:例51.2 configuration buildに入る.gradle
configurationを構成する:例51.3 configuration buildを構成する.gradle
51.4依存をどのように説明するか
あなたの依存を説明するにはいくつかの方法があります:Table 51.1依存種
External module dependency:
Project dependency
File dependency
Client module dependency
Gradle API dependency
Local Groovy dependency
51.4.1外部モジュール依存
外部モジュール依存は最も一般的な依存です.モジュールを外部の倉庫に接続します.
例51.4.モジュール依存build.gradle
APIのDependencyHandlerクラスを参照して、より多くの例と完全な参照を検索します.
51.4.1.1多重ワークを有するモジュールに依存するモジュールのデフォルト構成には、存在したくないワークピースが含まれています.全体の構成に依存するよりも,依存は宣言したいワークにのみ存在する. に必要なワークピースはデフォルトの構成ではありません.構成は、依存宣言として明示的に命名された部分です.
他にも、依存宣言を調整する必要があります.APIファイルにおけるDependencyHandlerクラスの例と完全な参照宣言依存を参照してください.
51.4.1.2ワーク一意符号
**例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” } } }
51.4.3.プロジェクト依存
**例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’ } }
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() }
,Gradle 。 Maven Ivy, Gradle , 。
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はバージョン競合の問題を解決するためのより微細なメカニズムを提供します.
バージョン競合による問題を解決するために、依存図のレポートも役立ちます.このようなレポートのもう一つの特性は、依存管理です.
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() }