2017-11-16 14 views
1

今日私は./gradlew -Dorg.gradle.project.env=demo testを入力するとNullPointExcepetionが発生しますが、println envが正常に実行されましたが、./gradlew -Denv=demo testと入力して別の方法を試してみてください。私の質問は、 "-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")gradleの "-Dorg.gradle.project.env = demo"と "-Denv = demo"の間の違いは何ですか?

答えて

1

私はあなたがorg.gradle.projectを使用するとき、あなたはあなたが正しいSystem.getProperty("env")

を使用していない、システムプロパティを取得するために別の方法を使用する必要がありますね。この2つの構文は異なっており、異なる目的を果たします。

-Denvは、Javaの世界で標準的な方法であるpassing system propertiesです。あなたがjava -helpを実行する場合は、表示されます:

-D <名> = <値>は、あなたがそれを使用する場合、envシステムプロパティがSystem.getProperty("env")経由で利用可能になると、それはだ、

だから、システムプロパティを設定します値はdemoになります。

最初の-Dorg.gradle.project.envは、実際にはシステムプロパティです。上記の行を読んだ後は明らかです。ただし、envだけでなく、org.gradle.project.envという名前のシステムプロパティを設定します。あなたのテストがこの名前を期待しない限り、動作しません。そして、テストではビルドツールを知らないので、この名前は期待できません。

Gradle docsされると言う:

のGradleは、ビルドにプロパティを追加するためのさまざまな方法を提供しています。 -Dコマンドラインオプションを使用すると、Gradleを実行するJVMにシステムプロパティを渡すことができます。 gradleコマンドの-Dオプションは、javaコマンドの-Dオプションと同じ効果があります。

Gradleは、特別な名前のシステムプロパティまたは環境変数を表示するときにプロジェクトプロパティを設定することもできます。この機能は、継続的な統合サーバーに対する管理者権限を持たず、通常はセキュリティ上の理由から、簡単には見えないプロパティ値を設定する必要がある場合に非常に便利です。このような状況では、-Pオプションを使用することはできず、システムレベルの構成ファイルを変更することはできません。正しい戦略は、継続的な統合ビルドジョブの構成を変更して、予想されるパターンに一致する環境変数設定を追加することです。これは、システム上の通常のユーザーには表示されません。

環境変数名がORG_GRADLE_PROJECT_prop = somevalueのように見える場合、Gradleはプロジェクトオブジェクトのpropプロパティをsomevalueという値で設定します。 Gradleはこれもシステムプロパティーでこれをサポートしていますが、異なる名前付けパターン(org.gradle.project.propのように見えます)を使用しています。

「Gradle」では、システムプロパティに特別な名前を付けることで、プロジェクトの特質を設定することができます。システムプロパティの名前をorg.gradle.project.envに設定して、envという名前のProject's propertyを値demoに設定しました。このプロパティは、project.envでビルドスクリプトで利用でき、さまざまな方法でビルドを微調整するために使用できます。

+1

お返事ありがとうございました。 –

関連する問題