Kotlin Multiplatform:找不到插件 [id: 'com.android.library']
Posted
技术标签:
【中文标题】Kotlin Multiplatform:找不到插件 [id: \'com.android.library\']【英文标题】:Kotlin Multiplatform : Plugin [id: 'com.android.library'] was not foundKotlin Multiplatform:找不到插件 [id: 'com.android.library'] 【发布时间】:2020-09-15 06:45:33 【问题描述】:我正在尝试通过 Kotlin 多平台库设置 android 库。
我收到错误:
Plugin [id: 'com.android.library'] was not found in any of the following sources:
请帮助我指出问题所在以及如何解决此问题。
我的插件设置是这样的(应该是正确的构建脚本):
plugins
id("org.jetbrains.kotlin.plugin.serialization").version("1.3.72")
id("com.android.library")
id("org.jetbrains.kotlin.multiplatform").version("1.3.72")
id("com.squareup.sqldelight")
当我用以下替换它时
plugins
id("org.jetbrains.kotlin.multiplatform").version("1.3.72")
id("org.jetbrains.kotlin.plugin.serialization").version("1.3.72")
apply plugin: 'com.android.library'
apply plugin: 'com.squareup.sqldelight'
它工作正常。 我不确定是什么导致了这个问题。
以下是完整的 build.gradle:
buildscript
repositories
mavenCentral()
jcenter()
google()
dependencies
classpath 'com.squareup.sqldelight:gradle-plugin:1.3.0'
classpath 'com.android.tools.build:gradle:3.6.3'
plugins
id("org.jetbrains.kotlin.plugin.serialization").version("1.3.72")
id("com.android.library")
id("org.jetbrains.kotlin.multiplatform").version("1.3.72")
id("com.squareup.sqldelight")
repositories
mavenCentral()
jcenter()
google()
group 'com.jolas.sdk.kn.newsycore'
version '0.0.1'
android
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
def ktor_version = '1.3.2'
kotlin
android
publishLibraryVariants("release", "debug")
// This is for iPhone simulator
// Switch here to iosArm64 (or iosArm32) to build library for iPhone device
iosX64("ios")
binaries
framework()
sourceSets
commonMain
dependencies
implementation kotlin('stdlib-common')
implementation "io.ktor:ktor-client-core:$ktor_version"
implementation "io.ktor:ktor-client-serialization:$ktor_version"
commonTest
dependencies
implementation kotlin('test-common')
implementation kotlin('test-annotations-common')
androidMain
dependencies
implementation kotlin('stdlib')
implementation "io.ktor:ktor-client-okhttp:$ktor_version"
implementation "io.ktor:ktor-client-serialization-jvm:$ktor_version"
implementation "com.squareup.sqldelight:sqlite-driver:1.3.0"
iosMain
dependencies
implementation kotlin('stdlib')
implementation "io.ktor:ktor-client-ios:$ktor_version"
implementation "io.ktor:ktor-client-serialization-native:$ktor_version"
implementation "com.squareup.sqldelight:native-driver:1.3.0"
sqldelight
NewsyDatabase
packageName = "com.jolas.sdk.kn.newsycore"
configurations
compileClasspath
【问题讨论】:
你好,@Harley!您能否添加有关您的错误的更多详细信息?还应该有一个来源列表,可能缺少这个插件的那个。 当然。 @ArtyomDegtyarev。请下载这个项目github.com/jolasjoe/newsy-core你会在root-dir中找到build.gradle文件。在该文件中,如果您删除行 apply plugin: 'com.android.library' 并在 plugins 部分添加 id("com.android.library") 您将能够重现该问题。 【参考方案1】:Nelson 关于pluginManagement
块是正确的,但是在没有额外配置的情况下找到插件还有一个额外的要求。如果您需要plugins id("com.android.application") version "3.6.1"
,Gradle 将搜索以下 Maven 工件:com.android.application:com.android.application.gradle.plugin:3.6.1
。这是一个约定。在开发您的自定义插件时,Gradle 的默认 java-gradle-plugin
将提供这样一个开箱即用的工件。详情请见the corresponding section of Gradle docs。
要覆盖任何插件的模块解析,您可以使用resolutionStrategy
块。我有以下 Android 插件:
pluginManagement
repositories
google()
gradlePluginPortal()
jcenter()
resolutionStrategy
eachPlugin
if (requested.id.namespace == "com.android")
useModule("com.android.tools.build:gradle:$requested.version")
else if(requested.id.namespace == "com.google.gms")
useModule("com.google.gms:$requested.id.name:$requested.version")
在您的settings.gradle.kts
中包含此内容将允许您使用通常的plugins
块,如下所示:
plugins
id("com.android.application") version "3.6.1"
id("com.google.gms.google-services") version "4.3.3"
当然,要在所有子模块中重复使用相同版本的插件,您可以使用通常的路线apply false
:
/build.gradle.kts:
plugins
id("com.android.application") version "3.6.1" apply false
id("com.android.library") version "3.6.1" apply false
// ...
/lib/build.gradle.kts:
plugins
id("com.android.library")
// ...
【讨论】:
【参考方案2】:插件块从settings.gradle
中的pluginManagement 块而不是build.gradle
buildscript 块中获取其依赖项。
请将以下内容添加到您的 settings.gradle
文件中,然后重试。
pluginManagement
repositories
google()
gradlePluginPortal()
【讨论】:
问题仍然存在,尼尔森。请从github.com/jolasjoe/newsy-core 下载该项目,看看是否可以使您的解决方案生效。以上是关于Kotlin Multiplatform:找不到插件 [id: 'com.android.library']的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Kotlin/Multiplatform 项目中使用 .klib 库
Kotlin-multiplatform:如何执行 iOS 单元测试
在 kotlin-multiplatform 上生成 UUID?
Kotlin Multiplatform 项目包含 cocoapod 依赖项