自定义插件添加依赖 beforeResolve from Android Studio [英] Custom plugin adding dependency 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屋!