所以我终于切换到 Java 15,发现我的旧代码不再编译了。我使用包sun.jvmstat.monitor
和类中的类LocalVmManager
来检索系统中运行的所有 JVM 的 pid:这适用于 Java8,但不适用于 Java15(我认为它自 Java9 以来就不起作用)。
感谢 IntelliJ,我发现我需要将以下选项传递给javac
:--add-exports jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local=ALL-UNNAMED --add-exports jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED --add-exports jdk.internal.jvmstat/sun.jvmstat.monitor.event=ALL-UNNAMED
事实上,有了这个选项,我可以通过命令行进行编译。但我也想通过mvn compile
. 如何在 pom.xml 中指定编译器选项?
我尝试了以下没有运气:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>15</release>
<compilerArgs>
<arg>--add-exports</arg>
<arg>jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local=ALL-UNNAMED</arg>
<arg>--add-exports</arg>
<arg>jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED</arg>
<arg>--add-exports</arg>
<arg>jdk.internal.jvmstat/sun.jvmstat.monitor.event=ALL-UNNAMED</arg>
</compilerArgs>
<fork>true</fork>
</configuration>
</plugin>
同时,我将更改我的代码并通过扫描/proc/
目录来读取正在运行的 JVM 的 pid。