我有一个.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
这可能会影响问题的处理方式,如下面的答案中所述。
您可以添加一个变量来保存目录:
export JARDIR=/some/path/to
java -jar $JARDIR/thearchive.jar
我不确定你是否可以隐式地从环境变量中做到这一点。
不,你不能。
运行一个罐子 -jar
从jar文件开始不涉及任何类路径机制 是 类路径。
或者使用shell别名来启动jar或小脚本文件。
根据 到太阳:
java -jar app.jar
要从其他目录中的jar文件运行应用程序,我们需要指定该目录的路径,如下所示: java -jar path/app.jar
其中path是此app.jar所在的目录路径。
因此要么在“标准”环境变量中输出路径,要么定义一个包含在PATH中的包装器
我不相信。如果您在CLASSPATH中指定了jar,则可以使用指定的主类调用java。 (即java com.test.Main)或者你可以在shell中创建一个别名来执行命令
alias execJar="java -jar /some/path/to/thearchive.jar"
或者另一种方法是创建一个包装器脚本来执行它。
Java系统本身并没有为您提供一种指定类似JAR_PATH(查找jar文件的位置列表)的方法。给出的其他答案使用MAC / Unix shell功能:
- 设置环境变量
- 设置别名
- 可能使用符号链接(到文件或目录)。
可能有用的是找出为什么指定整个路径是一个问题。这可以指导我们哪个答案最好或者可能找到一个完全不同的解决方案来解决您的问题。
要在不键入完整路径的情况下运行.jar文件,可以将其放在类路径中并通过键入以下命令运行它:
java fullclassname arg1 arg2
Mac OSX开发人员库 建议 '需要放在系统类路径上的其他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在您的类路径中,请使用类名,而不需要路径名。
由于罐子的位置没有额外的命令行选项,或者考虑了环境变量,我也不知道一个简单的解决方案,但也会对它非常感兴趣。
另一种方法可能是使用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的zsh-completion。例如bash-completion of java -jar
将文件列表限制为* .jar文件。为方便使用,有人可以通过查看当前路径而不是$ JAR_PATH来扩展它。作为起点,请参阅以下内容 unix.sx问题。
但是这个解决方案看起来也不太好。