ChatGPT解决这个技术问题 Extra ChatGPT

Java:如何从命令行导入 jar 文件

我正在尝试使用 Java 从命令行(Windows)调用一个类(主要方法)。该类导入其他类(其他罐子)。

我总是从我的主程序导入的类中得到“类未找到异常”。

这是我尝试过的:

添加一个 CLASSPATH 环境。 var 与引用的库所在的路径(不起作用)

从命令行调用“java -jar myjar.jar”时,我尝试了所有这些不同的参数:“-classpath lib/”、“-classpath ./lib/”、“-classpath lib”、“-cp lib/*” , "-cp lib/\*", "-classpath lib/referenced-class.jar", "-classpath ./lib/referenced-class.jar" (lib 是引用的 jar 所在的位置)

我尝试将所有引用的 jar 打包到我的主类所在的 jar 中......

尽管如此,我还尝试使用以下命令指定清单文件中的类:Class-path referenced-jar.jar,我还尝试了 Class-path lib/referenced-jar.jar


d
drevicko

如果您碰巧知道要运行的主类的名称,则可以在不使用 -jar 命令行参数的情况下运行它:

java -classpath .;myjar.jar;lib/referenced-class.jar my.package.MainClass

如果你使用的是 linux,你应该使用 ":" 而不是 ";"在类路径中。


我一直在寻找解决这个问题!
为了清楚起见,jar 必须明确地在类路径中。指定 /lib 目录效率低下。
非常感谢,我的第一个 Scala "hello world" jar 还活着 ;-) 作为记录——在 Unix 中你使用 ":" 而不是 ";",如果有更多的 lib jar,你只需添加更多分隔的 jar 文件名和 ”;”/”:”
“如果您碰巧知道主要课程的名称”。您可以通过 unzip -p the_jar.jar META-INF/MANIFEST.MF | grep Main-Class 轻松找到
您可以像这样指定目录。 java -classpath .:myjar.jar:lib/* my.package.MainClass
M
Michael Myers

如果您使用 java -jar 运行 jar 文件,则 -classpath 参数 is ignored。您需要在 jar 的清单文件中设置类路径,如下所示:

类路径:jar1-name jar2-name directory-name/jar3-name

请参阅 Java 教程:Adding Classes to the JAR File's Classpath

编辑:我看到你已经尝试在清单中设置类路径,但你确定你使用了正确的语法吗?如果您像显示的那样在“Class-Path”之后跳过“:”,它将不起作用。


是的,我也尝试使用“:”...我不知道为什么使用清单来指定那些根本不起作用。我问了同事,并与他们重新检查了所有内容。
最好奇。我多年来一直这样做,从来没有遇到过问题。您是否正确大写了 Class-Path?不知道会不会有影响...
我觉得这是最好的答案。手动制作恰到好处的清单文件通常是一项艰巨的任务。我通常将 jar 解包并让 Ant 制作另一个。他的路径和资源名称可能超过 72 个字符,如果没有正确包装会导致问题。
如果您正在处理要运行的第三方 jar,我不会走这条线。改为寻求亚当的答案
这应该是公认的答案。我想知道是否可以从目录中添加所有 jar。使用 dir/*dir/*.jar 不起作用。
P
Premraj

尝试

java -cp "your_jar.jar:lib/referenced_jar.jar" com.your.main.Main

如果您在 Windows 上,则应使用 ; 而不是 :


c
cupakob

您可以尝试在 Eclipse 中导出为“Runnable jar”。我也有问题,当我导出为“jar”时,但当我导出为“Runnable jar”时我从来没有问题。


我在导出窗口中没有看到“可运行的 jar”选项,只是一个 JAR 文件:(
你用的是哪个版本的eclipse?我在 Ganymede 中有它....这里的屏幕截图:bufka.ath.cx/dslr/Eclipse-Export.png 但我不知道这是否是默认设置。