Java 从终端以调试模式运行jar

Java 从终端以调试模式运行jar,java,apache-commons-cli,Java,Apache Commons Cli,我正在使用intellij idea IDE,我试图在调试模式下从终端运行我的jar文件,并在代码中的一些地方设置断点 我使用的命令是:java-jar myTestApp.jar-file“myfile.txt”-users myUser-Xdebug-Xrunjdwp:transport=dt_socket,server=127.0.0.1,suspend=n,address=8080 问题是我也在使用commons cli库,因此-Xdebug和-Xrunjdwp参数不被识别为选项,我得到

我正在使用intellij idea IDE,我试图在调试模式下从终端运行我的jar文件,并在代码中的一些地方设置断点

我使用的命令是:
java-jar myTestApp.jar-file“myfile.txt”-users myUser-Xdebug-Xrunjdwp:transport=dt_socket,server=127.0.0.1,suspend=n,address=8080

问题是我也在使用commons cli库,因此-Xdebug和-Xrunjdwp参数不被识别为选项,我得到:
知道如何解决这个问题吗?

-Xdebug应该移到-jar参数前面。现在Java认为它是程序参数的一部分。

在指定要运行的类或jar后,Java只需要程序参数。因此,只需将JVM选项放在前面:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=127.0.0.1,suspend=n,address=8080 -jar myTestApp.jar -file "myfile.txt" -users myUser 

请假设问题的作者在2018年没有使用Java 5:

java-agentlib:jdwp=transport=dt_socket,地址=8080,服务器=y,挂起=n-jar-myTestApp.jar-file“myfile.txt-users-myUser

顺便说一句:如果您使用:将
address=8080
更改为
address=*:8080
,因为localhost不再是默认值

停止告诉人们使用
-Xdebug
-Xrunjdwp

已在Java 5及以下版本中使用。自Java 6以来,有可用的
-agentlib
Xdebug
允许通过
Xrunjdwp
访问调试器。
如果您使用
Xdebug
,并且使用旧的调试器,JIT现在以兼容模式启动,这会极大地降低调试速度。
人们会告诉你使用
-Djava.compiler=NONE
来禁用兼容模式,或者添加
-Xnoagent
来禁用旧版调试器。不要这样做使用
-agentlib

这对我来说很有效

java -jar -Xdebug  -agentlib:jdwp="transport=dt_socket,server=y,suspend=n,address=5000" core-service-1.0-SNAPSHOT.jar

Thasks,成功了(不是抛出错误)但执行仍然没有在断点处停止。我做错了什么?请尝试使用
suspend=y
,这会使程序在初始化后立即停止,并等待调试器连接。此外,由于使用IntelliJ,您可以为外部jar创建运行配置,并在调试模式下启动。由于这是nswer严重影响性能,多年来一直被弃用。有关最新的解决方案,请参阅我的答案。我使用了原始问题的确切论点,这不是我的具体建议。@Damarus我理解这一点。但您正在传播(即使不是故意传播)坏信息。很抱歉,您的答案不应该排名很高,因为因为这是一个Java 5参数,所以不应该再使用Xdebug了!我需要在服务器上运行这个jar,并在eclipse中作为远程Java应用程序在本地计算机上调试代码。所以我在服务器上使用它来启动jar,“Java 9及更高版本”链接被破坏。更新了“Java 9及更高版本”“-链接以显示JDK概述,因为oracle页面结构已更改。谢谢你的提示@卢克胡奇森