最終的に 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
実際、このオプションを使用すると、コマンドラインからコンパイルできます。しかし、私はアプリケーションを .xml 経由でコンパイルしたいとも思っていました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>
それまでの間、コードを変更し、ディレクトリをスキャンして実行中の JVM の pid を読み取ります/proc/
。