批处理文件中的独立Jar执行

时间:2017-01-19 09:33:31

标签: java batch-file jar

下面是我的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

我错过的任何事情请告诉我。

2 个答案:

答案 0 :(得分:2)

将lib文件夹放在当前主jar [MyApp.jar]目录之外并执行它。

您已在主jar中打包了jar依赖项。 Class-Path的目的是在类路径中添加一个外部jar,其路径相对于主jar的位置。

标准Java类加载器不支持在jar中打包jar。如果你愿意,你可以将内罐爆炸到主罐中。 Maven可以为你做这件事。

答案 1 :(得分:1)

默认情况下,Java不支持Fat jar。有两种选择。

  1. 您可以定义一个自定义类加载器,它必须以编程方式在lib目录中加载jar。

  2. 您可以手动合并lib目录中的所有jar包来制作一个jar并运行它。请参阅[https://dzone.com/articles/java-8-how-to-create-executable-fatjar-without-ide]