我一直在为gradle多项目构建构建一些任务,并且需要获取项目的类路径。构建脚本包含使用Java插件的项目和使用Android插件的项目。
对于Java项目,我可以使用这个问题中投票最多的答案来获取类路径,使用配置. runtime.asPath
;然而,这不适用于Android项目,因为没有配置.runtime属性。
如何使用Android插件为gradle项目生成类路径?
Android项目可能会构建应用程序的多个版本。这些被称为变体。最基本的变体是“调试”和“发布”以下代码应该为项目中的所有变体创建类路径分配。将此代码放在模块的“build. gradle”文件中。
android.applicationVariants.each { variant ->
variant.javaCompile.classpath += configurations.provided
}
您应该能够使用变体名称引用特定变体:
debug.javaCompile.classpath
这是一个gradle任务,它生成模块jar,还包括所有变体的测试类路径。它包括库和选定运行时的android. jar。
我添加了两个命令行执行,用于更新emacs中的一些env var和杀死任何正在运行的beanshell(使用以前的类路径)。
task classpath(type: Jar) {
from android.sourceSets.main.java.srcDirs,
android.sourceSets.test.java.srcDirs
outputs.upToDateWhen { false }
doLast {
println "Building classpath..."
def cp2 = [android.getBootClasspath()[0], it.archivePath]
android.applicationVariants.all { v ->
cp2 += v.getApkLibraries()
}
def classpath = cp2.unique().join(":")
println "Updating emacs..."
exec {
executable "sh"
args "-c", "emacsclient --eval '(setenv \"CLASSPATH\" \""+classpath+"\")'"
}
exec {
executable "sh"
args "-c", "emacsclient --eval '(jdee-bsh-exit)'"
}
}
}
请注意,我正在使用“:”来加入类路径
project.android.applicationVariants.all { v ->
v.getCompileClasspath(null).getFiles().each{
File f->
f.getAbsolutePath()//this is the one of classpath
}
}