Передача Java инструментов агентов в порожденную JVM - PullRequest
3 голосов
/ 28 мая 2020

Контекст

Я создал собственный бегун Junit для моих конкретных c потребностей (тестирование Java программ, использующих MPI, но здесь это не актуально). Ключевая часть моего раннера состоит в том, чтобы задействовать несколько JVM для запуска тестов. Я делаю это с помощью ProcessBuilder.

Мой пользовательский бегун отлично работает, что подводит меня к моей проблеме:

Проблема

Я использую Jacoco с Maven для создания отчетов о покрытии тестов. На тестах, использующих обычную среду Junit, это работает нормально. Однако это не тот случай, когда используется мой пользовательский бегун Junit.

Точнее, процесс, в котором запущен мой пользовательский бегун, отслеживается Jacoco (я вижу это на странице «сеансы» отчетов), но JVM, порожденные построителем процессов, - нет.

Некоторые обнадеживающие признаки: Если я вручную добавлю аргумент -javaagent:C:\\Users\\Patrick\\.m2\[...]\org.jacoco.agent-0.8.5-runtime.jar=destfile=C:\\[...]jacoco.exec в свой построитель процессов, он заработает. Созданные JVM отслеживаются Jacoco, и я вижу, что отслеживаются интересующие меня классы. Но это неудовлетворительно, я не могу сохранить этот жестко запрограммированный аргумент.

Мой вопрос

Есть ли способ получить -javaagent часть команды изнутри запущенная JVM?

В моем случае я бы поискал потенциальных java агентов, отслеживающих мой пользовательский бегун Junit. Если они есть, я бы перенес их в процессы, которые вызываю с помощью ProcessBuilder.

Я поискал какие-либо признаки агентов в Properties (System.getProperties()), но ничего не нашел.

Буду рад предоставить любую дополнительную информацию.

1 Ответ

2 голосов
/ 28 мая 2020

Вы можете получить большинство аргументов виртуальной машины, используя RuntimeMXBean.getInputArguments():

List<String> vmArgs = ManagementFactory.getRuntimeMXBean().getInputArguments();

Этот список содержит (по крайней мере, на моей машине) все -javaagent:... аргументы, среди прочих параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...