Запуск jstatd в Java 9+ - PullRequest
       40

Запуск jstatd в Java 9+

0 голосов
/ 26 июня 2018

В прошлом я запускал jstatd через файл политики безопасности, как предлагается здесь: https://stackoverflow.com/a/14930180/1294116

Однако в Java 9+ они удалили файл tools.jar, что означает, что этоРешение больше не работает.Кто-нибудь знает, как это обойти?(В настоящее время я вернулся к ошибке java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") ...)

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Начиная с 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;    
};
0 голосов
/ 26 июня 2018

Я нашел одно (сомнительное) решение этой проблемы:

grant {
   permission java.security.AllPermission;
};
...