java - 如何指定系统独立类路径

标签 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 方式执行此操作?

最佳答案

  • 选项 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/

相关文章:

java - web.xml - Java Servlet 过滤器 - 在处理 JSP 页面之前不运行(在 Tomcat 上)

java - java中字符串可以包含<0x00>以及指定的值吗

java - 为什么 JScrollPane 中的这个列表没有左对齐?

Ruby 从终端分配多个参数

shell - 如何将文件从一台服务器直接下载到另一台服务器?

java - 在Java小程序中加载目录中的所有文件

java - 根据 javabean 值隐藏 '<div>'

command-line - 从命令行获取HTTPS服务器的证书指纹?

java - Bash 编译 Java 类和 JAR

java - 为什么类路径默认为 WEB-INF/classes/而不是 JBoss 5.1 中的 WEB-INF/?