使用gradle"run"任务运行main方法

Ela*_*nda 24 java program-entry-point gradle

我想main通过gradle任务运行我的方法

这是我通过cmd运行的方式:

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

应该如何用gradle写?

run {
    args += ['java -cp RTMonitor.jar com.bla.MainRunner first_arg']
}
Run Code Online (Sandbox Code Playgroud)

更新

我试过了

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

我得到了:

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"
    }
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

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)
Run Code Online (Sandbox Code Playgroud)

但是当我通过Intellij运行时,每个thig工作正常

Tib*_*ssy 38

最简单的可能就是使用应用程序插件.添加apply plugin: 'application'到build.gradle并设置mainClassName = com.bla.MainRunner.要向主类添加参数,请修改运行任务并编辑args属性

run {
  args += 'first_arg'
}
Run Code Online (Sandbox Code Playgroud)

Classpath是从主sourceSet自动获取的,如果你想要不同的,你可以编辑run task的classpath属性.

如果您需要更多自定义,可以像这样定义自己的JavaExec类型的任务

task myRun(type: JavaExec) {
  classpath sourceSets.main.runtimeClasspath
  main = "com.bla.MainRunner"
  args "arg1", "arg2"
}
Run Code Online (Sandbox Code Playgroud)