为什么WildFly会在Intellij IDEA的调试模式下抛出异常,而运行模式运行得非常好?

时间:2015-05-30 13:54:15

标签: java debugging intellij-idea jboss wildfly-8

我决定学习如何调试Java EE应用程序。 我有一个简单的JSF / EJB / JPA应用程序,我通过Intellij IDEA部署和运行。这意味着我有一个所谓的运行/调试配置,我已经指定了一个要部署的工件(一个war文件)一个应用程序服务器路径(使用了wildfly-8.2.0.Final/bin/standalone.bat)一个url to部署后在浏览器中打开(它是一个Web应用程序)。工作真棒 - 没问题。但是当我运行调试时,根据我的理解使用基本相同的配置,但只添加

JAVA_OPTS   -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:52764,suspend=y,server=n

环境变量我有问题。

  

d:\ PROC \ wildfly-8.2.0.Final \ BIN \ standalone.bat   D:\ Proc \ JDK \ jdk1.8.0_31 \ bin \ java -classpath“D:\ Proc \ IntelliJ IDEA   14.1.3 \ lib \ idea_rt.jar; D:\ Proc \ IntelliJ IDEA 14.1.3 \ lib \ util.jar“-Dfile.encoding = windows-1251 com.intellij.rt.execution.CommandLineWrapper   C:\ Users \用户名\ AppData \本地的\ Temp \ classpath0.tmp   com.intellij.javaee.oss.process.JavaeeProcess 53821   com.intellij.javaee.oss.jboss.agent.JBoss71Agent检测到服务器管理员   port:9990 [2015-05-30 04:35:06,499]神器组合:战争爆发:   服务器未连接。部署不可用。检测到服务器http   端口:8080呼叫   “D:\ Proc \ wildfly-8.2.0.Final \ bin \ standalone.conf.bat”“JAVA_OPTS   已经在环境中设定;使用值覆盖默认设置:   -agentlib:JDWP =运输= dt_socket,地址127.0.0.1 =:52764,暂停= Y,服务器= N

     

“将JAVA属性设置为”D:\ Proc \ JDK \ jdk1.8.0_31 \ bin \ java“

     

JBoss Bootstrap环境

     

JBOSS_HOME:“D:\ Proc \ wildfly-8.2.0.Final”

     

JAVA:“D:\ Proc \ JDK \ jdk1.8.0_31 \ bin \ java”

     

JAVA_OPTS:“ - Dprogram.name = standalone.bat   -agentlib:JDWP =运输= dt_socket,地址127.0.0.1 =:52764,暂停= Y,服务器=正   “

     

=============================================== ================================

     

连接到目标VM,地址:'127.0.0.1:52764',传输:   '插座'

之后,我猜部署阶段失败并出现异常,并且默认行为假定的调试器在URLClassLoader中抛出异常的行停止: enter image description here

enter image description here

发生了什么事?为什么相同的配置表现不同?我需要一些东西开始...

THX。

1 个答案:

答案 0 :(得分:2)

原因是Intellij Idea在调试模式下启动时会覆盖JAVA_OPTS环境变量。您可以在运行/调试配置对话框中对此进行验证。选择您的配置,然后查看启动/连接选项卡。选择 Debug ,您可以在下面看到 Pass环境变量的复选标记已设置。

JAVA_OPTS有一个条目。它可能会覆盖standalone.conf中的所有设置(windows的standalone.conf.bat)。这些设置对于操作非常重要。特别是如果您在standalone.conf中自定义某些设置,您可以在运行模式下看到它们,但不能在调试模式下看到它们。