解析.jar 文件名时,java 是否尊重 PATH 环境变量?

解析.jar 文件名时,java 是否尊重 PATH 环境变量?

这是我所拥有的PATH

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

有一个compiler.jar/opt/ClosureCompiler但是当我打电话时

java -jar compiler.jar

我明白了

Unable to access jarfile compiler.jar

尽管java -jar /opt/ClosureCompiler/compiler.jar工作得很好。

那么,java 可以遵循PATH文件名解析吗?如果可以 - 我做错了什么?

答案1

可执行文件中没有java提供搜索 .jar 文件的目录列表的功能。编写一个使用java.jar 完整路径执行的包装器脚本。

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

答案2

最简单的选择是使用 使 jar 可执行chmod +x compiler.jar。然后你可以PATH按如下方式从你的 jar 中运行它:

compiler.jar --help

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

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

你可能已经定义了类路径。尝试echo $CLASSPATH看看是否已定义。尝试

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

或用于关闭(其他 jar 会有不同的主类)。

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

您应该定义CLASSPATH添加/opt/ClosureCompiler到路径的位置。您不需要它/opt/ClosureCompiler在您的路径中。

这是一个示例 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

相关内容