2012-04-18 2 views
1

Программы оболочки UNIX имеют удобное свойство, что первым аргументом является имя вызываемой программы. Так что я могу написать что-то вроде:Как определить имя вызываемого JAR в Scala?

#!/bin/sh 
echo "You ran $0." 

И когда я запускаю его, я получаю:

$ sh foo.sh 
You ran foo.sh. 

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

Usage: foo.sh -a [AAAAA] -b [BBBBB] -c [CCCCC] 

Как я могу сделать это для файла JAR вызывается как java -jar MyJAR.jar? Для Scala main, args(0) - это только первый аргумент, переданный пользователем, а не имя вызываемой программы. Я хочу иметь возможность распечатать:

Usage: MyJAR.jar -a [AAAAA] -b [BBBBB] -c [CCCCC] 

Любые идеи?

+0

Возможный дубликат: http://stackoverflow.com/questions/2541627/how-do-i-get-the-commandline-that-started-the-process –

+1

Это только дает мне аргументы для исполняемого файла java, а не JAR. –

ответ

2

Вы можете попробовать это:

val path = myClass.getClass.getProtectionDomain.getCodeSource.getLocation.getPath 

Это должно работать до тех пор, как myClass является экземпляром класса, определенного в файле фляги вы работаете.

+0

достаточно близко. Благодарю. –

Смежные вопросы