【发布时间】:2018-03-16 22:08:51
【问题描述】:
我正在尝试使用 jol 和 Java 9 运行程序,但没有成功。
我在pom.xml 中有以下依赖:
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.9</version>
</dependency>
程序很简单:
package org.example;
import org.openjdk.jol.vm.VM;
public class Example {
public static void main(String[] args) throws Throwable {
System.out.println(VM.current().details());
}
}
模块描述符:
module java9 {
requires jol.core;
}
当我从 IDEA 运行程序时,我看到以下输出:
# WARNING: Unable to get Instrumentation. Dynamic Attach failed.
You may add this JAR as -javaagent manually, or supply -Djdk.attach.allowAttachSelf
我在 IDEA 的 VM 参数中添加了 -Djdk.attach.allowAttachSelf=true,但它没有帮助(仍然是相同的输出)。
附: 我可以从类路径成功运行程序。尽管如此,如何从模块路径运行它还是很有趣的。
【问题讨论】:
-
它可能依赖于反映已被模块系统关闭的 JDK 内部。按照this尝试
--add-opens java.base/java.util=ALL-UNNAMED -
@Michael 感谢您链接到我的问题 :) 我不认为这是相关的...这已在
0.7 -
您能否更新问题以明确它是否作为命令行上的模块工作?正如目前所写的那样,当 JOL 在类路径上时,您在命令行上成功运行它,但在 IDE 中尝试将其作为模块进行,对吗?
-
@AlanBateman 如果 jol-core.jar 和 my-program.jar 都在类路径上,它运行良好。当它们在模块路径上时它会失败。
-
在这种情况下,关于使用 JDK 内部的其他评论可能是有效的,JDK 不会向所有模块打开任何包,它只是(并且只是暂时)只有它的包在类路径。使用 -Dsun.reflect.debugModuleAccessChecks=true 运行可能会发现一些问题,否则将其带到 jol-dev 讨论。