`

关注你工程里的JAR包--Java和J2EE开发的另一种JAR地狱

阅读更多

 

   
    这里说的JAR地狱,指类路径里JAR包太多这个问题。另外一个“JAR地狱”的解释是“反模式”中的一个概念,请见http://windshome.iteye.com/blog/1840651
 
    我记得打开一个网上找来的工程,里边都会有一堆JAR包,尤其是web工程,里边看吧,光Apache Common的JAR包就很多,再有log4j的、日志的好多,slf4j、log4j等等,这还都是我自己能认识分辨的,很多看了名字,不知道是干啥用的,一大堆,呵呵!
 
    这个时候真想问一问这些工程的创建者,这些JAR包都是你要用的吗?能给个介绍,这些JAR包都是干啥的?哪里来的?你都引用了这些JAR的哪些功能?
 
   JAR包多了,很容易引发各种兼容性问题。如果是独立的(自己一个进程运行)产品还好,部署在共用的web服务器上就难说得很了,如果是API类的,提供接口给别人再用,带着一堆JAR,真的就是一种很糟糕的方式。
 
    也许很多人都习惯了,但是我有几次遇到客户要求我们提供我们产品的每一个JAR包的说明,里边每一个package的说明。因为是API类产品,客户担心,引用了我们API,会和他们自己业务的JAR包和命名空间冲突(我们的产品在使用第三方组件时非常保守和持重,还被challenge,那现在大量使用第三方包的会怎样呢?)。
 
    我觉得作为一个认真的设计师或开发人员,在产品设计开发过程中,应当关注一下你的类路径和你类库目录,看看都有些啥,需要的留下,不需要的剔出去。这个不算苛刻的要求。至少你要清楚你JAR包目录下的每一个文件,里边都有哪些package,这些jar会被谁用到。也许,这对现在的设计师和程序员,会非常不容易。
 
    我的观念,稀里糊涂的设计师和程序员,一定不会设计出好的系统。

 

 

1
2
分享到:
评论
13 楼 windshome 2013-06-17  
受教了!有了很好的工具,自己应该能更清楚的控制自己的工程和项目了!
12 楼 techno_it 2013-06-17  
Maven就是做这事的。就如1楼所言
11 楼 windshome 2013-06-08  
这是比较极端的情况。典型粗枝大叶的开发者。
10 楼 houxinyou 2013-06-08  
以前看过别人写程序,会把自己积累的所有的jar包都引入的到项目中,其中可能包括:struts等web前台框架,spring,Hibernate,所有可能的数据库连接工具-oracle,mysql,sqlite,sqlserver等,还有各种图表及EXCEL操作的包.写程序的时候不管有没有用,哪怕是只写一个类打印一句hello world,也要把所有的包全部引入. 楼主说的可能是这种吧!
9 楼 windshome 2013-06-06  
解决这个问题,需要开发人员付出非常大的努力啊!最重要的是,有一种精心打造产品的意识和精神。
8 楼 jinnianshilongnian 2013-06-06  
其实有时候确实挺混乱的,记得有一个版本strust2把它依赖的包 全部装配到自己的jar包里,造成有的人遇到问题找不到问题。
7 楼 windshome 2013-06-06  
嗯,客观上工具帮我们改善状况和避免JAR泛滥,也要主观上进行控制,做出努力才行。我感觉,在这个上边付出一点代价是值得的。考虑产品的可掌控、可维护、可持续这些特性要求的话。
6 楼 freezingsky 2013-06-06  
jar 的泛滥是不可避免的,这在目前来说,也是一种现象。后来maven出现了,只是一种缓和吧。
5 楼 windshome 2013-06-06  
回应几位:我想表达的意思,也是说开发人员应该关注JAR包,尽量去弄清楚自己类路径里的JAR包的情况。这是一种工作习惯和工作方式。但是未必能如愿的全都弄清楚。
4 楼 rensanning 2013-06-06  
houxinyou 写道
也许你只引用了一个包,但那个包里要用到一大堆的包,怎么办?删掉程序运行不了,不删的话,你也不知道引他做什么,因为不是你引的,是你引的包里必须的,人家也不一定提供给你为什么要引

+1

一个好的Lib应该提供dependence一览。

第三方包提供了相应的功能的同时也为项目增加了很多限制,有人统计过为什么不为现有系统升级JDK版本,其中一条就是“我所使用的第三方库还不支持新的版本”。
3 楼 houxinyou 2013-06-06  
也许你只引用了一个包,但那个包里要用到一大堆的包,怎么办?删掉程序运行不了,不删的话,你也不知道引他做什么,因为不是你引的,是你引的包里必须的,人家也不一定提供给你为什么要引
2 楼 windshome 2013-06-05  
希望这些工具一是帮上程序员的忙,再有就是帮助培养程序员谨慎清醒的工作方式。
1 楼 jingyemingyue 2013-06-05  
所以maven就诞生了

相关推荐

Global site tag (gtag.js) - Google Analytics