作为一名整天与既成熟且不断发展的Java语言打交道的开发者,面对的困境之一就是在我们编写代码的时候,是使用一些人人谈论的人们新技术呢,还是坚持使用一些虽旧但成熟的类库? 由于Java应用中大部分是商业用途,因此有的时候很难轻易将实际已使用的有哪些框架分离出来统计。在一个开源Java框架的发展过程中,社区用户和贡献者是该框架能否持续成功和发展的关键因素。 我们选取了目前程序员们在使用的,世界上最大的Java项目代码库GitHub去使用基于数据的方法去进行研究。在我们之前的文章中,我们研究了GitHub中 最多人使用的100个Javascript、Ruby和Java项目。在本文中,将重点分析Java项目中其中用到了哪些受欢迎的类库。 研究方法 在本文中,我们采用如下的方法去进行研究:挑选了10000个深受社区欢迎的开源项目,它们在社区中有相对重要的地位。我们选用了GitHub中大多数项目中使用的pom.xml去进行分类研究,将其中用到的类库进行分组,其结果十分有趣味。 调查结果 下图显示的是调查结果图中,Java开源项目中用得最多的类库的部分截图,完整的调查结果请参考: 下面简单进行一个分析归纳和提出一些值得关注的要点: 日志方面的类库 使用最多的类库是slf4j,有3068个项目使用它。看上去GitHub上的Java开发者都接受了将具体的日志系统和应用解耦的方法,因为sl4j其 实上并没限制开发者在具体应用中使用什么日志引擎,提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通 过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。当然,其中具体的日志系统中使用的最多的依然是log4j――有891个项目使用它。居 亚军的是Apache的Commons-logging,有334个项目使用,数量连log4j的一半也不到,第三位的是sl4j自带的最简单实现类库, 有174个项目使用。 Spring 尽管Spring可能一直被人认为是更成熟而不是时髦的框架,但依然在前100位中占据了近15席(都是Spring相关的类库)。Spring是庞大的 框架,探究它其中有哪些类库是用得最多的是很有趣的事情。除了Spring的核心类库外,Spring-test是使用得最多的(有376个项目使用)。 之后是强大的Spring-MVC框架有277个项目使用,接下来的是Spring的SpringORM相关功能的类库,有218个项目使用。 TDD相关有 3068个项目使用JUnit。这表明测试驱动开发的方式已经占据Java项目的半壁江山。看上去如果是Java程序员,则在开发程序的时候单元测试是必 不可少的了。要值得注意的是,在测试框架中,并不是只有JUnit称霸,另外一个不错的测试框架TestNG,有331个项目在使用。 Mockito Mockito是一个很流行的mock测试框架,获得的413个项目的青睐。EasyMock紧随其后,有231个项目在使用。 Google Guava工具类库 目前,越来越多的开发者喜欢使用Google Guava类库,其中有4.8%的项目在使用。 Apache Commons工具类库 接下来我们留意到Apache旗下的开源工具类库Apache Common,它也是在Java语言中使用十分广泛的工具类库。Commons-io和Commons-langz占据了前10位,分别有519个和504的项目在使用它们,十分流行。 在Apache的Commons工具类库系列中,其中有13个在前100位中出现。Google的Guava类库,也提供类似的功能,得到了483个项目的支持。 下图为按照类型去统计的使用最多的Java类库: SQL & NoSQL. 随着NoSQL最近这几年成为最火热的话题,则必须考察既使用关系数据库也使用NoSQL的项目数。其中统计数据表明,Mysql有225个项目在使用,Hibernate ORM尽管本身不是数据库,但有181个项目用到Hibernate技术。 Hadoop 在调查数据中我们发现,其中有168个项目涉及到Hadoop,这比本身在成熟的关系数据库之一Postgre SQL的票数要多(121个项目使用Postgre SQL)。 ElasticSearch,. 另外一项大数据技术,在调查样本中发现有110个项目使用,另外很惊讶发现在Ruby中有1085个项目使用的sqlite数据库,在Java这边却不能进入前100位。 Android.在GitHub的本次调查中,发现有228个项目通过Maven在使用Android。尽管目前在GitHub上的移动应用比例不是太多,但可以显示出Java依然是服务端编程语言的老大。 原文链接:http://java.dzone.com/articles/github%e2%80%99s-10000-most-popular |