Eclipse jar打包和命令行运行

?Eclipse jar打包和命令行运行

第1步:首先准备好manifest.mf,将该文件放在你的项目根目录下,方便维护。

 

manifest.mf文件定义如下所示:

Manifest-Version: 1.0
Main-Class: com.stephen.redis.RedisUtil
Class-Path: lib/commons-pool2-2.2.jar lib/jedis-2.5.2.jar

 注意:

<1> manifest.mf文件最后一行必须是一个空行。

<2> lib/commons-pool2-2.2.jar和lib/jedis-2.5.2.jar之间用一个空格隔开。

<3>每个冒号后有一个空格。

<4>Main-Class 后面配置的是jar运行的入口class类。

<5>Class-Path 配置的是第三方jar包,相对目录位置,比如上面配置的lib/commons-pool2-2.2.jar lib/jedis-2.5.2.jar,表示这2个jar文件在lib目录下,并且这个lib目录和你生成的jar文件处于同一个目录下。

第二步:用eclipse导出生成jar文件

选中你的项目,鼠标右键选择Export菜单。如下图:



 

 点击Export后看到如下界面:



 选中JAR file,然后点按钮Next,显示如下图界面:



选中上图红框,黄框内的不要选

其中红框JAR file是配置导出的JAR的文件名和存放目录

在项目中只需要选择项目的java文件目录就可以,其他的比如项目用到的第三方jar一律不选。

然后点按钮next,出现如下图界面:

 选择红框选项,继续点Next,出现如下图界面:

 如图红框,选择事先准备好的MANIFEST.MF,然后点Finish按钮,这样就生成了我们需要的JAR文件。

切换到JAR文件所在的目录,把要用到的第三方JAR文件按照MANIFEST.MF中的配置,复制到JAR文件所在目录,这里按照上面的MANIFEST.MF配置,则在JAR文件所在位置新建一个lib目录,然后将用到的commons-pool2-2.2.jar和jedis-2.5.2.jar复制到lib目录内。

然后,开始在命令行开始运行这个JAR,确保JAVA环境是正常的,可以用命令测试java环境是否正常。

java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

看到类似提示,表示java环境正常。

运行JAR文件

java -jar test.jar
2016-04-08 10:55:57 初始化redis链接池:开始
2016-04-08 10:55:57 初始化redis链接池:成功
[001, 002, 003]

test.jar就是刚才用eclipse导出生成的JAR,可以看到命令执行后,输出正常。

by the way

如果把test.jar改为test.zip,然后解压这个test.zip,我们可以看到内部文件列表,如下图:

 

OK,全文结束!

 补充:

1. 如果用到了配置文件怎么办?在实际项目中,配置文件是必然会遇到的,比如有数据库操作的话,就需要一个数据库配置文件(内容一般是数据库的地址、用户名、密码等参数)。

遇到这种情况,需要首先修改MANIFEST.MF文件,在Class-Path后面加上点(.)表示当前目录,这样运行时JVM会在当前目录中查找配置文件。

Manifest-Version: 1.0
Main-Class: MainUtil
Class-Path: .
 lib/commons-pool2-2.2.jar
 lib/jedis-2.5.2.jar
 lib/mysql-connector-java-5.1.35-bin.jar

配置文件的格式一定要注意,稍微不对,运行就会出问题,格式如下图

红框表示1个半角空格,蓝框表示一个空行。

 

然后在打JAR包的时候,不要选配置文件,如下图:

 黄框里面有3个配置文件,在生成JAR包时不要选!

等JAR生成完毕后,将配置文件拷贝到和JAR文件同一目录中,如:

 

这样,JAR文件就可以正常访问配置文件了。

2. 如果使用的第三方JAR文件特别多,怎么办?

这个情况可以在MANIFEST.MF作修改,如下图格式:

将每个第三方jar文件分行写,注意前后的半角空格不要忘记。


 

 

猜你喜欢

转载自stephen830.iteye.com/blog/2289452