web-dev-qa-db-fra.com

Utiliser Kotlin dans un module de bibliothèque sans l'utiliser dans le module d'application

J'essaie d'utiliser Kotlin dans un module de bibliothèque sans l'utiliser dans le module d'application. Le module d'application utilise uniquement Java et n'utilise aucune classe Kotlin de la bibliothèque. Gradle ne compilera pas hoever:

Error:(2, 1) A problem occurred evaluating project ':<Library>'.
> Plugin with id 'kotlin-Android' not found.

Modifications que j'ai apportées pour inclure Kotlin:

{racine de la bibliothèque}/build.gradle

buildscript {
ext.kotlin_version = '1.1.3-2'

repositories {
    jcenter()
}
dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    ...
}

allprojects {
repositories {
    jcenter()
}
}

{racine de bibliothèque}/{module de bibliothèque}/build.gradle

apply plugin: 'com.Android.library'
apply plugin: 'kotlin-Android'
...

dependencies{
    ...
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}

Lorsque j'ajoute la même chose au module d'application, le projet se compile sans problème, mais je voudrais éviter de l'ajouter dans le module d'application parce que j'aimerais utiliser cette bibliothèque dans plusieurs applications sans apporter de modifications de code à ces applications

Version Gradle utilisée: 3.3 Android version plugin Gradle: 2.3.3

Edit: @ La réponse de Jushua fonctionne, mais elle nécessite toujours de mettre à jour la racine du projet build.gradle. J'espérais une solution où seule la dépendance à la bibliothèque devrait être ajoutée pour que tout fonctionne.

28
Nino van Hooff

Je peux le faire sans aucun problème.

build.gradle (Projet)

buildscript {
    ext.kotlin_version = "1.1.4"
    repositories {
        jcenter()
    }
    dependencies {
        classpath "com.Android.tools.build:gradle:2.3.3"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

build.gradle (app)

apply plugin: "com.Android.application"

Android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"

    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile("proguard-Android.txt"), "proguard-rules.pro"
        }
    }
}

dependencies {
    compile fileTree(dir: "libs", include: ["*.jar"])
    androidTestCompile("com.Android.support.test.espresso:espresso-core:2.2.2", {
        exclude group: "com.Android.support", module: "support-annotations"
    })
    compile "com.Android.support:appcompat-v7:26.0.1"
    testCompile "junit:junit:4.12"
    compile project(path: ":library")
}

build.gradle (bibliothèque)

apply plugin: "com.Android.library"
apply plugin: "kotlin-Android"
apply plugin: "kotlin-Android-extensions"

Android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 26
        versionCode 13
        versionName "1.1.4"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile("proguard-Android.txt"), "proguard-rules.pro"
        }
    }
}

dependencies {
    compile fileTree(dir: "libs", include: ["*.jar"])
    androidTestCompile("com.Android.support.test.espresso:espresso-core:2.2.2", {
        exclude group: "com.Android.support", module: "support-annotations"
    })
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile "com.Android.support:appcompat-v7:26.0.1"
    testCompile "junit:junit:4.12"
}
7
Joshua

Vous avez juste besoin d'ajouter dans votre build de module:

buildscript {
  // (Optional) ext.kotlin_version = '1.1.4-3'

  repositories {
    google()
    jcenter()
  }

  dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  }
}

apply plugin: 'com.Android.library'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'    

et vous pouvez soit déclarer le kotlin_version variable dans cette build spécifique, ou la déclarer dans le fichier de build racine du projet, car la version de kotlin peut être mise à jour à partir d'autres modules:

buildscript {
  ext.kotlin_version = '1.1.4-3'

  repositories {
    google()
    jcenter()
  }

  dependencies {
    classpath 'com.Android.tools.build:gradle:3.0.0-beta3'
  }
}

allprojects {
  repositories {
    google()
    jcenter()
  }
}

task clean(type: Delete) {
  delete rootProject.buildDir
}
4
cesards