本人这次的尝试是第一次接触gradle,通常的经验自然是靠搜索+蹩脚的英文阅读能力。
首先这个功能分为2块,编译+运行。
在module中的build.gradle创建single.gradle
1.先介绍下单独编译java文件,代码如下
task compilesingle(type: JavaCompile) {source= './src/main/java'include "packagepath/Single.java"classpath= project.configurations.buildDependenciesdestinationDir= file('./bin')
}
packagepath表示该文件的包名路径,例如:
pacakge com.aa.bb
则packagepath = com/aa/bb
include "com/aa/bb/Single.java"
destinationDir表示class文件的输出路径,如果执行了编译任务后,Single.class会出现在bin/com/aa/bb文件夹下面
classpath表示需要使用到的三方库,需要预先设置
configurations {
buildDependencies
}
dependencies {
buildDependencies "com.google.code.gson:gson:2.3.1"}
这里在我们的Single.java使用到了gson库
2.运行编译过的class文件
现在我们获得了bin/com/aa/bb/Single.class,接着就是运行该文件,代码如下
task execlass(type: JavaExec) {
classpath= files('./bin', project.configurations.buildDependencies)
main= 'com.aa.bb.Single'}
这个无需解释了,在Single.java中有static main的方法。
好了,本以为添加了新的single.gradle,并且在该module工程下的build.gradle添加
apply from: 'single.gradle'
就可以了。结果编译+运行都没有执行。因为本人并不熟悉gradle的编译原理,而task即是任务,会一条条按序执行。既然他不执行,那我就手动执行这2个task。
compilesingle.execute()
execlass.exec()
这样就完事OK了,然后我们删除掉bin文件夹,毕竟这是个临时文件夹
delete file('./bin')
现在献上完整的single.gradle
configurations {
buildDependencies
}
dependencies {
buildDependencies "com.google.code.gson:gson:2.3.1"}
task execlass(type: JavaExec) {
classpath= files('./bin', project.configurations.buildDependencies)
main= 'com.aa.bb.Single'}
task compilesingle(type: JavaCompile) {source= './src/main/java'include "com/aa/bb/Single.java"classpath= project.configurations.buildDependenciesdestinationDir= file('./bin')
}
task flow {compilesingle.execute()execlass.exec()delete file('./bin')
}
然后在该module工程下的build.gradle添加
apply from: 'single.gradle'
这样只要点击gradle同步按钮,即可运行single.gradle,达到我预编译的目的。
有兴趣的同学可以一个个实现,看看效果。
PS:最后这些有用的信息都是在gradle的官网社区里面找到的
https://discuss.gradle.org/
再通过不断的调试完成。