作为一名整天与既成熟且不断发展的Java语言打交道的开发者,面对的困境之一就是在我们编写代码的时候,是使用一些人人谈论的人们新技术呢,还是坚持使用一些虽旧但成熟的类库?

由于Java应用中大部分是商业用途,因此有的时候很难轻易将实际已使用的有哪些框架分离出来统计。在一个开源Java框架的发展过程中,社区用户和贡献者是该框架能否持续成功和发展的关键因素。

我们选取了目前程序员们在使用的,世界上最大的Java项目代码库GitHub去使用基于数据的方法去进行研究。在我们之前的文章中,我们研究了GitHub中

最多人使用的100个Javascript、Ruby和Java项目。在本文中,将重点分析Java项目中其中用到了哪些受欢迎的类库。

研究方法

在本文中,我们采用如下的方法去进行研究:挑选了10000个深受社区欢迎的开源项目,它们在社区中有相对重要的地位。我们选用了GitHub中大多数项目中使用的pom.xml去进行分类研究,将其中用到的类库进行分组,其结果十分有趣味。

调查结果

下图显示的是调查结果图中,Java开源项目中用得最多的类库的部分截图,完整的调查结果请参考:

https://docs.google.com/spreadsheet/ccc?key=0Alceaf46X4GPdHhKV0FFSnVpTlA2SkpiaVU0M3BDYXc&usp=sharing#gid=0

下面简单进行一个分析归纳和提出一些值得关注的要点:

日志方面的类库    使用最多的类库是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依然是服务端编程语言的老大。

GitHub 上100个最受欢迎的Java基础类库的更多相关文章

  1. GitHub 上一份很受欢迎的前端代码优化指南

    http://segmentfault.com/a/1190000002587334?utm_source=weekly&utm_medium=email&utm_campaign=e ...

  2. 这份github上被14万人点赞的Java教程太强了

    前几天有个小伙伴加我之后问了下面的这个问题.我看到后是一脸懵逼的状态,jcombobox?实话说,我已经完全忘了在Java中还有这么个东西. 在网上一番搜索后,才发现原来它是 swing 中的下拉列表 ...

  3. GitHub 上一份很受欢迎的前端代码优化指南-强烈推荐收藏

    看到一份很受欢迎的前端代码指南,根据自己的理解进行了翻译,但能力有限,对一些JS代码理解不了,如有错误,望斧正. HTML 语义化标签 HTML5 提供了很多语义化元素,更好地帮助描述内容.希望你能从 ...

  4. github上所有项目的受欢迎程度排名,包括超大型项目

    直接打开如下网址: https://github.com/search?l=Java&q=+stars%3A%3E0&ref=searchresults&type=Reposi ...

  5. 9 月份 GitHub 上最火的 JavaScript 开源项目!

    推荐 GitHub 上9 月份最受欢迎的 10 个 JavaScript 开源项目,在这些项目中,你有在用或用过哪些呢? 1.基于 Promise 的 HTTP 客户端 Axios https://g ...

  6. 在github上最热门好评高的ROS相关功能包

    在github上最热门最受欢迎的ROS相关功能包 下面依次列出,排名不分先后: 1  Simulation Tools In ROS https://github.com/ros-simulation ...

  7. 把本地仓库工程上传到github上和从gitbu同步工程到本地

    1.在本地产生秘钥和公钥 [root@jacky git_project]# ssh-keygen -t rsa -C "jacky-lulu@1073740572@qq.com" ...

  8. OData.NET已在 GitHub上开源

    OData.NET已在 GitHub上开源 微软最近已将OData .NET所有类库的源代码全部发布在GitHub上. 以下与OData相关的项目目前都已迁移到GitHub上: ODataLib Ed ...

  9. GitHub 上的大佬们打完招呼,会聊些什么?

    你好 GitHub!每一位开源爱好者的好朋友「HelloGitHub」 大家好,今儿 HG 有幸邀请到:Lanking 一位亚马逊 AI 软件工程师.开源爱好者和贡献者.他是亚马逊开源的 Java 深 ...

随机推荐

  1. FineReport——JS二次开发(自定义翻页按钮)

    FR允许自定义工具栏上面的按钮,并提交JS方法: 对于翻页功能,大概有首页,下一页,上一页,最后一页,以及跳转页等功能. 不得不说的是,在HTML页面自定义的按钮如何获取到报表模板,通过FR提供的JS ...

  2. 我的新博客地址http://xxxbw.github.io/

    最近在学github,在github搭了个博客,以后也会使用另外一个博客.有兴趣的小伙伴可以看看~ 地址:http://xxxbw.github.io/

  3. LinkedList 源码分析

    LinkedList :双向链表结构, 内部存在frist节点 和 last节点.通过改变 首节点和 尾节点的引用来实现新增和修改 有一个内部类: //节点类,内部包括前节点和后节点,和数据项 // ...

  4. django中使用第三方包实现定时任务

    # 转载请留言联系 在做主页静态化的时候,需要定时生成主页HTML,以保持数据的最新. 定时任务可以用第三方包django-crontab来实现. 附上官方文档:https://pypi.org/pr ...

  5. Zookeeper之Curator(1)客户端对节点的一些监控事件的api使用

    <一>节点改变事件的监听 public class CauratorClientTest { //链接地址 private static String zkhost="172.1 ...

  6. servlet学习记录:Servlet中的service()方法

    Servlet的生存时间是由init,service,destory方法构成,这里分析一下service这个方法 Servlet接口中定义了一个service()方法,而我们一般是使用HttpServ ...

  7. 前端获得session信息方式对比,优化

    在开发中,页面 js 经常会遇到需要 当前登录用户信息(菜单权限,用户基本信息,配置信息) 的地方,一般情况我们可能对这些信息获取方式不是太在意,但是现在的前端通过webpack打包,即使做了代码分割 ...

  8. Loadrunner脚本读取 XMl 文件

    Loadrunner脚本读取 XMl 文件 性能测试工程师要懂代码么?答案是必须的,好多测试员认为在 loadrunner 中编写脚本很难很牛 X . 好多人认为 loadrunner 只支持 C 语 ...

  9. No module named '_Sqlite3' 解决方法

    今晚,在学习Python的时候,(学习链接:http://yidao620c.github.io/blog/20150420/simpleblog-01.html(搭载自己的博客案例)): 想为系统生 ...

  10. (6) go 流程控制

    一. if else (1)如果只有一条语句,大括号不能省略 (2)右括号 和 else 在一行 (3)支持 if 时可以定义变量 (4)if 的风格尽量不要加括号,用空格代替 (5)多分支 二.sw ...