2015-06-24 14 views

risposta

4

Sfortunatamente, Gradle esegue Jetty all'interno della propria JVM, quindi non è possibile impostare javaagent solo per un'attività specifica. È impostato per l'intera JVM. Quindi, hai due modi per realizzare ciò che vuoi: o esegui Gradle stesso con javaagent abilitato, oppure generi un altro processo JVM ed esegui Jetty.

La prima soluzione è piuttosto semplice: fornire l'opzione come si fa normalmente. Ad esempio, inserisci org.gradle.jvmargs = "-javaagent:/home/audrius/org.springframework.instrument-3.0.5.RELEASE.jar" nel tuo gradle.properties

Il secondo modo è piuttosto difficile. Non puoi semplicemente generare una nuova JVM e dire "esegui questa attività Gradle" su di essa. Credo che avrete bisogno di utilizzare Gradle Tooling API per deporre le uova nuovo processo basato sul exising accumulo di configurazione via GradleConnector:

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(); 
    } 
} 

Come si vede, la seconda soluzione è piuttosto brutto. Farò meglio a scegliere il primo approccio.

+0

Errami con:: impossibile risolvere la classe ProjectConnection ". .. –

+0

Hai aggiunto 'gradleApi()' al classpath dello script build? – madhead

+1

La prima opzione funziona come un incantesimo! – varra

2

Prova con.

compito run (Tipo: JavaExec) < < {...

Poiché i jvmArgs è noto solo in un JavaExec Task.

+0

Dice: "Nessuna classe principale specificata". deve essere jettyRun funziona in modo diverso. –

+0

Hai visto la domanda. Mi spiace solo di dare un link http://stackoverflow.com/questions/17999062/sending-an-environment-variable-to-jetty-using-jettyrun-in-gradle –

Problemi correlati