调试gradle的目标,相当于run {}块,用于传递参数

Sha*_*mog 5 java gradle codenameone build.gradle

我正在尝试移植Codename One客户端构建,这是非常自定义的ant脚本,可以使用gradle.当您在模拟器上运行Codename One应用程序时,您没有运行应用程序主类,而是类似于:

java -classpath CodenameOneJarList com.codename1.impl.javase.Simulator nameOfTheMainClassForTheApp
Run Code Online (Sandbox Code Playgroud)

为了在gradle中执行此操作,我编辑了基本构建脚本,如下所示:

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

// for netbeans
ext.mainClass = 'com.codename1.impl.javase.Simulator'
Run Code Online (Sandbox Code Playgroud)

然后在底部我做了这个:

run {
    args 'com.mycompany.myapp.Main'
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作,并在IDE(NetBeans)中按下运行时启动了模拟器.我不确定这是否是"正确的事",如果它可以在其他IDE中使用.

然后,当我尝试在调试器中启动时,由于我猜测run目标未被调用,因此没有传递参数?

我试过这样做:

debug {
    args 'com.mycompany.myapp.Main'
}
Run Code Online (Sandbox Code Playgroud)

哪个明显失败了.我不确定将参数传递给调试器的位置?

这是通过gradle标准化的吗?

关于争论的传递,我是否正确的方向?

"运行"声明性语法映射到什么?如何找到其他潜在的声明性块类型?

不幸的是谷歌搜索运行/调试等基础知识不会产生有用的东西.

RaG*_*aGe 2

build.gradle 中的部分run是从您应用的插件添加到项目中的 DSL application这是更多信息这是有关该插件的正如您所注意到的,应用程序插件实际上是为了生成可运行的 jar、分发和执行它而设计的,而不是用于调试,并且不支持调试。

要从 Gradle 启动 java 进程,您可以使用任务JavaExec以及使用该args字段的任意 JVM 参数,包括但不限于调试选项。

你可以这样做:

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

运行gradle runApp以在调试模式下启动您的应用程序,然后连接您的 IDE。由于对 Netbeans 不够熟悉,我无法评论如何将 Netbeans 附加到调试 java 进程。