如何指定系统独立的类路径

时间:2014-08-29 08:08:35

标签: java command-line classpath

我需要运行带有自定义类路径的java命令。

在Windows上我需要输入:

java -cp foo;bar

在Linux上我需要输入:

java -cp foo:bar

我们目前有一个包含第一个版本的.bat文件和一个包含第二个版本的.sh文件。这在大多数情况下都可以正常工作,但在Windows上的git-bash失败,因为它需要带有分号分隔符的shell脚本。

是否有任何系统独立的方式来编写这样的类路径?

我会想到像

这样的东西
java -cp foo -cp bar

但这不是这样的。

目前,我看到的唯一方法是让一些shell逻辑确定操作系统并从中生成正确的命令行。

java方式有没有更简单的方法呢?

2 个答案:

答案 0 :(得分:3)

  • 选项1:如果您不介意在运行之前创建jar,则可以在清单文件中指定类路径。那些路径是空间分隔的。 (见Adding Classes to the JAR File's Classpath

  • 选项2 使用例如uname添加用于检测操作系统的代码。然后执行SEP=\;SEP=:并使用path${SEP}path。 (例如参见How to check if running in Cygwin, Mac or Linux?

  • 选项3: Grep java帮助输出以查看java期望的分隔符:

    SEP=$(java -h |& grep "A [:;] separated" | grep -o "[:;]")
    
  • 选项4:如果您安装了JDK,则可以打印File.pathSeparator

    echo "interface C { static void main(String[] a) { System.out.print(java.io.File.pathSeparator); }}" > C.java
    javac C.java
    java C
    rm C.{java,class}
    

注意:只有路径分隔符,即; vs :,才是特定于平台的。正斜杠(即some/class/path)在所有系统上都可以正常分离目录。

答案 1 :(得分:2)

根本不指定它。使用' java -jar'命令,使用包含Main-Class属性的Manifest.MF命名JAR文件,并在必要时使用Class-Path属性,指定此依赖的任何其他JAR的相对位置。由于这是通过空格分隔的相对URL完成的,因此它与系统无关。