下面是我的Jar结构。这是独立的jar。
MyApp.jar
--> .settings
--> com
--> lib
--> META-INF
--> resources
--> .classpath
--> .project
我正在尝试从bat文件中执行这个jar文件。
我在MyApp.jar的META-INF文件夹下的MANIFEST.MF文件中提到过classpath和main class
Manifest-Version: 1.0
Class-Path: ./lib/jar1.jar ./lib/jar2.jar ./lib/jar3.jar
Main-Class: com.bank.Main
在我的bat文件中: java -jar D:\ app \ MyApp.jar
在jar中的lib文件夹是否正确?
但我仍然面临ClassNotFoundException。
线程“main”中的异常java.lang.NoClassDefFoundError:javax / jms / JMSException
我错过的任何事情请告诉我。
答案 0 :(得分:2)
将lib文件夹放在当前主jar [MyApp.jar]目录之外并执行它。
您已在主jar中打包了jar依赖项。 Class-Path的目的是在类路径中添加一个外部jar,其路径相对于主jar的位置。
标准Java类加载器不支持在jar中打包jar。如果你愿意,你可以将内罐爆炸到主罐中。 Maven可以为你做这件事。
答案 1 :(得分:1)
默认情况下,Java不支持Fat jar。有两种选择。
您可以定义一个自定义类加载器,它必须以编程方式在lib目录中加载jar。
您可以手动合并lib目录中的所有jar包来制作一个jar并运行它。请参阅[https://dzone.com/articles/java-8-how-to-create-executable-fatjar-without-ide]