1

2つのモジュール(一般的なフロントエンドアプリケーションとバックエンド)を持つAndroidプロジェクトがあります。私は3つのbuild.gradleファイルを持っています(各モジュールに1つ、ルートに1つ)。依存関係ライブラリのバージョン更新がAndroidStudioプロジェクトのbuild.gradleに存在することを検出する方法

私は私の依存関係を構造化しまし方法は、後に、このような

としての私の発言のアプリ build.gradleファイルで使用されるよう

ext { 
    // SDK and tools 
    MIN_SDK_VERSION = 19 
    TARGET_SDK_VERSION = 23 
    COMPILE_SDK_VERSION = 23 
    BUILD_TOOLS_VERSION = '24' 

    // app dependencies 
    GOOGLE_API_CLIENT_VERSION = '1.19.0' 
    GOOGLE_PLAY_SERVICES_VERSION = '8.4.0' 
    ANDROID_SUPPORT_LIB_VERSION = '23.1.0' 
    [...] 

    // backend dependencies 
    [...] 
} 

としてルートレベルbuild.gradleに別々の変数へのすべてのバージョンを抽出することです

dependencies { 
    [...] 
    compile(group: 'com.google.oauth-client', name: 'google-oauth-client', version: rootProject.ext.GOOGLE_API_CLIENT_VERSION) 
    ///////////////////////////////// 
    // Google Play Services explicit dependency 
    compile(group: 'com.google.android.gms', name: 'play-services-auth', version: rootProject.ext.GOOGLE_PLAY_SERVICES_VERSION) 
    compile(group: 'com.google.android.gms', name: 'play-services-plus', version: rootProject.ext.GOOGLE_PLAY_SERVICES_VERSION) 
    [...] 

    ///////////////////////////////// 
    // Local Testing 
    testCompile(group: 'junit', name: 'junit', version: rootProject.ext.JUNIT_VERSION) 
    testCompile(group: 'pl.pragmatists', name: 'JUnitParams', version: rootProject.ext.JUNIT_PARAMS_VERSION) 
    [...] 
} 

注:私はどこかのチュートリアルでそのアイデアを見つけました。

しかし、私はどのバージョンのlibが利用可能か、どのようなものがアップグレード可能かなどを把握するのに苦労しています。他の人がこの問題にどのように近づいているのか不思議です。ありがとう。

+1

更新を検出するために[gradle-versions-plugin](https://github.com/ben-manes/gradle-versions-plugin)を書きました。私のプロジェクトでは、私は座標を集中させます。 [dependencies.gradle](https://github.com/ben-manes/caffeine/blob/master/gradle/dependencies.gradle)を使用して1か所で更新できます。 –

+0

ありがとうvm @BenManesこれは素晴らしいツールです。私は確かにあなたの集中化を採用するだけでなく、それは私が今日持っているものから一歩進んでいます - 私はそれが好きです(私はgithub、とてもかっこいい!)。あなたは正式な答えとしてこれを移してもいいですか?どうも – Creos

答えて

5

依存関係をどのように管理するかの概要。

すべての依存関係定義は、gradle/dependencies.gradleで定義されています。これは、すべてのプロジェクトとビルドスクリプトに適用されます。私は通常、それを3つのカテゴリーに分類します。完全な例はhereです。

ext { 
    versions = [ 
    caffeine: '2.3.1', 
    ] 
    test_versions = [ 
    testng: '6.9.12', 
    ] 
    plugin_versions = [ 
    versions: '0.13.0', 
    ] 

    libraries = [ 
    caffeine: "com.github.ben-manes.caffeine:caffeine:${versions.caffeine}", 
    ] 
    test_libraries = [ 
    testng: dependencies.create("org.testng:testng:${test_versions.testng}") { 
     exclude group: 'junit' 
    }, 
    ] 
    gradle_plugins = [ 
    versions: "com.github.ben-manes:gradle-versions-plugin:${plugin_versions.versions}", 
    ] 
} 

その後、私のルートプロジェクトで、私のようにそれをブートストラップに、

buildscript { 
    apply from: "${rootDir}/gradle/dependencies.gradle" 

    repositories { 
    jcenter() 
    } 

    dependencies { 
    gradle_plugins.each { name, dependency -> classpath dependency } 
    } 
} 

allprojects { 
    apply from: "${rootDir}/gradle/dependencies.gradle" 

    repositories { 
    jcenter() 
    } 
} 

は、これは私がgradle-versions-pluginを書いた新しいバージョンを検出するために

dependencies { 
    compile libraries.caffeine 
} 

、としてプロジェクト内の依存関係を定義することができます。リポジトリにバージョン情報を照会し、定義と比較してレポートを生成します。私は手動で頻繁に手動で実行しますが、他の人はCIでスクリプトを作成し、jsonまたはxmlレポートを使用します。

私のプラグインを書いた後に開発された他のアプローチがいくつかあります。 Springのdependency-management-pluginはMaven BOMで動作し、Netfixのnebula-dependency-recommender-pluginも同様です。 Netflixはgradle-dependency-lock-pluginを使用して動的バージョンを定義し、リリースを修正するロックファイルを生成します。依存バージョン通知サービスもありますが、シンプルなCIジョブは同等の可能性があります。彼らは(私には)あまり直感的に見えるよう

私は選択肢のいずれかを使ったことがない、私は素敵な解決策を持っていた数年後に出てきた、とあなたはMavenのから来た場合には、お馴染みのアプローチです。うまくいけば、他の誰かが他のアプローチの利点について光を当てることができればと思います。

関連する問題