Eclipse:如何将Java程序作为.jar文件进行调试?

38

我在Eclipse中使用ant创建.jar文件,效果非常好。

我有一个正在处理的.jar文件,它希望代码在.jar文件中(它查找与.jar文件相同目录中的.properties文件)--标准的Eclipse“运行”和“调试”菜单执行指定Java类的main()方法...但是它们是从包含编译后类文件的目录中运行,而不是.jar文件。是否有一种方法可以更改此行为,使Eclipse从适当的.jar文件中运行代码?

(我现在的解决方法是在外部运行.jar文件,并挂起等待调试器,参见Dave Ray对我的其他问题的答案。)

4个回答

70

你可以通过以下方式运行你的jar包来使用远程调试

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -jar yourJar.jar

然后从您的IDE连接到该端口。


这个对我有用;Java应用程序启动需要一个主类。 - acostache
7
在Eclipse中,您需要前往“调试配置(Debug Configurations...)”并创建一个新的“远程Java应用程序(Remote Java Application)”。 - thomasa88

32
可以创建自定义的"Run Configuration",例如一个 "Java Application" 配置,包含以下内容:
  • Classpath 选项卡清空其默认内容(.class 目录),并添加 jar 包。
  • Source 选项卡应保持其默认内容(应引用项目的 src 目录)。
可以运行或调试此类配置。

http://www.kermeta.org/docs/html.chunked/KerMeta-UI-UserGuide/KerMeta-UI-UserGuide_figures/KerMeta_RunCommandLine_classpath.png

(自定义配置示例,使用 jar 包作为用户条目)

这对于 IntelliJ Idea 不适用,对吗?(需要指定一个模块) - Denys S.
@den:不直接适用(我对IntelliJ的了解不足,无法立即想到类似的过程) - VonC
1
@VonC:在IDEA中,您不能运行不属于您模块(我猜是Eclipse“语言”中的项目)的应用程序。看起来一个可行的解决方案是设置远程应用程序运行。 - Denys S.
@den:没错,远程应用程序应该可以工作(实际上与任何IDE一起使用)。 - VonC
这听起来是一个很好的解决方案,但我认为你需要提供一个Main类;我认为IonSpin在下面的回答中等价于此,但在进行远程调试时不需要指定主类。 - acostache

9
我刚刚找到了以下链接,它描述了远程调试Java jar的整个过程。 使用Eclipse远程调试Java应用程序 主要部分如下:
目标VM作为调试服务器
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" -jar test.jar 目标VM作为调试客户端
java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y -jar test.jar 根据您运行目标vm的方式,客户端或服务器,您必须以不同的方式配置Eclipse。
如果您将目标vm作为客户端启动,则需要进行Eclipse配置。

enter image description here

如果您将目标VM作为服务器启动,则需要配置Eclipse。

enter image description here

这篇文章还提供了对该主题的简单介绍。

-1

我会尝试让代码更加健壮,使属性文件位置可配置,或者直接从类路径加载。然后你就可以直接将属性文件添加到Eclipse类路径中。问题解决了!


我猜应该是这样的 http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html - Tim Abell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接