也许我只是不明白CLASSPATH
在尝试查找系统上的 .jar 文件时整个环境变量是如何工作的。我认为如果您指定它,您就可以java
像启动路径上的可执行文件一样启动 .jar 文件。
.jar
我的系统上有一个可执行 Java 档案(文件),我将其保存在 中/usr/local/bin/gatk/
。我将其添加到我的CLASSPATH
via 中:
export CLASSPATH=/usr/local/bin/gatk/GenomeAnalysisTK.jar
我认为这会使.jar
文件对我的 JVM 可见。当我尝试使用
java -jar GenomeAnalysisTK.jar
#Error: Unable to access jarfile .gatk/GenomeAnalysisTK.jar
我可以通过设置绝对路径来调用它,例如
java -jar /usr/local/bin/gatk/GenomeAnalysisTK.jar
,但是我不想每次都输入完整路径。我读过许多链接的教程,但不知何故我似乎没有做到这一点,我不明白我做错了什么。
答案1
CLASSPATH
不是用来搜索 jar 的。而是用来搜索类的。放入 jarCLASSPATH
意味着 java 将看到类里面罐子,但不是罐子本身。
您更可能想要一个启动 jar 的 shell 脚本包装器。
创建一个包含以下行的文本文件:
#!/bin/sh
java -jar /usr/local/bin/gatk/GenomeAnalysisTK.jar
使文件可执行(假设您将其命名为GenomeAnalysisTK
):
chmod +x GenomeAnalysisTK
将该文件放入/usr/local/bin
或~/bin
放入您想要的任何位置,前提是路径在您的$PATH
.
从现在起,您可以调用 shell 脚本,它将启动 jar。无需CLASSPATH
再费心了。
或者:使用类路径中的 jar,您可以像这样从 jar 内部启动主类:
java org.broadinstitute.sting.gatk.CommandLineGATK
META-INF/MANIFEST.MF
jar 的主类在jar 内的文件中指定。有关更多信息,请参阅有关 jar 文件的维基百科文章。