最佳答案
我正在尝试通过 Gradle 运行一个命令行 Java 应用程序,作为快速集成测试的一部分。我正在从 Maven 移植我的构建脚本,这是通过 exec-maven-plugin
很容易做到的。我的两大要求是:
请注意,我并没有试图在构建脚本中读取这些属性,而是试图在脚本构建和执行的 Java 程序中读取它们。
我还发现了另外两篇通过 Gradle 处理 Java 程序执行的 SO 文章: 答案是主张在构建文件中使用 ABC0,在命令行中使用 gradle run
和 另一个则支持这种方法,并在构建文件中使用 ABC2,在命令行中使用 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/miss。
(2)我不能传递命令行参数
这可能与第一个问题有关。例如,在 exec-maven-plugin
中,命令行参数本身是通过系统属性传入的。是这种情况的 Gradle,还是有另一种方法来传递命令行参数?
我如何通过这些变量? 还有,使用 apply plugin: 'application'
或 task execute (type:JavaExec)
是否更好?