Начиная с Java 9 они переместили большинство (если не все) вещи tools.jar
в модули JDK.В этом случае инструмент jstatd
был перемещен в собственный модуль: jdk.jstatd
.Чтобы узнать местоположение (кодовую базу) этого модуля, я запустил следующий код:
public class Main {
public static void main(String[] args) {
ModuleLayer.boot() // ModuleLayer
.configuration() // Configuration
.findModule("jdk.jstatd") // Optional<ResolvedModule>
.orElseThrow() // ResolvedModule (or throw)
.reference() // ModuleReference
.location() // Optional<URI>
.ifPresentOrElse(System.out::println, () -> System.out.println("Location unknown."));
}
}
Используя эту командную строку: ...\jdk-10.0.1\bin\java --add-modules jdk.jstatd Main
Это распечатано jrt:/jdk.jstatd
.Учитывая это, вы можете попробовать:
grant codebase "jrt:/jdk.jstatd" {
permission java.security.AllPermission;
};
Обратите внимание, что я просто догадываюсь здесь и не проверял это.Если вы попробуете это, и это не сработает, пожалуйста, дайте мне знать, чтобы я мог удалить этот ответ.
ОБНОВЛЕНИЕ : Следующий файл политики работает в Java 11:
grant codebase "jrt:/jdk.jstatd" {
permission java.security.AllPermission;
};
grant codebase "jrt:/jdk.internal.jvmstat" {
permission java.security.AllPermission;
};