33 votes

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

Je suis en train d'utiliser Kotlin dans un module de la bibliothèque sans l'utiliser dans l'application du module. L'application uniquement au module utilise Java et n'utilise pas de Kotlin classes de la bibliothèque. Gradle ne compile pas hoever:

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

Les changements que j'ai faits pour inclure Kotlin:

{bibliothèque de la racine} / 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()
}
}

{bibliothèque de la racine} / {module de la 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 le même pour l'application du module, le projet se compile sans problème, mais j'aimerais éviter d'ajouter dans l'app module car je voudrais utiliser cette bibliothèque dans plusieurs applications sans apporter de modifications de code de ces applications

Gradle version : 3.3 android plugin gradle version: 2.3.3

Edit: @Jushua la réponse de travaux, mais il nécessite toujours de mettre à jour la racine du projet de construction.gradle. J'espérais une solution où seule la dépendance à la bibliothèque devra être ajoutés pour rendre la chose entière de travail.

8voto

Joshua Points 2325

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 (application)

 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"
}
 

5voto

m3n0R Points 2333

Il vous suffit 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 la variable kotlin_version dans cette construction spécifique, soit la déclarer dans le fichier de construction racine du projet, car la version 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
}
 

-1voto

kurt Points 793

Vous pouvez ajouter une section buildscript avec des plugins kotlin uniquement dans votre bibliothèque:

 buildscript {
    ext.kotlin_version = '1.1.4-2'

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

apply plugin: "kotlin-android"
apply plugin: "kotlin-android-extensions"
 

Et maintenant, vous pouvez inclure la bibliothèque à l'application, sans modification de root build.gradle

 compile project(path: ":library")
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X