Gradleで、環境変数を取得するより良い方法はありますか?


151

いくつかのタスクで、ホームフォルダーのjarを参照します。

環境変数を取得するより良い方法はありますか

ENV = System.getenv()
HOME = ENV['HOME']

task copyToServer(dependsOn: 'jar', type: Copy) {

 from 'build/libs/'
 into HOME + "/something/plugins/"
}

これは$ HOMEを設定しますが、ドキュメントからいくつかの魔法を逃したことを望んでいました。


1
Gradleで環境変数を表示して使用する前に、環境変数をエクスポートする必要があることに注意してください。$ export FOO=bar
luka5z

ここに欠けているものがあります...付けなければなりませんdef HOME:Gradle 4.4.1にProjectHOMEプロパティまたはプロパティがありませんENV。脱落したものかも…?
マイクげっ歯類

回答:


243

上手; これも機能します:

home = "$System.env.HOME"

何を目指しているのかはっきりしない。


17
またはあなたの使用法: "$ {System.env.HOME} / something / plugins"に
JoeG

8
環境変数FOOがシステム環境変数として定義されていない場合、「$ System.env.FOO」は値「null」の文字列を返すことに注意してください。値が「null」の文字列をコンソールにロギングすると、同じ出力がnull変数として出力されるため、混乱を招く可能性があります。
グーカンバリスアーカー

4
または単にホーム= System.env.HOME?
アリスパーセル

14
設定されていない可能性のある環境変数を取得しようとしているSystem.getenv('VAR')場合は、割り当てられていない場合にnullを返すを使用することをお勧めします。使用"$System.env.VAR"すると、文字列が返されます"null"
18年

ここに欠けているものがあります...付けなければなりませんdef home:Gradle 4.4.1にProjecthomeプロパティがありません。脱落したものかも…?
マイクげっ歯類

100

@thoredgeによって提案された形式をGradle 1.11で機能させることができませんでしたが、これは私にとってはうまくいきます:

home = System.getenv('HOME')

純粋なJavaで動作するものはすべてGradleでも動作することを覚えておくと役立ちます。


理由はわからないが、私が機能するSystem.getenv('HOME')バージョンを取得することしかできなかった。他のバージョンが戻ってきたnull
Kip

1
おそらく、誤って二重引用符ではなく単一引用符を使用しましたか?
アリスパーセル

7
これは答えよりも優れています:stackoverflow.com/a/9856769/689223、存在しない場合のnull代わりに返されるため"null"です。
Ricardo Freitas

12

Android Gradle 0.4.0では、次のようにすることができます。

println System.env.HOME

クラスパスcom.android.tools.build:gradle-experimental:0.4.0


11
thoredgeはあなたの答えの4年前にそれを言った!
マイクげっ歯類
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.