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

时间:2016-02-03 05:17:56

标签: java gradle build.gradle codenameone

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

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

要在gradle中执行此操作,我编辑了基本构建脚本:

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

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

然后在底部我做了这个:

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

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

然后,当我尝试在调试器中启动时,由于我猜不到run目标没有被调用,所以参数没有通过?

我试过这样做:

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

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

这是通过gradle标准化的吗?

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

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

不幸的是,谷歌搜索运行/调试等基础知识并没有带来有用的东西。

1 个答案:

答案 0 :(得分:1)

build.gradle中的run部分是从您应用的application插件添加到项目中的DSL。关于插件的Here is more information。正如您将注意到的那样,应用程序插件实际上是为了生成一个可运行的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'
}

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