0

最終的に 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 compilepom.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/

4

1 に答える 1