如何在全局范围内设置jdk.attach.allowAttachSelf = true

时间:2018-05-23 22:02:01

标签: java java-9

我正在尝试将我们的系统之一从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失败。

所以我做错了,应该如何解决。

提前感谢您的意见。

2 个答案:

答案 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 选项”添加任何内容都没有任何作用。