Java

java在解析.jar文件名時是否尊重PATH env變數?

  • January 19, 2012

這就是我所擁有的PATH

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

有一個compiler.jarin /opt/ClosureCompiler,但是當我打電話時

java -jar compiler.jar

我明白了

Unable to access jarfile compiler.jar

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

那麼,java可以遵循PATH文件名解析嗎?如果是這樣 - 我做錯了什麼?

執行檔中沒有java用於搜尋 .jar 文件的目錄列表的規定。java編寫一個使用 .jar 的完整路徑執行的包裝腳本。

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

最簡單的選擇是使用chmod +x compiler.jar. 然後你可以從你的執行它PATH如下:

compiler.jar --help

這些是使用該java命令執行文件的其他幾個選項。

Java 使用 CLASSPATH 來查找類和其他資源。類路徑可以包含 jar 和目錄。Java 將在類路徑中搜尋資源。定義包含要搜尋的路徑的環境變數。路徑分隔符是 ; 在 Windows 和 : 在大多數其他系統上。這將適用於命令行上的類,但不適用於 jar。如果你讀過你可以寫一個呼叫主類manifestcompiler.jarCompiler類。或者,只需按照清單中的指定直接呼叫主類,而不是Compiler(如下所示)。

您可能已經定義了類路徑。試試看echo $CLASSPATH是不是。嘗試

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

或關閉(其他罐子將有不同的主類)。

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

引用自:https://serverfault.com/questions/351323