Запуск 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;
};
Другие вопросы по тегам