从命令提示符处执行具有多个类路径库的 jar 文件

2022-08-31 15:59:45

我有一个Maven项目,它生成一个jar文件并将所有依赖项复制到文件夹。我想在客户端计算机(窗口)上执行此项目。因此,我复制到文件夹并将所有依赖项复制到文件夹。如何从客户端的命令提示符执行此项目?我试图从文件夹中使用,但它抛出以下错误。target/libmyproject.jarC:\xyzC:\xyz\libjava -cp lib\*.jar -jar myproject.jarC:\xyz

Exception in thread "main" java.lang.NoClassDefFoundError: lib\commons-codec-1/3/jar
Caused by: java.lang.ClassNotFoundException: lib\commons-codec-1.3.jar
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: lib\commons-codec-1.3.jar.  Program will exit.

我认为如果我在classpath中指定所有依赖项(如),它将摆脱这个问题,但我不想这样做,因为我已经有40个库,它可能会在未来的版本中增长。有没有更好的方法来做到这一点?java -cp lib\dep1.jar;dep2.jar


答案 1

您不能在命令行上同时使用和 - 请参阅java文档,该文档指出,如果您使用:-jar-cp-jar

JAR 文件是所有用户类的源,其他用户类路径设置将被忽略。

你可以做这样的事情:

java -cp lib\*.jar;. myproject.MainClass

请注意参数中的 ,以解决 Java 命令行错误。另外,请注意,这是该命令的 Windows 版本。Unix 上的路径分隔符是 。;.-cp:


答案 2

在 UNIX 上使用 java 1.7 -

java -cp myjar.jar:lib/*:. mypackage.MyClass

在 Windows 上,您需要使用 “;” 而不是 “:” -

java -cp myjar.jar;lib/*;. mypackage.MyClass

推荐