当前位置: 首页 > 知识库问答 >
问题:

在库模块中使用Kotlin而不在应用程序模块中使用它

佟阳焱
2023-03-14

我试图在库模块中使用静态编程语言,而不在应用模块中使用它。应用模块只使用Java,不使用库中的任何静态编程语言类。Gradle不会编译hoever:

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

我对Kotlin进行了修改:

{library root}/build。格拉德尔

buildscript {
ext.kotlin_version = '1.1.3-2'

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

allprojects {
repositories {
    jcenter()
}
}

{library root}/{library module}/build。格拉德尔

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

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

当我将其添加到应用程序模块中时,项目编译不会出现问题,但我希望避免将其添加到应用程序模块中,因为我希望在多个应用程序中使用此库,而无需对这些应用程序进行代码更改

使用的gradle版本:3.3 android gradle插件版本:2.3.3

编辑:@Jushua的答案有效,但仍需要更新项目根版本。格雷德尔。我希望能找到一个解决方案,只需要增加对库的依赖就可以让整个工作正常进行。

共有3个答案

司空炯
2023-03-14

您可以添加构建脚本部分与kotlin插件只在您的库:

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"

现在,您可以将库包含到应用程序中,而无需修改根构建。格拉德尔

compile project(path: ":library")
东郭京
2023-03-14

您只需要在模块构建中添加:

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'    

您可以在该特定构建中声明kotlin_version变量,也可以在项目根构建文件中声明它,因为kotlin版本可以从其他模块更新:

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
}
澹台冯浩
2023-03-14

我能够毫无问题地做到这一点。

build.gradle(项目)

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

建筑格雷德尔(图书馆)

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"
}
 类似资料:
  • 我有1个应用程序和2个模块 框架结构 但我不能在MyApp中使用MyModule的文件。IDE显示我“无法访问”错误,我想扩展一个MyModule类的类。而且它不是从MyModule创建类的,有人对此有想法吗?怎么了?

  • 我在多模块项目中工作。目前我面临以下问题: > 模块A 模块B 模块A依赖于B 模块A有以下方法@GetMapping(path=“/GetWorkspace”) } 模块B有以下方法,我需要使用模块A提到的endpoint 公共字符串consumeModuelAMethod(){ 当我从模块A通过RestTemboard调用“http://localhost:8080/getworkspaces

  • 问题内容: 我需要使用FS模块(fs.writeFile)在文件中写入一些数据。我的堆栈是webpack +反应+还原+电子。 第一个问题是: 无法解析模块’fs’ 。我尝试使用 经过几次尝试,问题得以解决( 节点:{fs:“ empty”} )。但是,还有第二个问题:屏幕截图。 您可以看到 fs 是空对象,并且方法writeFile no不存在。我试图更改webpack的配置。 在这种情况下,

  • 问题内容: 我一直在学习有关node.js和模块的信息,似乎无法让Underscore库正常工作……似乎我第一次使用Underscore中的函数时,它会覆盖_对象,其结果为我的函数调用。有人知道发生了什么吗?例如,这是来自node.js REPL的会话: 当我自己制作Javascript文件并将其导入时,它们似乎工作正常。Underscore库也许有一些特别之处? 问题答案: Node REPL使

  • 问题内容: 在IDLE和Python版本3.3.2中,我尝试像这样调用python模块: 我将其导入程序顶部,如下所示: 我得到的结果如下: 但是,当我使用Python 2.7.3在Ubuntu中执行同一文件时,它执行得很好-没有错误。 我尝试了以下方法来解决Windows&Python 3.3.2的问题(尽管我确定操作系统不是问题,但Python版本或语法的使用才是问题): 将目录中的目录从重命

  • 本文向大家介绍在Python中使用模块的教程,包括了在Python中使用模块的教程的使用技巧和注意事项,需要的朋友参考一下 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。 我们以内建的sys模块为例,编写一个hello的模块: 第1行和第2行是标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身