读书人

JAR封装的误区:第三方包的嵌套打包

发布时间: 2013-08-04 18:26:16 作者: rapoo

JAR打包的误区:第三方包的嵌套打包

但是,事实是,别人导入了你的JAR包后,运行程序时仍然会报NoClassFound: xxxx的错误,也就是说你引用的其他第三方包仍然没有成功导入。

我曾经还傻乎乎地以为只要我修改JAR包里Manifest文件中的"Class-Path: lib/ *.jar"就可以了,其实我错了,一旦我导入这个包之后,ClassPath的路径实际应该是相对于我这个项目而言,而不是对该JAR包有效。

?

现在我给大家分析一下:

JAR包分为两种:

1. 第三方功能包,供其他开发人员使用其中的功能;

2. 项目型,类似于文件系统的一种JAVA项目打包形式,它应该是随便放到哪里都可以立即部署或者执行。

?

第一种类型的JAR包,我们见到很多,我上面所讲的一个例子也属于这个类型。通过观察总结发现,这种类型的包内部结构特征是纯代码,不会有类似项目的复杂文件结构,因此不适于在内部加上一个lib的folder来装你引用的第三方包,它更规范的solution应该是向需要引用它的开发人员申明“使用它需要引用哪些第三方包”。然后让开发人员将这些包引入到自己项目下。(你应该也没有看见过有哪个公用的第三方开源包内部还包含着其他的开源包的吧)

?

第二种类型的JAR包,是为应用程序部署使用的,比如,直接可以用"java -jar xx.jar"命令执行的可执行JAR包。针对这种情况,我们是可以将所有引用的第三方包封装在一个指定目录中,这样就可以拿着这个JAR包到处去执行而不用担心还有哪些第三方包没有引用。

?

分析到此,我觉得关于JAVA项目打成JAR包应该是有一个笼统的规则:

凡是你需要在自己的项目中引用的JAR,应该内部不再含有第三方Jar包,需要引用的第三方Jar包自己手动引入到自己项目中去。

凡是独立于其他项目,可以直接运行或者部署的,可以包含第三方JAR包一起打包。

?

?

?

?

?

?

?

?

?

读书人网 >开源软件

热点推荐