【发布时间】:2011-10-19 05:45:59
【问题描述】:
我将所有依赖项 jar 打包到我最终 jar 的 lib 文件夹中。但是当我像java -cp my.jar MyMainClass这样使用命令执行时,却说无法加载lib文件夹中的类,这是怎么回事?
谢谢
【问题讨论】:
-
为什么它被标记为 Maven 问题?确切的堆栈跟踪是什么?
我将所有依赖项 jar 打包到我最终 jar 的 lib 文件夹中。但是当我像java -cp my.jar MyMainClass这样使用命令执行时,却说无法加载lib文件夹中的类,这是怎么回事?
谢谢
【问题讨论】:
如果您的程序被打包为可执行 jar,您应该有一个单独的文件夹来放置其他 jar 依赖项,然后在运行程序时将该文件夹指定为在类路径中:
java -classpath c:\path\to\dir_with_jars -jar myExecutableJar.jar p1.MainClass
另外:如果您想使用非正统的方法将 jar 依赖项打包到 jar 文件中,您应该将这些依赖项放在可执行 jar 的根目录中,而不是任何文件夹(lib 或其他文件夹)中。这样,它们将有效地位于类路径的根目录中,因此如果您将 jar 运行为:
java -cp:. -jar myJar.jar
它应该可以工作
注意:此答案包含错误,请参阅下面附加的 cmets。这个想法实际上是有一些工具可以让您将 jar 依赖项打包到 jar 中(作为内部 jar),但这将不再作为可以使用默认 JDK 类加载器运行的常规可执行 jar。相反,您需要一个特殊的类加载,它将考虑到内部 jar。提供此功能的工具通常会自动添加必要的特殊类加载并更新 jar 清单以使用它。抱歉弄错了。
【讨论】:
您还可以使用 zip 解压缩存档并查看 my.jar 以查看其中的内容以及您的 MyMain.class 是否存在。
【讨论】: