有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试移植Codename One客户端构建,它们是非常定制的ant脚本,可用于gradle。当你在模拟器上运行一个代号为One的应用程序时,你不是在运行apps main类,而是在运行类似于:

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)中按run键时启动了模拟器。但我不确定这是否是一个“正确的做法”,以及它是否能在其他IDE中工作

然后,当我尝试在调试器中启动时,参数没有传递,因为我猜run目标没有被调用

我试着这么做:

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

这显然失败了。我不确定在哪里向调试器传递参数

这是gradle标准化的吗

我的观点正确吗

“run”声明性语法映射到什么?如何找到其他可能的声明性块类型

不幸的是,谷歌搜索run/debug之类的基础知识并不会带来有用的结果


共 (1) 个答案

  1. # 1 楼答案

    构建中的run部分。gradle是从您应用的application插件添加到您的项目中的DSLHere is more information关于插件。正如您所注意到的,应用程序插件实际上是为了生成一个可运行的jar,分发和执行它——不太适合调试,也不支持调试

    要从Gradle启动java进程,可以使用^{}任务,以及使用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进程