我需要使用自定义类路径运行 java 命令。
在 Windows 上我需要输入:
java -cp foo;bar
在 Linux 上我需要输入:
java -cp foo:bar
我们目前有一个包含第一个版本的 .bat 文件和一个包含第二个版本的 .sh 文件。这在大多数情况下都可以正常工作,但对于 Windows 上的 git-bash 会失败,它需要一个带有分号分隔符的 shell 脚本。
是否有任何系统独立的方法来编写这样的类路径?
我会想到类似的东西
java -cp foo -cp bar
但事实并非如此。
目前我看到的唯一方法是让一些 shell 逻辑确定操作系统并从中生成正确的命令行。
是否有更简单的方法以 java 方式执行此操作?
最佳答案
选项 1:如果您不介意在运行前创建 jar,您可以在 list 文件中指定类路径。这些路径是空格分隔的。 (参见 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
)在所有用于分隔目录的系统上都能正常工作。
关于java - 如何指定系统独立类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25564149/