Запуск jstatd в Java 9+
В прошлом я запускал jstatd через файл политики безопасности, как предлагается здесь: /questions/27409935/nevozmozhno-zapustit-jstatd-iz-za-oshibki-razresheniya/27409952#27409952
Однако в Java 9+ они удалили tools.jar
файл, который означает, что это решение больше не работает. Кто-нибудь знает, как это обойти? (В настоящее время я вернулся к получению ошибки java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") ...
)
2 ответа
Начиная с 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;
};
Обратите внимание, что я просто догадываюсь здесь и не проверял это. Если вы попробуете это, и это не сработает, пожалуйста, дайте мне знать, чтобы я мог удалить этот ответ.
Я нашел одно (сомнительное) решение этой проблемы:
grant {
permission java.security.AllPermission;
};