自定义插件添加依赖 beforeResolve from Android Studio [英] Custom plugin adding dependency beforeResolve from Android Studio

查看:33
本文介绍了自定义插件添加依赖 beforeResolve from Android Studio的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用以下代码的自定义 Gradle 插件:

project.getGradle().addListener(new DependencyResolutionListener() {@覆盖void beforeResolve(ResolvableDependencies resolvableDependencies) {depsToAdd.each { dep ->compileConfig.getDependencies().add(project.getDependencies().create(dep)}}@覆盖void afterResolve(ResolvableDependencies resolvableDependencies) {}})

这似乎从命令行正常工作.但是,如果我从 Android Studio 刷新 gradle,它会显示 Cannot change configuration :app:compile after it has beenresolution

我的猜测是有某种缓存正在进行,或者 Studio 构建了更多变体(我只是从命令行运行我想要的变体的汇编,每次都有效).

有谁知道可能会发生什么以及如何最好地解决这个问题?

解决方案

我设法解决了这个问题.这样做的方法是添加一个 DependencyResolutionListener,在其中添加依赖项,然后删除侦听器,这样它就不会尝试在以后的解析步骤中添加它们.

compileDeps = project.getConfigurations().getByName("compile").getDependencies()project.getGradle().addListener(new DependencyResolutionListener() {@覆盖void beforeResolve(ResolvableDependencies resolvableDependencies) {compileDeps.add(project.getDependencies().create("org.foo:bar:$version"))project.getGradle().removeListener(this)}@覆盖void afterResolve(ResolvableDependencies resolvableDependencies) {}})

我有一个使用此插件的工作示例此处

I have a custom Gradle plugin that uses the following code:

project.getGradle().addListener(new DependencyResolutionListener() {
    @Override
    void beforeResolve(ResolvableDependencies resolvableDependencies) {
        depsToAdd.each { dep ->
            compileConfig.getDependencies()
                .add(project.getDependencies()
                .create(dep)
        }

    }

    @Override
    void afterResolve(ResolvableDependencies resolvableDependencies) {

    }
})

This seems to work fine from command line. However, if I refresh gradle from Android Studio, it barfs with Cannot change configuration :app:compile after it has been resolved

My guess is there is some sort of caching going on or Studio builds more variants (I just run the assemble for the variant I want from command line which works every time).

Does anyone know what might be going on and how best to resolve this?

解决方案

I managed to figure this out. The way do this is to add a DependencyResolutionListener in which you add the dependencies and then remove the listener so it doesn't try to add them on later resolution steps.

compileDeps = project.getConfigurations().getByName("compile").getDependencies()
project.getGradle().addListener(new DependencyResolutionListener() {
    @Override
    void beforeResolve(ResolvableDependencies resolvableDependencies) {
        compileDeps.add(project.getDependencies().create("org.foo:bar:$version"))
        project.getGradle().removeListener(this)
    }

    @Override
    void afterResolve(ResolvableDependencies resolvableDependencies) {}
})

I have a working example of a plugin that uses this here

这篇关于自定义插件添加依赖 beforeResolve from Android Studio的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆