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

如何在Kotlin DSL中为多模块项目创建“基本”分级文件?

东门佐
2023-03-14

为了重用gradle文件中的代码,我通常为某些模块提供一个“基本”gradle文件,然后应用它们并添加它可能需要的任何新的依赖项。我正在将所有的gradle文件转换为新的Kotlin DSL的过程中,但是我在使用下面的“基础”文件的关键字时遇到了“未解决的引用”错误。

plugins {
    id("com.android.library")
    kotlin("kotlin.android")
    kotlin("kapt")
}

android {
    compileSdkVersion(App.compileSdk)
    defaultConfig {
        minSdkVersion(App.minSdk)
        targetSdkVersion(App.targetSdk)
        versionCode = App.versionCode
        versionName = App.versionName
        testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
        }
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
}

dependencies {
    val implementation by configurations
    val testImplementation by configurations
    val androidTestImplementation by configurations

    implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
    implementation(Libs.kotlin_stdlib_jdk8)
    implementation(Libs.appcompat_v7)
    testImplementation(Libs.junit)
    androidTestImplementation(Libs.com_android_support_test_runner)
    androidTestImplementation(Libs.espresso_core)
}

上面的文件在我的根项目中,我只是在功能模块中使用以下内容

apply(rootProject.file("base-android.gradle.kts"))

这在Groovy中工作得很好,但是当转移到Kotlin时完全中断了,有没有关于我做错了什么或者如何在Kotlin DSL中正确地拥有一个“基本”gradle文件的想法?

编辑:添加完整错误消息

Script compilation errors:

  Line 10: android {
           ^ Unresolved reference: android

  Line 11:     compileSdkVersion(28)
               ^ Unresolved reference: compileSdkVersion

  Line 12:     defaultConfig {
               ^ Unresolved reference: defaultConfig

  Line 13:         minSdkVersion(21)
                   ^ Unresolved reference: minSdkVersion

  Line 14:         targetSdkVersion(28)
                   ^ Unresolved reference: targetSdkVersion

  Line 15:         versionCode = 1
                   ^ Unresolved reference: versionCode

  Line 16:         versionName = "1.0"
                   ^ Unresolved reference: versionName

  Line 17:         testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
                   ^ Unresolved reference: testInstrumentationRunner

  Line 20:     buildTypes {
               ^ Unresolved reference: buildTypes

  Line 21:         getByName("release") {
                   ^ Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
                       public inline fun <reified T : Any> NamedDomainObjectCollection<out Any>.getByName(name: String): TypeVariable(T) defined in org.gradle.kotlin.dsl
                       public inline fun <reified T : Any> NamedDomainObjectCollection<out Any>.getByName(name: String, configure: TypeVariable(T).() -> Unit): TypeVariable(T) defined in org.gradle.kotlin.dsl
                       public fun <T : Any> NamedDomainObjectCollection<out Any>.getByName(name: String, type: KClass<TypeVariable(T)>): TypeVariable(T) defined in org.gradle.kotlin.dsl
                       public fun <T : Any> NamedDomainObjectCollection<out Any>.getByName(name: String, type: KClass<TypeVariable(T)>, configure: TypeVariable(T).() -> Unit): TypeVariable(T) defined in org.gradle.kotlin.dsl
                       public inline fun <reified T : Any> ExtensionContainer.getByName(name: String): TypeVariable(T) defined in org.gradle.kotlin.dsl

  Line 22:             isMinifyEnabled = false
                       ^ Unresolved reference: isMinifyEnabled

  Line 23:             proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
                       ^ Unresolved reference: proguardFiles

  Line 23:             proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
                                     ^ Unresolved reference: getDefaultProguardFile

  Line 27:     compileOptions {
               ^ Unresolved reference: compileOptions

  Line 28:         sourceCompatibility = JavaVersion.VERSION_1_8
                   ^ Unresolved reference: sourceCompatibility

  Line 29:         targetCompatibility = JavaVersion.VERSION_1_8
                   ^ Unresolved reference: targetCompatibility

16 errors

共有1个答案

周苑博
2023-03-14

问题可能来自尝试应用plugins

plugins {
    id("com.android.library")
    kotlin("kotlin.android")
    kotlin("kapt")
}

apply(rootProject.file("base-android.gradle.kts"))

...
 类似资料:
  • 在根中应用Quarkus插件的多模块gradle项目在步骤失败,出现: 根如下所示: 但是,将行移动到子项目的中,生成将成功。看来quarkus构建步骤是在插件声明的地方运行的,而不是在插件实际应用的地方。 理想情况下,我希望在根项目中声明一次插件,然后仅将其应用于子项目,而不是在根项目中执行它,在根项目中显然没有什么可构建的。 有什么想法吗?

  • 我使用的是IntelliJ IDEA社区版2016.1.3。我正在尝试创建一个maven多模块项目。项目公司是父模块,项目员工和项目技能集是子模块。项目员工和技术人员将有包装作为战争,但项目公司有包装作为POM。 我无法在employee和Skillset下创建一个类。我如何创建一个多模块的项目而没有在父(公司)的src文件夹?

  • 我继承了一个具有以下设置的项目。Gradle中大约有5个单独的模块,分别位于5个不同的git存储库中。这些模块的版本控制是由ScmVersion插件驱动的。其中一个模块是一个将这些模块集成在一起的应用程序。 模块之间的依赖关系在build.gradle dependency部分中由groupId、artificatId和version指定。 我对Gradle很陌生。到目前为止,我已经创建了一个简单

  • 我的项目结构如下: 是内的依赖项。 > 我应该在Jenkins中创建单独的作业来单独构建每个模块吗? 我为创建了一个作业,但出现以下错误(已将目标和操作设置为“清洁安装”: [INFO]扫描项目...[INFO] [INFO] ------------------------------------------------------------------------ [INFO]构建mypro

  • null 每个模块都有自己的POM,包含如何包装的说明; 然后,父POM负责在每个模块上启动Maven生命周期,并将其推送到工件管理器(Nexus) 我想使用汇编插件将每个模块先前构建的WAR文件打包到一个ZIP文件中。我试图通过在父POM中定义一个程序集描述符来实现这一点,该描述符为每个模块定义一个单独的dependencySet(使用groupID、artifactID和version在本地r