在Gradle的以前版本的android插件中,我可以通过自己的任务,使用以下方法获取jar依赖项的路径:
android.libraryVariants.all { variant ->
task "copyDependencies${variant.name.capitalize()}"(type: Copy) {
configurations.compile.files().each { dependency ->
from dependency.path
}
into project.projectDir.path + "/build/libs/${variant.name}"
}
}
但是在此插件的最新版本中,compile
传递给已弃用,并且他们引入了api
和implementation
配置,因此当我尝试使用之前的代码时,gradle说:
解决配置' api'直接不允许
对这一新变化提出了什么建议吗?
更新
我有一个依赖项列表并过滤了这样做的配置:
android.libraryVariants.all { variant ->
task "copyDependencies${variant.name.capitalize()}"(type: Copy) {
from {
variant.getCompileConfiguration().files().each { dependency ->
configurations.api.getDependencies().each { configDep ->
if (dependency.name.contains(configDep.name)) {
from dependency.path
}
}
}
}
into project.projectDir.path + "/build/libs/${variant.name}"
}
}
但是,当项目B依赖于项目A时,这个解决方案仍然存在问题。无论是否定义了此任务,Gradle都不会构建。
答案 0 :(得分:1)
最后,我从配置中找到了复制依赖关系的解决方案:
android.libraryVariants.all { variant ->
task "copyDependencies${variant.name.capitalize()}"() {
outputs.upToDateWhen { false }
doLast {
println "Executing from in copyDependencies${variant.name.capitalize()}"
variant.getCompileConfiguration().getAllDependencies().each { dependency ->
configurations.api.getDependencies().each { configDep ->
if (dependency.name.contains(configDep.name)) {
println "Dependency detected: " + dependency.name
variant.getCompileClasspath().each { fileDependency ->
if (fileDependency.absolutePath.contains(dependency.name)) {
println fileDependency.absolutePath
copy {
from fileDependency.absolutePath
into project.projectDir.path + "/build/intermediates/bundles/${variant.name}/libs"
exclude '**/classes.jar'
}
}
}
}
}
}
}
}
}
答案 1 :(得分:-3)
请参阅用户指南的chapter 48.4以查找所有可用配置以及要使用和/或解决的配置。