2015-06-24 10 views

Antwort

4

Leider läuft Gradle Jetty in seiner eigenen JVM, so dass Sie javaagent nur für eine bestimmte Aufgabe nicht einstellen können. Es ist für die gesamte JVM festgelegt. Sie haben also zwei Möglichkeiten, um das zu erreichen, was Sie wollen: Entweder Sie führen Gradle selbst mit aktiviertem javaagent aus, oder Sie erzeugen einen anderen JVM-Prozess und führen Jetty darin aus.

Die erste Lösung ist ziemlich einfach: Stellen Sie die Option wie gewohnt zur Verfügung. Zum Beispiel, setzen org.gradle.jvmargs = "-javaagent:/home/audrius/org.springframework.instrument-3.0.5.RELEASE.jar" in Ihrem gradle.properties

Die zweite Möglichkeit ist ziemlich schwer. Sie können nicht einfach eine neue JVM erstellen und sagen: "Führen Sie diese Aufgabe aus". Ich denke, Sie werden Gradle Tooling API verwenden müssen neuen Prozess auf Ihrer exising Build Config über GradleConnector basierte zum Laichen:

task run << { 
    ProjectConnection connection = GradleConnector.newConnector().forProjectDirectory(new File("someProjectFolder")).connect(); 

    try { 
     BuildLauncher build = connection.newBuild(); 

     build.setJvmArguments("-javaagent:/home/audrius/org.springframework.instrument-3.0.5.RELEASE.jar") 

     build.forTasks("jettyRun").run(); 
    } finally { 
     connection.close(); 
    } 
} 

Wie Sie sehen, zweite Lösung ziemlich hässlich ist. Ich wähle lieber den ersten Ansatz.

+0

Fehler bei mir:: Klasse Klasse ProjectConnection kann nicht aufgelöst werden ". .. –

+0

Haben Sie '' grdleApi() 'zum Buildskript classpath hinzugefügt? – madhead

+1

Die erste Option funktioniert wie ein Zauber! – varra

2

Versuchen Sie mit.

Task-Ausführung (Typ: JavaExec) < < {...

Da die jvmArgs nur in einer JavaExec Aufgabe bekannt.

+0

Es heißt: "Keine Hauptklasse angegeben". muss jettyRun funktioniert anders. –

+0

Haben Sie die Frage gesehen? Sorry, nur einen Link zu geben http://stackoverflow.com/questions/17999062/sending-an-environment-variable-to-jetty-using-jettyrun-in-gradle –

Verwandte Themen