我需要运行带有自定义类路径的java命令。
在Windows上我需要输入:
java -cp foo;bar
在Linux上我需要输入:
java -cp foo:bar
我们目前有一个包含第一个版本的.bat文件和一个包含第二个版本的.sh文件。这在大多数情况下都可以正常工作,但在Windows上的git-bash失败,因为它需要带有分号分隔符的shell脚本。
是否有任何系统独立的方式来编写这样的类路径?
我会想到像
这样的东西java -cp foo -cp bar
但这不是这样的。
目前,我看到的唯一方法是让一些shell逻辑确定操作系统并从中生成正确的命令行。
java方式有没有更简单的方法呢?
答案 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完成的,因此它与系统无关。