java - Maven 使用编译器选项 --add-exports 编译
问题描述
所以我终于切换到 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。
解决方案
我有好消息要告诉你,你不再需要LocalVmManager
了。这将适用于您当前的 JVM:
ProcessHandle.current().pid()
要访问其他进程的 PID:
ProcessHandle
// returns Stream<ProcessHandle>
.allProcesses()
.filter(/* filter to only find JVM processes */)
.map(ProcessHandle::pid)
.collect(toList());
该ProcessHandle
API是在 Java 9 中添加的,它为您提供了许多有关操作系统进程的信息 - 也请检查方法info()
。:)
推荐阅读
- r - Aggregate data and exclude duplicates in one column
- postgresql - Postgresql 应该 left join 使用 WHERE 还是 ON 就足够了?
- java - 无法在 Android 中更新 Firebase 实时数据库
- laravel - 如何从全局函数中使用 v-if
- django - Django 2.3: I committed my secret key to a private repository. Can I just edit the secret key myself and then add .env file to .gitignore?
- python - How to fix "curl: (6) Could not resolve host: bootstrap.pypa.io"
- html - Prevent text from shifting in Child of Flexbox Parent
- extentreports - 我在哪里可以获得 .setTestViewChartLocation,因为它不存在于 ExtentReport 4.0.9 中
- google-apps-script - 是否有用于重新加载 Google 边栏的 Google 脚本命令?
- java - 如何为 Mac OS X 获取 JDK 8 - 32 位以进行 Openhab 开发?