gradle 找不到任何插件,

a9wyjsp7  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(346)

因此,我尝试使用新的KotlinDSL语法将AppGallery连接gradle插件添加到我的Android项目中。

org.gradle.internal.exceptions.LocationAwareException: Build file 'D:\#KERJAAN\devbase\sample\build.gradle.kts' line: 3
Plugin [id: 'com.huawei.agconnect', version: '1.6.3.300'] was not found in any of the following sources:
- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'com.huawei.agconnect:com.huawei.agconnect.gradle.plugin:1.6.3.300')
  Searched in the following repositories:
    Gradle Central Plugin Repository
    Google
    MavenRepo
    maven(https://developer.huawei.com/repo/)

我所做的就是在settings.gradle.kts中添加这样的插件库:

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
        maven { setUrl("https://developer.huawei.com/repo/") }
    }
}

在应用程序的build.gradle.kts中添加如下插件:

plugins {
   id("com.huawei.agconnect") version "1.6.3.300"
}

有趣的是,如果使用build.gradle.kts根目录下的类路径,它就可以工作。有人知道为什么吗?

iqxoj9l9

iqxoj9l91#

任何Gradle插件(这根本不是AGC特定的)都只能在根项目级别加载,然后通常应用于模块级别。我刚刚尝试删除了buildscript块(与问题中的一样),这确实会导致:

Plugin [id: 'com.huawei.agconnect', version: '1.7.2.300', apply: false] was not found in any of the following sources:
maven(https://developer.huawei.com/repo/)

Plugin Repositories (could not resolve plugin artifact 'com.huawei.agconnect:com.huawei.agconnect.gradle.plugin:1.7.2.300')

插件依赖性不会解决,而pluginManagement会不断添加.gradle.plugin。如果仓库知道完整的而不是只有一个短名agcp,这应该是现成的(这实际上是默认的包名,除非更改它):

com.huawei.agconnect:com.huawei.agconnect.gradle.plugin:1.7.2.300

和这个不匹配:

com.huawei.agconnect:agcp:1.7.2.300

您可以使用pluginManagement.resolutionStrategy作为临时解决方法...
settings.gradle正用于重写错误假定的包名称:

pluginManagement {
    repositories {
        gradlePluginPortal()
        mavenCentral()
        google()
        maven { url 'https://developer.huawei.com/repo/' }
    }
    plugins {}
    resolutionStrategy {
        eachPlugin {
            if (it.requested.id.getNamespace() == 'com.huawei.agconnect') {
                println ">> ${it.requested.id.id}"
                if (it.requested.id.id == 'com.huawei.agconnect.agcp') {
                    it.useModule('com.huawei.agconnect:agcp:1.7.2.300')
                }
                println ">> ${it.target}"
            } else {
                println ">  ${it.target}"
            }
        }
    }
}

plugins必须在build.gradle中定义:

plugins {
    id "com.android.application" version "7.3.0" apply false
    id "com.android.library" version "7.3.0" apply false
    id "com.huawei.agconnect.agcp" version "1.7.2.300" apply false
}

println将输出更新的(假的)idartifactMapit.target

[
    id: 'com.huawei.agconnect.agcp',
    version: '1.7.2.300',
    artifact: 'com.huawei.agconnect:agcp:1.7.2.300',
    apply: false
]

当应用它时,仍然需要使用真实的的id

apply plugin: 'com.huawei.agconnect'
agcp { enableAPMS true }

只是(从版本1.7.2.300开始)APMSTransform有一些检查,这需要显式地将AGP放在classpath上。buildscript块“几乎”过时了,否则APMSTransform会错误地认为它是唯一可以加载Android Gradle插件的地方。

/** Still required due to AGCP plugin. */
buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.3.0'
    }
}

它还需要检查以下任一插件:

plugins {
    id "com.android.application" version "7.3.0" apply false
    id "com.android.library" version "7.3.0" apply false
}

例如:

project.getPluginManager().hasPlugin('com.android.application') || project.getPluginManager().hasPlugin('com.android.library')

为了让这件事完美地进行下去(没有resolutionStrategy),这将需要更新检查,以避免com.android.tools.build:gradlebuild.gradle文件中未设置,并且还需要URL重写,这将正确处理包名称的.gradle.plugin后缀,因此com.huawei.agconnect.gradle.pluginagcp将导致相同的包下载。resolutionStrategy确实是解决方法而不是答案。

f45qwnt8

f45qwnt82#

不使用

plugins {
   id("com.huawei.agconnect") version "1.6.3.300"
}

请用老办法

dependencies {
    // 增加agcp插件配置,推荐您使用最新版本的agcp插件。
    classpath 'com.huawei.agconnect:agcp:1.6.3.300'
    // important add next line , huawei dependencies agp.
    classpath 'com.android.tools.build:gradle:7.1.2'
}

相关问题