我正在尝试通过Gradle运行命令行Java应用程序,作为快速集成测试的一部分。我正在从Maven移植构建脚本,可以通过轻松完成exec-maven-plugin
。我的两个主要要求是:
- 能够将系统属性传递给可执行Java代码
- 能够将命令行参数传递给可执行的Java代码
请注意,我不是要在构建脚本中读取这些属性,而是要在由脚本构建和执行的Java程序中读取它们。
我发现了另外两个SO帖子,它们通过Gradle解决了Java程序的执行:一个在提倡apply plugin: "application"
在构建文件中和gradle run
命令行中使用的答案task execute(type:JavaExec)
gradle execute
,另一个在提倡在构建文件中以及在构建文件中使用该方法的答案。命令行。我尝试了两种方法,但都没有成功。
我有两个问题:
(1)我无法获取Java可执行文件来读取系统属性
我是否这样做:
build.gradle:
apply plugin: 'application'
mainClassName = "com.mycompany.MyMain"
命令行:
gradle run -Dmyproperty=myvalue
或这个:
build.gradle:
task execute (type:JavaExec) {
main = "com.mycompany.MyMain"
classpath = sourceSets.main.runtimeClasspath
}
命令行:
gradle execute -Dmyproperty=myvalue
无论哪种情况,myproperty
都无法通过。从开始运行的代码MyMain.main (...)
将myproperty
系统属性读取为null / missing。
(2)我无法传递命令行参数
这可能与第一个问题有关。exec-maven-plugin
例如,在中,命令行参数本身是通过system属性传递的。Gradle就是这种情况,还是有另一种传递命令行参数的方式?
如何获得这些变量?另外,还是使用apply plugin: 'application'
还是更好task execute (type:JavaExec)
?