通过 Gradle 运行 Java 类时传递系统属性和参数时出现问题
我正在尝试通过Gradle运行命令行Java应用程序,作为快速集成测试的一部分。我正在从Maven移植我的构建脚本,通过.我的两大要求是:exec-maven-plugin
- 能够将系统属性传递给可执行的 Java 代码
- 能够将命令行参数传递给可执行 Java 代码
请注意,我不是在尝试在构建脚本中读取这些属性,而是在脚本构建和执行的Java程序中读取它们。
我发现另外两篇SO文章通过Gradle解决了Java程序执行的问题:一篇是倡导使用apple插件的答案:构建文件中的“application”
和在命令行运行的gradle,
另一篇是提倡这种方法的答案,以及在构建文件中使用任务执行(type:JavaExec),
并在命令行执行gradle
。我尝试了这两种方法,但没有成功。
我有两个问题:
(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
在任何一种情况下,都无法通过。从 开始运行的代码将系统属性读取为 null/missing。myproperty
MyMain.main (...)
myproperty
(2) 我无法传递命令行参数
这可能与第一个问题有关。例如,在 中,命令行参数本身是通过系统属性传入的。Gradle 就是这种情况,还是有另一种方法可以传递命令行参数?exec-maven-plugin
如何通过这些变量?另外,是使用更好还是?apply plugin: 'application'
task execute (type:JavaExec)