Java 如何确定Scala中被调用的JAR的名称?

Java 如何确定Scala中被调用的JAR的名称?,java,scala,command-line,command-line-arguments,Java,Scala,Command Line,Command Line Arguments,unixshell程序具有方便的属性,即第一个参数是被调用程序的名称。所以我可以写一些东西,比如: #!/bin/sh echo "You ran $0." 当我运行它时,我得到: $ sh foo.sh You ran foo.sh. 当您希望捕获错误调用并给出用法字符串时,这尤其有用,如: Usage: foo.sh -a [AAAAA] -b [BBBBB] -c [CCCCC] 对于像java-JAR MyJAR.JAR这样被调用的JAR文件,我如何做到这一点?对于Scalama

unixshell程序具有方便的属性,即第一个参数是被调用程序的名称。所以我可以写一些东西,比如:

#!/bin/sh
echo "You ran $0."
当我运行它时,我得到:

$ sh foo.sh 
You ran foo.sh.
当您希望捕获错误调用并给出用法字符串时,这尤其有用,如:

Usage: foo.sh -a [AAAAA] -b [BBBBB] -c [CCCCC]
对于像
java-JAR MyJAR.JAR
这样被调用的JAR文件,我如何做到这一点?对于Scala
main
args(0)
只是用户传递的第一个参数,而不是被调用程序的名称。我希望能够打印出:

Usage: MyJAR.jar -a [AAAAA] -b [BBBBB] -c [CCCCC]
有什么想法吗?

你可以试试这个:

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

只要
myClass
是您正在运行的jar文件中定义的类的实例,这就应该可以工作。

可能重复:这只为java可执行文件提供参数,而不是jar。