2016-04-28 6 views
6

Ich versuche, Gradle zu starten, um den Prozess bootRun mit verschiedenen Feder-Profilen aktiviert zu starten.So führen Sie BootRun mit Federprofil über Gradle Aufgabe

Meine aktuelle bootRun Konfiguration wie folgt aussieht:

bootRun { 
    // pass command line options from gradle to bootRun 
    // usage: gradlew bootRun "-Dspring.profiles.active=local,protractor" 
    if (System.properties.containsKey('spring.profiles.active')) { 
     systemProperty "spring.profiles.active", System.properties['spring.profiles.active'] 
    } 
} 

I Systemeigenschaften mit einer gradle Aufgabe festlegen möchte, und dann bootRun ausführen.

Mein Versuch sah wie folgt aus:

task bootRunDev 

bootRunDev { 
    System.setProperty("spring.profiles.active", "Dev") 
} 

Ein paar Fragen:

  1. ist systemProperty ein Teil der Feder Boot bootRun Konfiguration?
  2. ist es möglich, eine Systemeigenschaft in einer anderen Aufgabe zu setzen?
  3. Was sollte mein nächster Schritt sein? Ich brauche bootRunDev Konfiguration zu erhalten geschehen, bevor bootRun
  4. Gibt es einen anderen Ansatz, den ich in

-Eric

Antwort

3

einfachste Weg Standard wäre definieren aussehen soll und lassen Sie ihn außer Kraft gesetzt werden. Ich bin nicht sicher, was SystemProperty in diesem Fall verwendet. Einfache Argumente werden die Aufgabe erfüllen.

def profiles = 'prod' 

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

dev auszuführen:

./gradlew bootRun -Pdev 

Um Abhängigkeiten von Ihrer Aufgabe hinzufügen, die Sie so etwas tun kann:

task setDevProperties(dependsOn: bootRun) << { 
    doFirst { 
    System.setProperty('spring.profiles.active', profiles) 
    } 
} 

Es gibt viele Möglichkeiten, dies in Gradle zu erreichen.

+0

Ich bekomme 'Die Methode dev() für Argumente [org.springframework.boot: spring-boot-devtools] für das Objekt vom Typ org.gradle.api konnte nicht gefunden werden .internal.artifacts.dsl.dependencies.DefaultDependencyHandler.' wenn ich diesen Ansatz versuche. http://StackOverflow.com/A/31328621/1134197 funktioniert gut – aycanadal

+0

Während ersten Code-Snippet zeigt, wie 'BootRun' Aufgabe zu konfigurieren, funktionieren andere Beispiele einfach nicht. –

4

Mit den Umgebungsvariablen können die Federeigenschaften wie in the documentation beschrieben eingestellt werden. So setzen Sie das aktive Profil (spring.profiles.active) Sie den folgenden Code auf Unix-Systemen verwenden können:

SPRING_PROFILES_ACTIVE=test gradle clean bootRun 

und Windows können Sie:

SET SPRING_PROFILES_ACTIVE=test 
gradle clean bootRun 
+2

Während dieses Code-Snippet die Frage lösen kann, [hilft eine Erklärung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, um die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. – DimaSan

+0

dies funktioniert nicht für Windows – JackDev

1

Für jene Leute mit Spring-Boot 2.0+, Sie kann Folgendes verwenden, um eine Aufgabe einzurichten, die die App mit einer bestimmten Gruppe von Profilen ausführt.

task bootRunDev(type: org.springframework.boot.gradle.tasks.run.BootRun, dependsOn: 'build') { 
    group = 'Application' 

    doFirst() { 
     main = bootJar.mainClass 
     classpath = sourceSets.main.runtimeClasspath 
     systemProperty 'spring.profiles.active', 'dev' 
    } 
} 

Dann können Sie einfach ./gradlew bootRunDev oder ähnliches von Ihrer IDE ausführen.

+0

Wie können wir Webapp-Ordner für diese Aufgabe anpassen ..? – rijin

0

Für jemanden aus dem Internet gab es eine ähnliche Frage https://stackoverflow.com/a/35848666/906265 ich es auch hier die modifizierte Antwort liefern:

// build.gradle 
<...> 

bootRun {} 

// make sure bootRun is executed when this task runs 
task runDev(dependsOn:bootRun) { 
    // TaskExecutionGraph is populated only after 
    // all the projects in the build have been evaulated https://docs.gradle.org/current/javadoc/org/gradle/api/execution/TaskExecutionGraph.html#whenReady-groovy.lang.Closure- 
    gradle.taskGraph.whenReady { graph -> 
     logger.lifecycle('>>> Setting spring.profiles.active to dev') 
     if (graph.hasTask(runDev)) { 
      // configure task before it is executed 
      bootRun { 
       args = ["--spring.profiles.active=dev"] 
      } 
     } 
    } 
} 

<...> 

dann in Terminal:

gradle runDev 

gradle 3.4.1 und spring boot 1.5.10.RELEASE verwendet haben

Verwandte Themen