为什么在 linux 命令行上的 java 找不到特定的 Java 库

问题描述

这应该是直截了当的,但我不明白为什么在显然成功编译后没有找到 commons-logging-1.2.jar。但是我不知道为什么在以这种方式运行时java找不到commons-logging-1.2.jar库。

$ javac -classpath commons-logging-1.2:pdfBox-2.0.24.jar:xmpBox-2.0.24.jar org/example/app/App.java
$ jar cfm app.jar MANIFEST.MF ./org/example/app/App.class
$ java -cp ./* -jar app.jar
Error: Could not find or load main class ..commons-logging-1.2.jar
Caused by: java.lang.classNotFoundException: //commons-logging-1/2/jar

我也试过运行:

$ java -cp ./* org.example.app.App
Error: Could not find or load main class ..commons-logging-1.2.jar
Caused by: java.lang.classNotFoundException: //commons-logging-1/2/jar

我打算最终使用 Maven,但现在我只想能够手动理解这个过程。我能够使用相同的设置(文件夹/工具/等)在 Windows 上编译和运行它。不确定我在这里缺少什么。

所有 java 命令都从 org/example/app 所在的目录运行。并且 jar 文件位于同一目录中。所以我在目录 A 中拥有所有 jar(包括创建时的 app.jar),在目录 A 下是创建 org/example/app/App.class 的位置。

我特意做了一个增量构建,首先,只包含 pdfBox 并收到相应的错误,即 xmpBox 类丢失。然后我添加了xmpBox。但是当我没有在类路径中添加commons-logging-1.2.jar时,没有报错。

非常感谢任何帮助。谢谢!

解决方法

用户chrylis评论的以下内容 -cautiouslyoptimistic 解决了问题。

"尝试在该命令前面放置一个 echo 并查看它展开的内容 到。”

在尝试该建议后,它表明扩展导致了问题。在 Windows 下,我没有使用扩展,但在 linux 下,在查看扩展时,它显示文件名之间有空格,而不是 -cp 语法所要求的“:”。