【问题标题】:Calling Java from command line - Linux vs Windows从命令行调用 Java - Linux 与 Windows
【发布时间】:2018-11-24 11:54:58
【问题描述】:

在 Windows 上,我运行以下命令并且它可以工作;

java -cp "./libs/*;" SampleJavaApp

当我尝试在 Linux (CentOS 6) 上运行相同的命令时,我得到了

Error: Could not find or load main class SampleJavaApp

SampleJavaApp 没有包

任何关于为什么的见解都会受到赞赏。

谢谢

更新

Java 版本是问题所在,还有:

【问题讨论】:

  • 是否有 CLASSPATH 环境变量? (echo $CLASSPATH)
  • 您确定该类已编译并且您是从正确的导向器运行的吗?
  • @Skemelio echo $CLASSPATH 什么都不返回,我应该设置什么吗?那里
  • 我会告诉你我做了什么。我已经设置了 CLASSPATH 并使用 javac -d $CLASSPATH /path/to/your/java_file/file.java 编译了 .java 文件。这样,所有编译的类都存储在 CLASSPATH 指向的目录中。

标签: java linux shell command-line-interface classpath


【解决方案1】:

类路径的格式(-cp 参数)使用操作系统路径分隔符来匹配PATH 的行为。所以你想要: 而不是; 来分隔路径。

另外,当我认为您想显式引用当前目录. 时,您似乎使用了一个空路径元素。

另外,我认为 * 通配符的处理因 Java 实现而异,因此您需要确保版本匹配。

【讨论】:

  • Java 版本不匹配我正在更新,不明白你的意思“另外,当我认为你想显式引用当前目录时,你似乎使用了一个空路径元素..”
  • 如果您希望当前目录位于类路径上,请确保在 -cp 参数中引用 .。也就是说,一个可能好多更好的解决方案是只编译所有带有实际包声明的类以匹配你的目录结构。
  • “……* 通配符的处理因 Java 实现而异……”事实并非如此。见docs.oracle.com/en/java/javase/11/tools/…
  • @VGR:对于较新版本的 Java(版本 9 和更新版本,IIRC?)确实如此,但较旧的 JVM 肯定不支持这样的通配符。我记得需要单独列出类路径中的每个 JAR,这可能会导致一些 非常 长的类路径。
  • 是的,但类路径中有通配符has been supported since Java 6
猜你喜欢
  • 2020-07-06
  • 2010-11-27
  • 2011-05-24
  • 2012-08-27
  • 2012-07-20
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多