【发布时间】:2018-11-03 00:25:28
【问题描述】:
我正在尝试将我们的一个系统从 java 8 迁移到 java 9,并且在 java 8 中运行正常的单元测试中约有三分之一失败并出现以下错误:
java.io.IOException: Can not attach to current VM
Google 带我看了几页,我很快就明白,在 java 9 中,默认行为已更改,以防止附加到当前 VM,并返回到您需要将系统属性 jdk.attach.allowAttachSelf 设置为 true 的旧方式.
在 IntelliJ 中设置此项时,测试工作正常。将 build.gradle 更改为包含以下内容时同样有效:
test {
jvmArgs '-Djdk.attach.allowAttachSelf=true'
}
但是,我宁愿在全局范围内使用此设置,这样我就不需要破解我的 build.gradle 和 IntelliJ。
我在 ubuntu 上运行 java 9,我更改了 /etc/profile.d/jdk.sh 以包含以下内容:
export JDK_JAVA_OPTIONS="-Djdk.attach.allowAttachSelf=true"
运行我的 Gradle 构建时,我可以看到设置被拾取,因为我在构建输出中低于:
NOTE: Picked up JDK_JAVA_OPTIONS: -Djdk.attach.allowAttachSelf=true
但是,测试不断失败并出现相同的 IOException。
那么我做错了什么,我应该如何解决它?
提前感谢您的意见。
【问题讨论】:
-
难以置信。 2 年,甚至无法从官方消息中理解。
-
如果有人仍然有这个问题,请确保您使用
--no-daemon进行测试,因为未设置JDK_JAVA_OPTIONS时可能已经启动了守护进程。