Java Attach API (tools.jar の一部) を使用して、実行中の Java プロセスにアタッチし、内部からシャットダウンしました。
Windowsで完全に動作します。ただし、Linux で実行しているときにアタッチ コードを実際に実行しようとするとjava.lang.NoClassDefFoundError
、原因の次のスタック トレースが表示されます...
java.lang.ClassNotFoundException:com.sun.tools.attach.VirtualMachine...
java.net.URLClassLoader$1.run(URLClassLoader.java:202)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:190)
java.lang.ClassLoader.loadClass(ClassLoader.java:306)
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
java.lang.ClassLoader.loadClass(ClassLoader.java:247)
私はMavenを使用していますが、これまでのところ、tools.jarを含めるためにこのセクションがあります。
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.4.2</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
特に ${java.home} は jre に評価されますが、jdk への直接パスに変更しても問題は同じです。
私はかなり困惑しています...