Skip to content

resolves dependency versions of multiple project with shared setting.

Notifications You must be signed in to change notification settings

b1uec0in/DependencyVersionResolver

Repository files navigation

Dependency Version Resolver

resolves dependency versions of multiple project.

Features

1. Using same library versions in multiple project.

Declare full dependency notation once in root project build.gradle and just remove versions in subproject.

  • file: /build.gradle
def versions = [
        support:"25.3.1",
        retrofit:"2.1.0",
        okhttp:"3.4.1",
]

ext.libraries = [
        "com.android.support:appcompat-v7:$versions.support",
        "com.android.support:support-v4:$versions.support",

        "com.squareup.retrofit2:retrofit:$versions.retrofit",
        "com.squareup.retrofit2:converter-gson:$versions.retrofit",
        "com.squareup.okhttp3:okhttp:3.4.1",
]
  • file: app/build.gradle, subproject1/build.gradle, subproject2/build.gradle, ...
...
dependencies {
-    compile 'com.android.support:appcompat-v7:25.3.1'
-    compile 'com.android.support:support-v4:25.3.1'
-    compile 'com.squareup.retrofit2:retrofit:2.1.0'
-    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
-    compile 'com.squareup.okhttp3:okhttp:3.4.1'

+    compile 'com.android.support:appcompat-v7'
+    compile 'com.android.support:support-v4'
+    compile 'com.squareup.retrofit2:retrofit'
+    compile 'com.squareup.retrofit2:converter-gson'
+    compile 'com.squareup.okhttp3:okhttp'
    ...
}

2. Using default dependency group.

Group multiple dependencies to single notation.

  • file: /build.gradle
ext.defaultGroup = {project->
    compile project.fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7'
    testCompile 'junit:junit'
}
  • file: app/build.gradle, subproject1/build.gradle, subproject2/build.gradle, ...
...
dependencies {
-    compile fileTree(include: ['*.jar'], dir: 'libs')
-    androidTestCompile('com.android.support.test.espresso:espresso-core', {
-        exclude group: 'com.android.support', module: 'support-annotations'
-    })
-    compile 'com.android.support:appcompat-v7'
-    testCompile 'junit:junit'

+    compileDefault project

    ...
}

3. Using shared SDK version settings.

  • file: /build.gradle
    ext.shared = [
            buildToolVersion : "25.0.2",
            compileSdkVersion: 25,
            minSdkVersion    : 15,
            targetSdkVersion : 25,
    ]
  • file: app/build.gradle, subproject1/build.gradle, subproject2/build.gradle, ...
...
android {
-    compileSdkVersion 25
-    buildToolsVersion "25.0.2"
+    compileSdkVersion shared.compileSdkVersion
+    buildToolsVersion shared.buildToolVersion

    defaultConfig {
        applicationId "com.github.b1uec0in.dependencyversionresolver"
-        minSdkVersion 15
-        targetSdkVersion 25
+        minSdkVersion shared.minSdkVersion
+        targetSdkVersion shared.targetSdkVersion
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
 ...

Usage:

  1. copy dependencies-resolver.gradle file to your project root directory.
  2. open build.gradle file in project root directory.
  3. copy and edit (see above sample code of each feature)
  4. add dependency resolver initializing codes. (see below)
// sdk versions
ext.shared = [
    buildToolVersion : "25.0.2",
    compileSdkVersion: 25,
    minSdkVersion    : 15,
    targetSdkVersion : 25,
]

// library versions
def versions = [
    support:"25.3.1",
]
ext.libraries = [
    "com.android.support:appcompat-v7:$versions.support",
    "com.android.support:support-v4:$versions.support",
    // TODO: Add dependencies (with version) used by any sub project.
]

// default dependencies
ext.defaultGroup = { project ->
    compile project.fileTree(include: ['*.jar'], dir: 'libs')
    // TODO: Add dependencies (without version) used by all sub project.
}

// dependency resolver initializing
+ apply from: "dependencies-resolver.gradle"
+ subprojects {
+    resolveDependencyVersion project:project, strictMode:false
+ }


buildscript {
    ...
}

allprojects {
    ...
}
...
  • Set strictMode:true to allow only dependency notation without version. (Error occurs when using dependency notation with version or not declared in shared-settings.gradle.)
  • Set strictMode:false(or without parameter) to disable check.

Sample

See this project sources. (https:/b1uec0in/DependencyVersionResolver)

About

resolves dependency versions of multiple project with shared setting.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages