【问题标题】:run main method using gradle "run" task使用 gradle "run" 任务运行 main 方法
【发布时间】:2015-04-21 00:18:04
【问题描述】:

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

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

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

gradle应该怎么写?

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

更新

我试过了

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

我得到了:

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"
    }

我得到了一个错误:

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)

但是当我通过 Intellij 运行时,每一个都可以正常工作

【问题讨论】:

    标签: java gradle main


    【解决方案1】:
    task run(type: JavaExec) {
      group = 'Run' // <-- change the name as per your need
      description = 'Small description what this run will do'
    
      classpath sourceSets.main.runtimeClasspath // <-- Don't change this
      main = "com.mypackage.myclassNameContaingMainMethod"
      args "arg1", "arg2"
    }
    

    这是一个独立的注册任务,也可以有分组和描述等任务属性。

    【讨论】:

      【解决方案2】:

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

      run {
        args += 'first_arg'
      }
      

      类路径是从主源集中自动获取的,如果你想要不同的,你可以编辑运行任务的类路径属性。

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

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

      【讨论】:

      • 如果我有两个主要方法,并且我想为每个方法定义不同的任务怎么办? mainClassName 在全局范围内赋值?
      • 那么您可能会更好地定义自己的 JavaExec 类型的任务
      • 查看每个任务类型具有哪些属性的文档在哪里?
      • 在 DSL 参考指南中。对于 JavaExec,这里是 gradle.org/docs/current/dsl/org.gradle.api.tasks.JavaExec.html
      • Error:(71, 0) Could not find property 'main' on configuration container.
      猜你喜欢
      • 2018-08-29
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 2022-07-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      相关资源
      最近更新 更多