java运行jar(启动jar)

说明

java开发完成后,打成jar包,并运行jar,有时还需要依赖其他jar包,那么问题来了,如何用java命令加载这些jar包,并运行指定的类呢?有下面几种方式

java启动命令

控制台程序

对于控制台程序,使用 java 启动

窗口程序

对于窗口程序,使用 javaw 启动

启动jar

方式一

1.打包jar时,指定 MANIFEST.MF 文件,并指定 Main-Class ,如下:

Manifest-Version: 1.0
Main-Class: Main

2.编写 启动.bat 文件,该 .bat 文件与jar文件同级目录
,内容如下:

start java -jar jar包名

start 解释

在命令窗口中,不显示上面的启动命令

例子

start java -jar rain.jar

方式二

1.只需要打包jar,不需要指定 Main-Class

2.编写 启动.bat 文件,该 .bat 文件与jar文件同级目录
,内容如下:

start java -classpath jar包名 类名

例子

start java -classpath rain.jar Main

加载依赖,并启动jar

复杂的项目中,依赖很多第三方jar,此时将项目导出jar后,要运行该jar时,还需要加载依赖的第三方jar

方式一(推荐)

1.创建 lib 文件夹,将所有的 jar文件放入到该 lib文件夹中

2.编写 启动.bat 文件,该 .bat 文件与 lib 文件夹同级目录,内容如下(加载当前目录下的jar,并运行指定类):

start java -classpath "lib/*" com.net.server.Main

或者

start java -cp "lib/*" com.net.server.Main

注意: "lib/*" 不能写成"lib/*.jar"

如果是当前目录:

java -classpath "./*"  top.malaoshi.Main

方式二(不推荐)

1.编写 启动.bat 文件,该 .bat 文件与jar文件同级目录
,内容如下(加载当前目录下的jar,并运行指定类):

start java -classpath "./*" com.net.server.Main

或者

java -cp "./*" com.net.server.Main

注意: "./*" 不能写成"./*.jar"

将jar放入到jre的 ext 目录

不需要指定jar、依赖等,直接执行下面命令,会自动加载:

java top.malaoshi.Main

坑(不要使用)

java -Djava.ext.dirs=".\lib" pic_get.Test

但是会有巨大bug:
参数-Djava.ext.dirs会覆盖默认的ext值,ext的默认值是JRE/LIB/EXT,
java自带的加密算法的jar包就在这个目录中,也就是说覆盖默认的ext值后,凡是用到java自带加密算法的代码都会报错

参见:http://blog.csdn.net/scugxl/article/details/43240991