当parsing.jar文件名时,java是否尊重PATH envvariables?

这是我在PATH

 PATH=/opt/ClosureCompiler:/home/vmadmin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

/opt/ClosureCompiler有一个compiler.jar ,但是当我调用

 java -jar compiler.jar 

我明白了

 Unable to access jarfile compiler.jar 

虽然java -jar /opt/ClosureCompiler/compiler.jar工作得很好。

那么,java可以遵循PATH来parsing文件名吗? 如果是这样 – 我做错了什么?

java可执行文件中没有规定用于search.jar文件的目录列表。 编写一个包装脚本,以完整path执行java .jar。

 #!/bin/bash exec java -jar /opt/ClosureCompiler/compiler.jar 

最简单的select是使用chmod +x compiler.jar来使jar可以被改变。 然后你可以从PATH运行它,如下所示:

 compiler.jar --help 

这些是使用java命令运行文件的其他选项。

Java使用CLASSPATH来查找类和其他资源。 类path可以包含jar和目录。 Java将search类path中的资源。 定义包含要search的path的环境variables。 path分隔符是; 在Windows上:在大多数其他系统上。 这将适用于命令行上的类,但不是jar子。 如果你读了compiler.jarmanifest ,你可以写一个简短的Compiler类来调用主类。 或者,直接调用主类而不是Compiler (如下所述)在清单中指定。

您可能已经定义了一个类path。 尝试echo $CLASSPATH来查看它是否是。 尝试

 export CLASSPATH=$CLASSPATH:/opt/ClosureCompiler:/opt/ClosureCompiler/compiler.jar java Compiler 

或closures(其他jar子将有不同的主类)。

 export CLASSPATH=$CLASSPATH:/opt/ClosureCompiler/compiler.jar java com.google.javascript.jscomp.CommandLineRunner 

您应该在您的path中添加/opt/ClosureCompiler来定义您的CLASSPATH 。 你不需要/opt/ClosureCompiler在你的path中。

这是一个示例Compiler.java文件。

 import com.google.javascript.jscomp.CommandLineRunner; public class Compiler { public static void main (String[] args) { CommandLineRunner.main( args ); } } 

可以使用命令javac -cp compiler.jar Compiler.java