Есть ли в Java эквивалент C # Environment.GetCommandLineArgs ()? - PullRequest
8 голосов
/ 22 января 2011

Я знаю, что могу получить аргументы командной строки в методе "main", но мне нужно иметь возможность получить их косвенно .

Спасибо за вашу помощь.

Ответы [ 3 ]

8 голосов
/ 23 марта 2012

Следующее выражение - именно то, что вы хотите:

System.getProperty ( "sun.java.command")

2 голосов
/ 22 января 2011

Вы можете перечислить потоки, найти основной поток и ползти вниз по трассировке стека, пока не найдете вызов main и вытащить аргументы.

update a указывает точкичто это не сработает само по себе, и я думаю, что комментарий правильный.Я неправильно запомнил возможности интроспекции стека или мысленно перепутал в JVMTI.

Итак, вот план Б. Подключитесь к себе с JMX.Сводка виртуальной машины MBean имеет аргументы.

Connection name: 
pid: 77090 com.basistech.jdd.JDDLauncher -config src/main/config/benson-laptop-config.xml

Все это уже было сказано, что должен сделать, это вызвать System.getProperty и жить с необходимостью использовать -D для передачи параметровиз внешнего мира в вашу пещеру.

0 голосов
/ 22 января 2011

Вы можете написать оболочку, чтобы взять cli и переформатировать ее для использования -DPROP = VAL

int main(int argc, char*argv[])
{
std::vector<std::string> in (argv+1,argv+argc), out();

out.push_back("java.exe");
out.push_back("-cp");
out.push_back("my-jar.jar");
out.push_back("main.class")

for( auto it = in.begin(); it!=in.end(); ++in)
{
//process CLI args. turn "-abc","BLAH" into "-Darg.a=true","-Darg.b=true","-Darg.c=BLAH" and push to out
//Do additional processing. Maybe evn use get_opt() or Boost.ProgramOptions
}
//use exec or CreateProcess to launch java with the proper args
//or even use something like WinRun4J's methods to load the jvm.dll
//Then your program shows up as "MyExe.exe" instead of "java.exe"

//Use System.getProperty("arg.a","false") to get the value of a
}

Конечно, вы всегда можете просто сказать пользователям, чтобы они вызывали bash / batch-скрипт справильные аргументы -DA = true

...