我一直在为gradle多项目构建构建一些任务,并且需要获取项目的类路径。构建脚本包含使用Java插件的项目和使用Android插件的项目。
对于Java项目,我能够使用最高投票答案in this question来使用configurations.runtime.asPath
获取类路径;但是,这不适用于Android项目,因为没有configurations.runtime属性。
如何使用Android插件为gradle项目生成类路径?
答案 0 :(得分:2)
Android项目可能会构建多个版本的应用。这些被称为变体。最基本的变体是“debug”和“release”以下代码应该为项目中的所有变体创建类路径分配。将此代码放在模块的“build.gradle”文件中。
android.applicationVariants.each { variant ->
variant.javaCompile.classpath += configurations.provided
}
您应该能够使用变体名称来引用特定变体:
debug.javaCompile.classpath
答案 1 :(得分:2)
这是一个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)'"
}
}
}
请注意我使用":"加入classpath
答案 2 :(得分:0)
project.android.applicationVariants.all { v ->
v.getCompileClasspath(null).getFiles().each{
File f->
f.getAbsolutePath()//this is the one of classpath
}
}
答案 3 :(得分:0)
这是gradle任务的另一个示例,该任务在android项目中使用umlgraph + graphiz生成javadocs,并使用user1737310上一个答案中给出的编码示例,包括所有变体的类路径。它是从选定的运行时手动添加的android.jar,但我仍在寻找一种动态检索它的方法。
task javadoc(dependsOn: build) {
setDescription('Generates Javadoc API documentation with UMLGraph diagrams')
setGroup(JavaBasePlugin.DOCUMENTATION_GROUP)
doLast {
def javaFilePath = file('src/main/java')
def cp = [System.getenv('ANDROID_HOME')+'/platforms/android-26/android.jar'];
project.android.applicationVariants.all { v ->
v.getCompileClasspath(null).getFiles().each{
File f->
cp.add(f.getAbsolutePath())//this is the one of classpath
}
}
def classpath = ":"+cp.join(':')
if (javaFilePath.exists()) {
ant.javadoc(classpath: (configurations.umljavadoc).asPath + classpath,
sourcepath: file('src/main/java'),
packagenames: '*',
destdir: "${docsDir}/javadoc",
private: 'false',
docletpath: configurations.umljavadoc.asPath) {
doclet(name: 'org.umlgraph.doclet.UmlGraphDoc') {
param(name: '-inferrel')
param(name: '-inferdep')
param(name: '-qualify')
param(name: '-postfixpackage')
param(name: '-hide', value: 'java.*')
param(name: '-collpackages', value: 'java.util.*')
param(name: '-nodefontsize', value: '9')
param(name: '-nodefontpackagesize', value: '7')
param(name: '-link', value: 'http://java.sun.com/j2se/1.5.0/docs/guide/javadoc/doclet/spec')
param(name: '-link', value: 'http://java.sun.com/j2se/1.5/docs/api')
}
}
}
}
}
`