jar调用另一个jar的处理方法

2014年8月31日

在Windows环境里,一个exe可以依赖多个dll,一个dll可以被多个exe依赖。编写Java程序时,怎么把开发阶段的依赖项保持在部署阶段呢?

在开发阶段添加jar依赖性很简单,不在本文的讨论范围。简单来说就说右击项目->属性->java构建位置->库->添加外部jar。

Windows程序有一个好,就是它扩展名是exe,可以双击运行。类似的,jar也可以双击运行。那么就把项目导出为jar吧。

Eclipse默认有两种导出方式,一个是jar文件,一个是可运行的jar文件。(图1)

1

图1

如果选导出为可运行jar,则有两种方式处理依赖包,一个是所有依赖包包含在可运行jar之内,一个是所有依赖包放在项目名_lib文件夹里面。

在我的实际开发中,我有好几个java程序都依赖mysql-connector-java-5.0.8-bin.jar,把它打包进可运行jar里造成了空间浪费;放到项目名_lib文件夹也不能实现类库共用。

今天我研究了一下,发现使用“导出为Jar文件”才是正解。

2

图2:将清单保存在工作空间中

执行导出后,导出的jar实际上是不能用的,因为所有依赖项都没有导出(jvm找不到依赖项)。你要编辑清单文件添加依赖项位置。据说清单文件的最后要有两个空行 ((朴人博客:《多项目相互依赖的Java程序打包并引入外部Jar包方式》)),我发现似乎没有也行。

Manifest-Version: 1.0
Main-Class: Program
Class-Path: mysql-connector-java-5.0.8-bin.jar

然后重新执行一次导出jar,这时从工作空间中使用现有清单。最后,你把mysql-connector-java-5.0.8-bin.jar放在和导出的jar的同级目录里,你的jar就可以用了,实现了exe调用本目录dll的效果。

参考资料