我有一个.jar文件,我希望能够在不必使用其位置的完整文件路径的情况下调用该文件。
例如,如果.jar文件位于:/some/path/to/thearchive.jar
我希望能够运行它:
java -jar thearchive.jar
而不是:
java -jar /some/path/to/thearchive.jar
当我在目录树的其他地方时。在我的具体情况下,我正在运行安装了OS X 10.5.7的Mac。 Java版“1.5.0_16”。我尝试将“/ some / path / to”添加到PATH,JAVA_HOME和CLASSPATH,但这不起作用。
那么,如何设置从命令行运行.jar而不必使用其完整路径?
更新:要处理的另一个项目是参数。例如:
java -jar /some/path/to/thearchive.jar arg1 arg2
这可能会影响问题的处理方式,如下面的答案中所述。
答案 0 :(得分:5)
不,你不能。
运行带有-jar
的jar不涉及任何类型的路径机制,因为jar文件是类路径。
或者使用shell别名来启动jar或小脚本文件。
答案 1 :(得分:3)
您可以添加一个变量来保存目录:
export JARDIR=/some/path/to
java -jar $JARDIR/thearchive.jar
我不确定你是否可以隐式地从环境变量中做到这一点。
答案 2 :(得分:3)
根据to Sun:
java -jar app.jar
要从其他目录中的jar文件运行应用程序,我们需要指定该目录的路径,如下所示:
java -jar path/app.jar
其中path是此app.jar所在的目录路径。
因此要么在“标准”环境变量中输出路径,要么定义一个包含在PATH中的包装器
答案 3 :(得分:1)
我不相信。如果您在CLASSPATH中指定了jar,则可以使用指定的主类调用java。 (即java com.test.Main)或者你可以在shell中创建一个别名来执行命令
alias execJar="java -jar /some/path/to/thearchive.jar"
或者另一种方法是创建一个包装器脚本来执行它。
答案 4 :(得分:0)
Java系统本身并没有为您提供一种指定类似JAR_PATH(查找jar文件的地方列表)的方法。给出的其他答案使用MAC / Unix shell功能:
可能有用的是找出为什么指定整个路径是一个问题。这可以指导我们哪个答案最好,或者可能找到完全不同的解决方案。
答案 5 :(得分:0)
要运行.jar文件而不键入完整路径,可以将其放入类路径并通过键入以下命令运行:
java fullclassname arg1 arg2
Mac OSX Developer Library recommends'需要放在系统类路径上的其他jar文件放在/Library/Java/Extensions
文件夹中。您也可以将它们放在自己的Library/Java/Extensions
文件夹中,但您可能需要创建Java
和Extensions
文件夹。
如果您不知道.jar文件中主类的全名,可以展开它并查看MANIFEST.MF
文件夹中的META-INF
文件。 Main-Class:
行会告诉您。
因此,举例来说,运行saxon9he.jar将其放入/Library/Java/Extensions
,您可以输入(从您想要的任何文件夹中)
java net.sf.saxon.Transform arg1 arg2...
几乎与键入java -jar jarfile.jar arg1 arg2
一样短,您无需更改任何环境变量。
简而言之,如果jar在你的类路径中,请使用classname,而不需要路径名。
答案 6 :(得分:0)
由于没有额外的命令行选项来确定罐子的位置或考虑环境变量,我也不知道一个简单的解决方案,但也会对它非常感兴趣。
另一种方法可能是使用zsh包装器脚本来获得这样的行为:
〜/ .scripts / java#.scripts在$ PATH变量中的先前位置而不是java本身
#!/usr/bin/env zsh
# get -jar option and remove from $@ (-D option)
zparseopts -D jar:=jarname
if [ -e $JAR_PATH/$jarname[2] ];
then
java -jar $JAR_PATH/$jarname[2] $@
elif [ -e $jarname[2] ];
then
java -jar $jarname[2] $@
else
java $@
fi
zparseopts
的一个优点是它可以剥离-jar选项,但所有其他选项都保留在$ @中。
进一步的改进是为java命令选项-jar扩展bash-completion或zsh-completion。例如,java -jar
的bash-completion将文件列表限制为* .jar文件。为方便使用,有人可以通过查看当前路径而不是$ JAR_PATH来扩展它。作为起点,请参阅以下unix.sx question。
但这个解决方案看起来也不太好。