アイデアが不足しているので、次のことが誰かとベルを鳴らすことを本当に望んでいます. さらに診断する方法についての回答または提案をいただければ幸いです。
18 か月間問題なく実行されている Java アプリがあります。現在、Windows Server 2019 Standard を VM として実行する新しいプラットフォームに移行しています。最初のインストールではすべてが正しく実行されますが、定期的にアプリケーションが起動に失敗し、すべての jar ファイルを再コピーすることによってのみ修正できます。これは一時的なもので、最終的には再び失敗します。
多くの監視の結果、すべてのファイルに定期的に「L」ファイル属性を設定し、再解析データも作成する Windows プロセスがあることに気付きました。これは問題ではありませんが、これが発生すると、JVM はアプリケーションを起動できなくなります。(どの Windows 専門家も、これが何をするかについて考えを持っていますか?)
重要な点は、次のような JPMS パラメータを指定してアプリを起動することです。
java -p MyApp.jar;MyApp_mods -m mymodule/mypackage.StartGUI
これは、「L」属性がjarファイルに設定されているユニットでうまく実行され、次のメッセージで失敗します。
Error occurred during initialization of boot layer
java.lang.module.FindException: Module format not recognized: MyApp.jar
MyApp.jar の名前を別の名前に変更し、それを MyApp.jar にコピーして戻すと、L 属性と再解析データのないファイルが作成されるため、問題が修正されます (プロセスが再適用するまで)。
この動作は、この 1 つの操作だけに適用されるのではなく、次のようなモジュール システムが使用されるすべての場所に適用されます。
java --list-modules any-jar-in-the-app.jar
興味深いことに (!)、より単純な非モジュール式アプリを試して次のように実行すると:
java -jar MySimpleApp.jar
L 属性が設定されていても、アプリは正しく実行されます。
明らかに完全には理解できていませんが、モジュールシステムを介して実行すると、L属性/リパースデータを持つファイルが読み取れないことを意味しているように見えます(?)
OpenJDK ホットスポットと OpenJ9 JVM の両方をさまざまなバージョンで試しましたが、結果は同じでした。何か案は?