2015-02-19 17 views
11

Voglio correre il mio metodo main via compito Gradlemetodo run principale utilizzando Gradle compito "run"

Ecco come ho eseguito attraverso il cmd:

java -cp RTMonitor.jar com.bla.MainRunner first_arg

come dovrebbe essere scritto in Gradle?

run { 
    args += ['java -cp RTMonitor.jar com.bla.MainRunner first_arg'] 
} 

Aggiornamento

ho cercato

task myRun(type: JavaExec) { 
    classpath configurations.main 
    main = "com.bla.runners.StatsLogGenerator" 
    args "arg1", "arg2" 
} 

ed ho ottenuto:

Error:(71, 0) Could not find property 'main' on configuration container.

the I have tried: 
    task myRun(type: JavaExec) { 
     classpath "configurations.main" 
     main = "com.bla.runners.StatsLogGenerator" 
     args "arg1", "arg2" 
    } 

e ho ottenuto un errore:

FAILURE: Build failed with an exception. 
17:49:21.855 [ERROR] [org.gradle.BuildExceptionReporter] 
17:49:21.856 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong: 
17:49:21.856 [ERROR] [org.gradle.BuildExceptionReporter] Execution failed for task ':myRun'. 
17:49:21.856 [ERROR] [org.gradle.BuildExceptionReporter] > Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1 
17:49:21.864 [ERROR] [org.gradle.BuildExceptionReporter] 
17:49:21.865 [ERROR] [org.gradle.BuildExceptionReporter] * Exception is: 
17:49:21.866 [ERROR] [org.gradle.BuildExceptionReporter] org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':myRun'. 
17:49:21.867 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) 

17:49:21.882 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:361) 
17:49:21.882 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.process.internal.DefaultJavaExecAction.execute(DefaultJavaExecAction.java:31) 

ma quando ho eseguito tramite Intellij, ogni thig funziona bene

risposta

20

Il metodo più semplice è probabilmente quello di usare plugin di applicazione. Aggiungi apply plugin: 'application' al file build.gradle e imposta mainClassName = com.bla.MainRunner. Per aggiungere argomenti alla classe principale modificare il compito di esecuzione e modificare la proprietà args

run { 
    args += 'first_arg' 
} 

Classpath è preso automaticamente dal sourceSet principale, se si desidera uno diverso, è possibile modificare le proprietà classpath del compito corsa.

Se avete bisogno di più di personalizzazione, è possibile definire il proprio compito di tipo JavaExec come questo

task myRun(type: JavaExec) { 
    classpath sourceSets.main.runtimeClasspath 
    main = "com.bla.MainRunner" 
    args "arg1", "arg2" 
} 
+0

e che cosa se ho due metodi principali, e voglio definire un compito diverso per ogni? 'mainClassName' è assegnato nell'ambito globale? –

+0

quindi sarà probabilmente meglio definire il proprio compito di tipo JavaExec –

+0

dove è il documento per vedere quali proprietà ha ciascun tipo di attività? –