gpt4 book ai didi

java - gradle 中的 "-Dorg.gradle.project.env=demo"和 "-Denv=demo"有什么区别?

转载 作者:行者123 更新时间:2023-12-01 14:21:34 25 4
gpt4 key购买 nike

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

最佳答案

I guess when you use org.gradle.project, you should use another method to get system property, not using System.getProperty("env")


你是对的。这两种语法是不同的,用于不同的目的。
后者, -Denvpassing system properties的标准方式在Java世界。如果您运行 java -help你会看到的:

-D<name>=<value> set a system property


所以,当你使用它时, env系统属性可通过 System.getProperty("env") 获得它的值将是 demo .
第一个 -Dorg.gradle.project.env其实也是系统属性!阅读以上几行后就很明显了。但是,它设置了一个名为 org.gradle.project.env 的系统属性。 ,不仅仅是 env .所以,除非你的测试需要这个名字,否则它不会工作。并且您的测试不能期待这个名称,因为它们通常应该不知道构建工具。
什么 Gradle docs说是:

Gradle offers a variety of ways to add properties to your build. With the -D command line option you can pass a system property to the JVM which runs Gradle. The -D option of the gradle command has the same effect as the -D option of the java command.

Gradle can also set project properties when it sees specially-named system properties or environment variables. This feature is very useful when you don’t have admin rights to a continuous integration server and you need to set property values that should not be easily visible, typically for security reasons. In that situation, you can’t use the -P option, and you can’t change the system-level configuration files. The correct strategy is to change the configuration of your continuous integration build job, adding an environment variable setting that matches an expected pattern. This won’t be visible to normal users on the system.

If the environment variable name looks like ORG_GRADLE_PROJECT_prop=somevalue, then Gradle will set a prop property on your project object, with the value of somevalue. Gradle also supports this for system properties, but with a different naming pattern, which looks like org.gradle.project.prop.


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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com