web-dev-qa-db-ja.com

システムプロパティをGradleタスクに渡す方法

Gradle spring-bootプラグインを使用していますが、テスト実行のためにスプリングアクティブプロファイルを選択する必要があります。

spring.profiles.activeシステムプロパティをbootRunプラグインのタスクに渡すにはどうすればよいですか?

すでに失敗したもの:

task bootRunLocal {
    systemProperty "spring.profiles.active", "local"
    System.setProperty("spring.profiles.active", "local")
    tasks.bootRun.execute() // I suspect that this task is executed in a separate JVM
}

また、一部のコマンドラインマジックも失敗します。

./gradle -Dspring.profiles.active=local bootRun

誰かが親切に私のトラブルを解決するのを手伝ってもらえますか?

回答とコメントから更新:

私はsystemPropertyを設定し、それをスプリングコンテナに渡すことができます:

run {
    systemProperty "spring.profiles.active", "local"
}

ただし、これを行うと、bootRunタスクとbootRunLocalタスクの両方にローカルプロファイルが設定されます。このプロパティをbootRunLocalタスクに設定し、booRunからbootRunLocalタスクを呼び出す方法が必要です。

それは非常に単純に聞こえるかもしれませんが、私は構造化されたMavenの世界から平和をもたらしています。

43
WeMakeSoftware
task local {
    run { systemProperty "spring.profiles.active", "local" }
}

bootRun.mustRunAfter local

次に、gradleコマンドを次のように実行します。

gradle bootRun local
17
Vlad

私はここに遅れていることを知っています...しかし、私は最近この正確な問題に直面しました。コマンドラインでシステムプロパティとしてspring.profiles.activeとspring.config.locationを設定してbootRunを起動しようとしました。

したがって、コマンドラインの「マジック」を機能させるには、これをbuild.gradleに追加するだけです

bootRun {
    systemProperties System.properties
}

次に、コマンドラインから実行しています...

gradle -Dspring.profiles.active=local bootRun

Env変数を追加するために個別のタスクを定義する必要なく、ローカルをアクティブプロファイルとして設定します。

72
Erich

システムプロパティをタスクに渡す一般的な方法はありません。簡単に言えば、個別のJVMをフォークするタスクでのみサポートされています。

bootRunLocalタスク(上記で定義)は別のJVMで実行されません。また、タスクでのexecute()の呼び出しはサポートされていません(いずれにしても実行フェーズで発生する必要があります) )。一方、テストは常に別のJVMで実行されます(Testタスクによって実行される場合)。テスト実行のシステムプロパティを設定するには、対応するTestタスクを構成する必要があります。例えば:

test {
    systemProperty "spring.profiles.active", "local"
}

詳細については、 Gradle Build Language ReferenceTestを参照してください。

17

以下のgradle 2.14では、例が機能します。以下のように追加しました。
System.properties ['spring.profiles.active']がnullの場合、デフォルトのプロファイルが設定されます。

  bootRun {
       systemProperty 'spring.profiles.active', System.properties['spring.profiles.active']
    }

コマンドラインの例

gradle bootRun -Dspring.profiles.active=dev
7
Mikołaj Mitura
SPRING_PROFILES_ACTIVE=local gradle clean bootRun

これは this および this に基づいており、動作します。

6
Soumya

誰かがこの問題を抱える場合の参考として:

Vladの回答は私にとってはうまくいきませんでしたが、これは2.4でうまく機能します。

task local <<{
    bootRun { systemProperty "spring.profiles.active", "local" }
}
local.finalizedBy bootRun

gradle local

5

ここでのOPの正確なリクエストへの応答...

Spring.profiles.activeシステムプロパティをbootRunプラグインのタスクに渡すにはどうすればよいですか?

そして、「パス」でOPが「コマンドラインからのパス」または「IDE呼び出し)からのパス」を意味すると仮定します...これは私がやりたい方法です。

これをbuild.gradleに追加します。

/**
 * Task from spring-boot-gradle-plugin, configured for easier development
 */
bootRun {
    /* Lets you pick Spring Boot profile by system properties, e.g. gradle bootRun -Dspring.profiles.active=dev */
    systemProperties = System.properties
}

次に、起動するときに、システムプロパティを設定するために使い慣れたJavaフラグを使用します

gradle bootRun -Dspring.profiles.active=local

環境変数オプション(SPRING_PROFILES_ACTIVE=local gradle bootRun)...そして、それはLinux/OS X(bashなど)とWindows(とにかくcmd.exe)の間の簡単な移植性です。

このブログ投稿 からこの方法を学びました。

(更新:どういうわけか、同じ推奨事項で@Erichの応答を見逃していました。おっと!移植性などに関する追加の詳細のために、答えを残しています。)

3
hangtwenty

spring-boot-gradle-plugin documentation によると、このような引数を渡すことができるはずです

./gradlew bootRun --args='--spring.profiles.active=dev'

これは4.9以降の新しいgradle機能のようです。私は自分のプロジェクトでそれを使用し、そのまま使用できました。

3
Domo

タスクを実行する前にorg.springframework.boot.gradle.run.BootRunTaskを拡張し、プロパティを設定する新しいタスク(名前がbootRunLocalの場合)を作成できます。次のコードでこのようなタスクを作成できます。

task bootRunLocal(type: org.springframework.boot.gradle.run.BootRunTask) {
    doFirst() {
        main = project.mainClassName
        classpath = sourceSets.main.runtimeClasspath
        systemProperty "spring.profiles.active", "local"
    }
}

詳細はこちらをご覧ください: https://karolkalinski.github.io/gradle-task-that-runs-spring-boot-aplication-with-profile-activated/

3
user3683276

これは動作します:

SPRING_PROFILES_ACTIVE = production ./gradlew app-service:bootRun

1
user2266870

SpringBoot 2.0.0-M5以降、setSystemProperties()はタスクbootRunのメソッドではなくなりました。 build.gradleを更新する必要があります

bootRun {
    execSpec {
        // System.properties["spring.profiles.active"]
       systemProperties System.properties
    }
}

これは、springBootの実行タスクがorg.gradle.process.JavaExecSpec

これはGradle 4.2を使用して私のために機能します

1
CyclingSir

Gradleタスクからのサポートを必要としない別の方法: Java_TOOL_OPTIONS 環境変数を設定します:

Java_TOOL_OPTIONS='-Dfoo=bar' gradle ...

または、変数に有用なものが既に含まれている場合:

Java_TOOL_OPTIONS="$Java_TOOL_OPTIONS -Dfoo=bar" gradle ...
0
EndlosSchleife
// defualt value
def profiles = 'dev'

bootRun {
    args = ["--spring.profiles.active=" + profiles]
}

その後、次のように、gradleタスクを開始するときに特定のバージョンを選択するだけです

./gradlew bootRun -P dev

「dev」は「prod」になります

0
Simon

runコマンドを使用すると、ビルドファイルに追加できますrun { systemProperties = System.properties }とgradleで始まるrun -Dspring.profiles.active=local

0
z0mb1ek