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

Why WildFly throws an Exception in Intellij IDEA's debug mode while the run mode works perfectly well?

我决定学习如何调试 Java EE 应用程序。 我有一个简单的 JSF/EJB/JPA 应用程序,我通过 Intellij IDEA 部署和 运行。这意味着我有一个所谓的 Run/Debug 配置,我在其中指定了要部署的工件(war 文件)应用程序服务器路径(wildfly-8.2.0.Final/bin/standalone.bat 是使用)部署后在浏览器中打开的 url(它是一个 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\username\AppData\Local\Temp\classpath0.tmp com.intellij.javaee.oss.process.JavaeeProcess 53821 com.intellij.javaee.oss.jboss.agent.JBoss71Agent Detected server admin port: 9990 [2015-05-30 04:35:06,499] Artifact portfolio:war exploded: Server is not connected. Deploy is not available. Detected server http port: 8080 Calling "D:\Proc\wildfly-8.2.0.Final\bin\standalone.conf.bat" "JAVA_OPTS already set in environment; overriding default settings with values: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:52764,suspend=y,server=n

" Setting JAVA property to "D:\Proc\JDK\jdk1.8.0_31\bin\java"

JBoss Bootstrap Environment

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=transport=dt_socket,address=127.0.0.1:52764,suspend=y,server=n "

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

Connected to the target VM, address: '127.0.0.1:52764', transport: 'socket'

在那之后,我猜想部署阶段因异常而失败,并且按照其默认行为假设的调试器停止在 URLClassLoader 中引发异常的行上:

这是怎么回事?为什么相同的配置会有不同的表现?我需要一些东西开始...

谢谢。

原因是 Intellij Idea 在调试模式下启动时会覆盖 JAVA_OPTS 环境变量。您可以在 Run/Debug 配置 对话框中验证这一点。 Select 您的配置并查看 Startup/Connection 选项卡。 Select Debug 并且您可以在下方看到 Pass environment variables 的复选标记已设置。

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