Есть ли способ узнать, какие параметры Java используются приложением Java внутри JVM (например, те, которые передаются через командную строку)?
Я хочу найти его на лету, когда приложение запускается извне.
Есть ли способ узнать, какие параметры Java используются приложением Java внутри JVM (например, те, которые передаются через командную строку)?
Я хочу найти его на лету, когда приложение запускается извне.
Вы можете использовать JMX:
final JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(connectorAddress));
final MBeanServerConnection mBeanServerConnection = connector.getMBeanServerConnection();
final ObjectName commandLine = new ObjectName("java.lang:type=Runtime");
final List<Attribute> arguments = mBeanServerConnection.getAttributes(commandLine, new String[] {"InputArguments"}).asList();
String[] inputArguments = (String[]) arguments.get(0).getValue();
System.out.println(Arrays.asList(inputArguments));
connector.close();
Чтобы получить соединение JMX, вы можете найти мой ответ на " клиент JMX, доступный только локально " полезно.
Используйте JMX. Это позволяет получать параметры, свойства и т. д. как внутри, так и вне приложения.
Я считаю, что Java не поддерживает «ПЕРЕХОД» аргументов метода, аргументы метода не регистрируются и не перехватываются в JVM.
Однако вы можете легко распечатать аргументы, отправленные работающему классу, используя пример System.env в другом ответе в этой теме.
ОДНАКО, если у вас есть контроль над фактическим исходным кодом приложения, вы можете следовать приведенным здесь инструкциям: Как мне перехватить вызов метода со стандартными функциями Java (без AspectJ и т. д.)?
Это позволит вам регистрировать и перехватывать аргументы, отправляемые основному методу.