今天,我试图在代码中使用system属性。当我输入./gradlew -Dorg.gradle.project.env=demo test时,尽管我成功在脚本中打印了env,但还是发生了NullPointExcepetion!然后我尝试了另一种方法,输入./gradlew -Denv=demo test,我的代码成功地在命令行中设置了env 。所以我的问题是gradle中的“-Dorg.gradle.project.env = demo”和“-Denv = demo”之间的区别是什么?该链接(12.2 https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_properties_and_system_properties中的Gradle属性和系统属性)告诉我使用org.gradle.project来设置系统属性。我想当您使用org.gradle.project时,应该使用另一种方法来获取系统属性,而不是使用
System.getProperty("env")

最佳答案


你是对的。这两种语法是不同的,并且具有不同的用途。
后者-Denv是Java世界中passing system properties的标准方式。如果运行java -help,您将看到:

因此,当您使用它时,env系统属性可通过System.getProperty("env")变得可用,其值将为demo
第一个-Dorg.gradle.project.env实际上也是系统属性!阅读上面的几行后很明显。但是,它设置了一个名为org.gradle.project.env的系统属性,而不仅仅是env。因此,除非您的测试期望使用此名称,否则它将无法正常工作。而且您的测试一定不要期望这个名称,因为通常它们应该不知道构建工具。
Gradle docs说的是:

换句话说,Gradle允许您通过为系统属性提供特殊名称来设置项目属性,这就是您所做的。通过为系统属性提供名称Project,将名为env demo 's property设置为值org.gradle.project.env。该属性可通过project.env在构建脚本中使用,并可用于以各种方式调整构建。

关于java - gradle中的 “-Dorg.gradle.project.env=demo”和 “-Denv=demo”有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47320185/

10-10 17:12