Mavenには<dependencyManagement>
、親POMのセクションで依存関係を定義し、バージョンやスコープなどを指定せずに子モジュールからその依存関係を参照できる非常に便利な機能があります。
Gradleの代替手段は何ですか?
Mavenには<dependencyManagement>
、親POMのセクションで依存関係を定義し、バージョンやスコープなどを指定せずに子モジュールからその依存関係を参照できる非常に便利な機能があります。
Gradleの代替手段は何ですか?
回答:
親スクリプトで一般的な依存関係を宣言できます。
ext.libraries = [ // Groovy map literal
spring_core: "org.springframework:spring-core:3.1",
junit: "junit:junit:4.10"
]
子スクリプトから、依存関係の宣言を次のように使用できます。
dependencies {
compile libraries.spring_core
testCompile libraries.junit
}
依存関係の宣言を高度な構成オプションと共有するには、次を使用できますDependencyHandler.create
。
libraries = [
spring_core: dependencies.create("org.springframework:spring-core:3.1") {
exclude module: "commons-logging"
force = true
}
]
複数の依存関係を同じ名前で共有できます。
libraries = [
spring: [ // Groovy list literal
"org.springframework:spring-core:3.1",
"org.springframework:spring-jdbc:3.1"
]
]
dependencies { compile libraries.spring }
次に、両方の依存関係を一度に追加します。
この方法で共有できない情報の1つは、依存関係を割り当てる必要がある構成(Maven用語ではスコープ)です。しかし、私の経験から、とにかくこれについて明示することをお勧めします。
dependencies.gradle
に、すべての依存関係をプロパティとして定義する別のスクリプトを作成する傾向がありますext.GROOVY = 'org.codehaus.groovy:groovy-all:2.1.6'
。例:ルートプロジェクトbuild.gradle
に含めますallprojects { apply from: "$rootDir/dependencies.gradle" }
。次に、すべての依存関係が1つのファイルに分散されるのではなく、1つのファイルで定義され、依存関係の構成でより「読みやすい」定数が使用されます。
allprojects
プロジェクトレベルの追加プロパティはサブプロジェクトに表示されるため、適用する必要はありません。
これは遅い返信ですが、次のページもご覧になる ことをお勧めします。 「bom」で定義されています。MavenからGradleに徐々に移行するときに、これは確かに役立ちます。今それを楽しんでいます。
Gradle 4.6以降、これを実現する方法として依存関係の制約がドキュメントで推奨されています。https://docs.gradle.org/current/userguide/declaring_dependencies.html#declaring_a_dependency_without_versionから:
大規模なプロジェクトで推奨される方法は、バージョンなしで依存関係を宣言し、バージョン宣言に依存関係制約を使用することです。利点は、依存関係の制約により、推移的なものを含むすべての依存関係のバージョンを1か所で管理できることです。
親build.gradle
ファイル:
allprojects {
plugins.withType(JavaPlugin).whenPluginAdded {
dependencies {
constraints {
implementation("com.google.guava:guava:27.0.1-jre")
}
}
}
}
Javaプラグイン(... whenPluginAdded {
)のチェックを使用して依存関係ブロックをラップすることは厳密には必要ありませんが、同じビルドへの非Javaプロジェクトの追加を処理します。
次に、子gradleプロジェクトで単純にverisonを省略できます:
apply plugin: "java"
dependencies {
implementation("com.google.guava:guava")
}
子ビルドは、より高いバージョンを指定することを選択できます。下位バージョンが指定されている場合は、制約のバージョンに自動的にアップグレードされます。
allprojects
ます。
io.spring.gradle:dependency-management-plugin
プラグインは新しいGradle 3.xシリーズで問題がありますが、2.xシリーズでは安定しています。バグレポートへの参照を参照してくださいGradle 3#115のドロップサポート
Spring(BOM使用のメインプロモーター)の場合、次のように終了します。
buildscript {
repositories {
mavenLocal()
jcenter()
}
dependencies {
classpath 'io.spring.gradle:dependency-management-plugin:1.0.0.RELEASE'
}
}
repositories {
mavenLocal()
jcenter()
}
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'
dependencyManagement {
imports {
mavenBom 'io.spring.platform:platform-bom:Athens-SR3'
}
}
dependencies {
compile 'org.springframework.boot:spring-boot-starter-web'
testCompile 'org.springframework.boot:spring-boot-starter-test'
}
親としてio.spring.platform:platform-bom
持ってorg.springframework.boot:spring-boot-starter-parent
いるので、Spring Bootと互換性があることに注意してください
次の方法で実際の依存関係の解決を確認できます。
$ gradle dependencies
$ gradle dependencies --configuration compile
$ gradle dependencies -p $SUBPROJ
$ gradle buildEnvironment
$ gradle buildEnvironment -p $SUBPROJ
またはタスク付き:
task showMeCache {
configurations.compile.each { println it }
}
導入の理由を理解するには、Soringの公式ブログ投稿「Gradleのより良い依存関係管理」を読んでくださいio.spring.gradle:dependency-management-plugin
。
以下のコードを使用して依存関係を集中化できます:
に gradle.properties
COMPILE_SDK_VERSION=26
BUILD_TOOLS_VERSION=26.0.1
TARGET_SDK_VERSION=26
MIN_SDK_VERSION=14
ANDROID_SUPPORT_VERSION=26.0.2
各モジュールに追加build.gradle
:
android {
compileSdkVersion COMPILE_SDK_VERSION as int
buildToolsVersion BUILD_TOOLS_VERSION as String
defaultConfig {
minSdkVersion MIN_SDK_VERSION as int
targetSdkVersion TARGET_SDK_VERSION as int
versionCode 1
versionName "1.0"
}
}
dependencies {
compile "com.android.support:appcompat-v7:${ANDROID_SUPPORT_VERSION}"
compile "com.android.support:support-v4:${ANDROID_SUPPORT_VERSION}"
compile "com.android.support:support-annotations:${ANDROID_SUPPORT_VERSION}"
compile "com.android.support:support-vector-drawable:${ANDROID_SUPPORT_VERSION}"
compile "com.android.support:design:${ANDROID_SUPPORT_VERSION}"
}
このブログ投稿では、依存関係とグループを構成として管理することを推奨しています。https: //www.javacodegeeks.com/2016/05/manage-dependencies-gradle-multi-project-build.html
私自身は試していませんが、面白そうです。
ルートプロジェクトbuild.gradle
subprojects {
configurations {
commonsIo
}
dependencies {
commonsIo 'commons-io:commons-io:2.5'
}
}
サブプロジェクトbuild.gradle
configurations {
compile.extendsFrom commonsIo
}
Gradleファイルをクリーンに保つために、依存関係を配列にグループ化し、後で実装できます。
//ライブラリのバージョンを宣言します
final RetrofitVersion = '2.3.0' final OkHttpVersion = '3.9.1'
//ライブラリでバージョンを使用し、アクセス名とともに依存関係を追加します(retrofit(first one)など)
final networkDependencies = [ retrofit : "com.squareup.retrofit2:retrofit:${RetrofitVersion}", retrofitGsonConverter: "com.squareup.retrofit2:converter-gson:${RetrofitVersion}", retrofitRxJavaAdapter: "com.squareup.retrofit2:adapter-rxjava2:${RetrofitVersion}", okHttp3 : "com.squareup.okhttp3:okhttp:${OkHttpVersion}", okHttp3Logging : "com.squareup.okhttp3:logging-interceptor:${OkHttpVersion}" ]
//配列からすべての依存関係を実装します
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation networkDependencies.values() }
したがって、最終的なコードは次のようになります。
final RetrofitVersion = '2.3.0'
final OkHttpVersion = '3.9.1'
final networkDependencies = [
retrofit : "com.squareup.retrofit2:retrofit:${RetrofitVersion}",
retrofitGsonConverter: "com.squareup.retrofit2:converter-gson:${RetrofitVersion}",
retrofitRxJavaAdapter: "com.squareup.retrofit2:adapter-rxjava2:${RetrofitVersion}",
okHttp3 : "com.squareup.okhttp3:okhttp:${OkHttpVersion}",
okHttp3Logging : "com.squareup.okhttp3:logging-interceptor:${OkHttpVersion}"
]
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation networkDependencies.values()
}