如何设置 jdk.attach.allowAttachSelf=true 全局

2022-09-02 02:05:57

我正在尝试将我们的一个系统从java 8移动到java 9,并且在java 8中工作正常的单元测试中约有三分之一失败,并出现以下错误:

java.io.IOException: Can not attach to current VM

Google将我带到了几个页面,我很快了解到在java 9中,默认行为已更改,以防止附加到当前VM并返回到需要将系统属性设置为true的旧方法。jdk.attach.allowAttachSelf

在 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,测试仍然失败。

那么我做错了什么,我应该如何解决它?

提前感谢您的输入。


答案 1

我的测试使用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>

答案 2

我在构建一个 gradle 项目时遇到了同样的问题。很多 VM 绑定问题。添加

JDK_JAVA_OPTIONS=-Djdk.attach.allowAttachSelf=true

在“修改配置”窗格中的环境变量确实修复了此问题。但是,向“VM 选项”添加任何内容都没有任何作用。


推荐