Help us understand the problem. What is going on with this article?

Gradleの依存パッケージのバージョン管理ベストプラクティス

More than 1 year has passed since last update.

概要

下記のそれぞれについて検討をした結果、プロパティ外だし + 配列で対象を管理が、透明性がありメンテナンスしやすそう。いろいろなオープンソースのプロジェクトや、他のエンジニアの方々の意見を参考にした。

  • べた書き
  • 変数化
  • プロパティに外だし
  • プロパティに外だししつつ、配列で対象を管理

べた書き

build.gradle
dependencies {
    // JUnit
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.2.0'
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.2.0'
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.2.0'
}

変数化

build.gradle
def junitVersion = '5.2.0'

dependencies {
    // JUnit
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: junitVersion
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: junitVersion
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: junitVersion
}

プロパティに外だし

Gradleが内実、既に使ってるようなプロパティ名と被る可能性があるので、お手製のプロパティについては、キーを大文字のスネークケースで管理することとした。他では、ドット区切りの小文字の管理とだいたい半々くらい。大文字スネークケースにしておけば、少なくともGradle内部のものとかぶることはないと思ったので、こうした。

gradle.properties
LIBRARY_VERSION_JUNIT=5.2.0
build.gradle
def junitVersion = (String) project.LIBRARY_VERSION_JUNIT

dependencies {
    // JUnit
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: junitVersion
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: junitVersion
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: junitVersion
}

プロパティに外だししつつ、配列で対象を管理

gradle.properties
LIBRARY_VERSION_JUNIT=5.2.0
build.gradle
def libraryVersions = [
        junit: (String) project.LIBRARY_VERSION_JUNIT,
]

dependencies {
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: libraryVersions.junit
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: libraryVersions.junit
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: libraryVersions.junit
}

libraryVersions.<変数名>でソース保管の対象になることや、グルーピングすることにより、なんのパッケージがあるのか一覧として扱えることなどがメリット。パッケージを追加するときはプロパティと、配列をそれぞれ書く必要があるので手間だが、バージョンだけ更新する時はプロパティだけを変えれば良いので、後々の手間は減っていくはず。

mediado
私たちメディアドゥは、電子書籍を読者に届けるために「テクノロジー」で「出版社」と「電子書店」を繋ぎ、その先にいる作家と読者を繋げる「電子書籍取次」事業を展開しております。業界最多のコンテンツラインナップとともに最新のテクノロジーを駆使した各種ソリューションを出版社や電子書店に提供し、グローバル且つマルチコンテンツ配信プラットフォームを目指しています。
https://mediado.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away