我正在尝试将我们的系统之一从java 8移动到java 9,并且大约三分之一的单元测试在java 8中正常工作失败,错误如下:
java.io.IOException: Can not attach to current VM
谷歌把我带到了几页,我很快就明白,在java 9中,默认行为已经改变,以防止附加到当前VM并返回到您需要设置系统属性的旧方法jdk.attach.allowAttachSelf
为真。
在intelij中设置时,测试工作正常。更改build.gradle时,同样有效:
test {
jvmArgs '-Djdk.attach.allowAttachSelf=true'
}
但是我宁愿全局使用此设置,因此我不需要破解build.gradle和intelij。
我在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失败。
所以我做错了,应该如何解决。
提前感谢您的意见。
答案 0 :(得分:0)
我的测试正在使用surefire插件运行, 如果在argline中添加了vm参数,则测试开始工作。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<argLine>-Djdk.attach.allowAttachSelf=true </argLine>
</configuration>
</plugin>
答案 1 :(得分:0)
我在构建 gradle 项目时遇到了同样的问题。很多 VM 绑定问题。添加
JDK_JAVA_OPTIONS=-Djdk.attach.allowAttachSelf=true
在环境变量的“修改配置”窗格中确实解决了这个问题。但是,向“VM 选项”添加任何内容都没有任何作用。