`

关注你工程里的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就诞生了

相关推荐

    j2ee.jar架包

    j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar...

    J2EE JAR包(J2EE1.3 J2EE1.4 J2EE5.0 )

    总的来说,J2EE JAR包见证了Java在企业级应用开发领域的不断演进,从J2EE 1.3的初步成熟到1.4的完善,再到5.0的显著简化,它们反映了软件开发趋势的变化,即从繁重的手动配置转向更简洁、更具生产力的开发方式。...

    mysql-connector-java-8.0.22.jar

    包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-...

    J2EE的公用jar包

    在Java企业版(J2EE)开发中,为了构建可扩展、健壮且跨平台的Web应用程序,开发者通常需要依赖一系列的库文件,这些文件主要包含在J2EE的公用jar包中。J2EE_5_Libraries这个压缩包正是为满足这样的需求而提供的,它...

    javacv所有jar包-java

    从javacv-platform-1.3.3-bin.zip中抽出来的:javacpp.jar、javacv.jar、javacv-platform.jar、opencv.jar、opencv-android-arm.jar、opencv-android-x86.jar、opencv-linux-armhf.jar 、opencv-linux-ppc64le.jar、...

    mysql-connector-java-8.0.30-jar包

    总结来说,MySQL Connector/J 8.0.30-jar 包是 Java 开发人员连接和操作 MySQL 数据库的关键工具,它通过 JDBC 实现了高效、安全的数据库连接,同时提供了丰富的功能和配置选项,以满足不同项目的需求。正确理解和...

    j2ee-1.4.jar

    j2ee-1.4.jar j2ee-1.4.jar j2ee-1.4.jar j2ee-1.4.jar

    mysql-connector-java-5.1.47 jar包

    MySQL Connector/J是MySQL数据库与Java应用程序之间的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够通过编写Java代码来访问和操作MySQL数据库。`mysql-connector-...

    连接池c3p0jar c3p0-0.9.5.2.jar mchange-commons-java-0.2.11.jar

    c3p0-0.9.5.2.jar mchange-commons-java-0.2.11.jar commons-logging-1.2.jar mysql-connector-java-5.1.43-bin.jar

    mysql-connector-java-5.1.40.zip和mysql-connector-java-5.1.10.jar

    本文将深入探讨这两个文件:"mysql-connector-java-5.1.40.zip" 和 "mysql-connector-java-5.1.10.jar",以及它们在Java开发中的作用。 首先,`mysql-connector-java-5.1.40.zip` 是一个压缩文件,包含了MySQL ...

    mysql-connector-java-8.0.31-jar包

    MySQL Connector/J是MySQL数据库与Java应用程序之间的桥梁,它是一个实现了JDBC(Java Database Connectivity)标准的驱动程序,允许Java开发者在Java应用中访问和操作MySQL数据库。本资源提供的"mysql-connector-...

    mysql-connector-java.jar

    官方下载的MySQL驱动jar包,本文件包含了以下版本的jar包:mysql-connector-java-2.0.jar、mysql-connector-java-3.0.jar、mysql-connector-java-3.1.jar、mysql-connector-java-5.0.jar、mysql-connector-java-5.1....

    j2EE开发jar包大全

    总的来说,j2EE开发jar包大全是一个集成了多种常见开发需求的资源集合,为开发者提供了一个方便的起步点,使得他们能够在项目中快速集成和使用各种功能。不过,需要注意的是,尽管这些jar包覆盖了许多常用场景,但...

    mysql-connector-java-8.0.11.jar包

    mysql-connector-java-8.0.11.jar连接器,用于在hive和mysql的数据库连接

    mysql连接包mysql-connector-java-5.1.27.jar

    `mysql-connector-java-5.1.27.jar`是这个驱动的一个特定版本,它允许Java开发者在他们的应用中无缝地访问和操作MySQL数据库。 MySQL连接器(JDBC驱动)是Java Database Connectivity (JDBC)的一部分,JDBC是Java ...

    mysql-connector-java-5.1.37jar包和源码

    这个jar包是Java开发者用来连接到MySQL服务器的关键组件。 首先,我们需要了解JDBC。JDBC是Java平台上的标准API,用于访问各种类型的数据库。它提供了一组接口和类,使得Java开发者可以编写数据库无关性的代码,...

    J2EE项目开发常用Jar包.zip

    J2EE项目开发常用Jar包 hessian-4.0.7.jar jackson-all-1.8.0.jar j2ee.jar jstl.jar ojdbc6.jar standard.jar commons-beanutils-1.8.0.jar commons-digester-1.8.1.jar commons-fileupload-1.2.1.jar ...

    mysql-connector-java-8.0.18.jar

    这是MySQL最新的jar,mysql-connector-java-8.0.18.jar

    J2EE项目开发常用的jar包

    J2EE项目开发中常用的jar包往往涵盖了一系列的核心技术和框架,这些库支持着应用程序的构建、部署和运行。下面我们将详细探讨一些常见的J2EE项目中使用的jar包及其作用。 1. **Servlet API**:servlet-api.jar是...

    mysql驱动包 mysql-connector-java-5.1.13-bin.jar

    mysql驱动包 mysql-connector-java-5.1.13-bin.jar 方便快捷获取。。。

Global site tag (gtag.js) - Google Analytics