2016-02-03 25 views
5

Sto provando a eseguire il port delle build del client Codename One che sono script di antas molto personalizzati per funzionare con gradle. Quando si esegue un Codename Un'app sul simulatore non si esegue le applicazioni di classe principale, ma piuttosto qualcosa di simile:Obiettivo debug per gradle equivalente al blocco run {} per passare argomenti

java -classpath CodenameOneJarList com.codename1.impl.javase.Simulator nameOfTheMainClassForTheApp 

Per fare questo in Gradle ho modificato lo script di build di base come ad esempio:

apply plugin: 'java' 
apply plugin: 'application' 
mainClassName = "com.codename1.impl.javase.Simulator" 

// for netbeans 
ext.mainClass = 'com.codename1.impl.javase.Simulator' 

Poi in fondo ho fatto questo:

run { 
    args 'com.mycompany.myapp.Main' 
} 

questo ha funzionato come previsto e ha lanciato il simulatore quando si preme corsa nel IDE NetBeans(). Non sono sicuro che questa sia la "cosa giusta" da fare e se funzionerà in altri IDE.

Poi, quando ho provato a lanciare nel debugger gli argomenti non sono stati passati visto che immagino che il target run non sia stato richiamato?

Ho provato a fare questo:

debug { 
    args 'com.mycompany.myapp.Main' 
} 

Il che, ovviamente, non è riuscita. Non sono esattamente sicuro di dove passare argomenti al debugger?

È standardizzato da gradle?

Sono nella giusta direzione per quanto riguarda il passaggio di argomenti?

A cosa serve la mappa sintattica dichiarativa "run"? Come trovo gli altri potenziali tipi di blocchi dichiarativi?

Sfortunatamente googling per le basi come eseguire/debug non risulta in qualcosa di utile.

risposta

1

La sezione run in build.gradle è DSL aggiunta al progetto dal plug-in application applicato. Here is more information sul plug-in. Come avrai notato, il plug-in dell'applicazione è davvero orientato a produrre un jar eseguibile, distribuendolo ed eseguendolo, non tanto per il debug, né per il supporto.

Per avviare un processo java da Gradle, è possibile utilizzare un'attività JavaExec e qualsiasi argomento JVM arbitrario utilizzando il campo args, incluse ma non limitate alle opzioni di debug.

Si potrebbe fare qualcosa di simile:

task runApp(type: JavaExec) { 
    classpath = sourceSets.main.runtimeClasspath 
    main = 'package.Main' //class to run 

    // add debug arguments as required, for example: 
    args '-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8888,suspend=n' 
} 

corsa gradle runApp per avviare l'applicazione in modalità di debug e quindi collegare il vostro IDE. Non essendo abbastanza familiare con Netbeans, non posso commentare come collegare Netbeans a un processo di debug java.

+0

Grazie. Quindi c'è un plugin che mi permetterà di farlo? Definire un obiettivo per il debug e in generale tutte le attività di cui ha bisogno l'IDE o devo fare qualcosa di specifico per-IDE per farlo funzionare? Se quest'ultimo da dove comincio a cercare hack come questo? –

+0

FYI Ovviamente ho installato il plugin gradle netbeans ;-) –

+0

Come si esegue il debug di una classe specifica in un semplice progetto java (non gradle) in netbeans? – RaGe