Mavenには、親POMの<dependencyManagement>
セクションで依存関係を定義し、バージョンやスコープなどを指定せずに子モジュールからその依存関係を参照できる非常に便利な機能があります。
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つは、依存関係を割り当てる構成(scope Mavenの用語)です。しかし、私の経験から、とにかくこれについて明示する方が良いです。
返信が遅くなりますが、次の情報もご覧ください。 http://plugins.gradle.org/plugin/io.spring.dependency-management Mavenをインポートできるbom」、「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")
}
子ビルドは、さらに高いバージョンを指定することもできます。下位バージョンが指定されている場合、制約内のバージョンに自動的にアップグレードされます。
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
。
このブログ投稿では、依存関係とグループを構成として管理することを推奨しています: 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
}
以下のコードを使用してcentralize依存関係を作成できます。
In 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}"
}
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()
}