Github最流行的10,000个Java项目使用的类库
前言
作为Java开发人员,总是需要面临这门不断成熟、高速改进中的语言。开发人员每次开始新项目时总会面临一个困境——是使用大家都在讨论的、全新的热门类库,还是使用经久考验的类库?
译注:
- 这个问题说白了,是那些经验不足的程序员面临的问题。有经验的工程师会审视需求,做足功课之后,根据优缺点来平衡使用什么类型的类库。
- 还有项目的进度需求是什么样子的?
- 项目内部人员结构?地理位置?
- 公司的角度来看一般倾向于保守了。
现状是大多数的Java应用程序是商业化的,所以很难判断那些被不断谈论的类库(框架)是否真正被一些应用程序实际使用。然而,弄清这一点又是类库或者是框架取得成功的关键条件,那就是在开发社区里该类库的使用和贡献状况。
译注:最明显的应当属Hadoop了,许多年前还不是很火的技术,由于Yahoo、Facebook等公司的贡献就变得不一样了。
这里我们决定用数据来说话。通过分析在Github最流行的Java项目实际使用的类库,进行统计和梳理。
译注:数据为王,又来了。实际上数据到处都是,只不过有没有如何使用的眼光了。
评判方法
我们根据Github社区内用户最喜欢的项目作为是否为加入候选列表的评判条件,得到标题中提到的10,000个最流行的Java项目。同时,我们分析了大多数项目几乎都使用的pom.xml ,分析这些项目依赖哪些类库(框架)。最后,把这些分析数据归类得出来非常有趣的结果。
译注:对pom.xml 不了解的人去请看看Maven吧。
评估结果
最终结果——JavaScript、Ruby和Java最受欢迎类库Top100:
Logging:最流行的Java日志类库是slf4j——一个façade(门面)日志框架。统计结果有3068个,同时表明Github上的Java项目的开发者已经全盘接受使用解耦方式来实现的日志框架,即日志操作接口与实际输出日志的引擎之间的松散耦合。
译注slf4j是一个日志的门户框架,它并没有实际的输出日志的能力所以你需要制定内部是使用log4j或者logback。好处是你可以通过配置变化最终的日志输出类库提高项目的可扩展性。
同时,由于slf4j本身不是一个日志引擎,所以我们还是应该观察最流行的日志引擎。冠军是log4j——891个项目正在使用;亚军是Apache Commons-logging——334个项目在使用它,但是这个数字还不及Log4j使用量的一半;Sfl4j是铜牌获得者,它是一个简单的日志框架——174个项目正在使用它。
“现在,最受欢迎的Java函数库是slf4j——1万个项目中有30.7%使用了slf4j。”
译注:
- 我还是很惊奇log4j还在被使用,即使大家知道它有性能问题。所以这里推荐大家使用以下LogBack,Apache Log4j 2。
- 另外很好奇的是为什么不统计日志收集分析的类库那?难道只记日志,不收集以及分析吗?
Spring:Spring可能被视为更加成熟以及不是那么“性感”的框架。但是当你发现在TOP 100 项目中使用了它的15个框架的话,你就会经验它的巨大的被使用量。 当然Spring是属于一种雨伞式的框架,那么深入进去发现它的哪个部分子框架被使用的最多就变成有趣的事情了。Spring-test是被使用最多的框架(当然除了核心类库之外)—— 376个项目使用了它。(译注:更多的是在Web开发项目中使用)其次,Web-mvc是用来设计开发健壮的Web系统—— 277个项目使用了它。最后是web-orm,用来建立使用后置数据库方式的Java Web系统——218个项目使用了它。
TDD(测试驱动开发):JUnit毫无疑问的是这个领域的排头兵——有3068个项目使用。这也反映了测试驱动开发对Java领域开发的深刻影响。貌似如果你是一个Java开发者提交代码的同时也需要单元测试变成了一个必须的需求。当然需要注意的是JUnit在这个领域里面不是孤单的,TestNG排在第二位——331个项目在使用它。
Mockito:Mockito 是一个流行的模拟测试框架——有413个项目正在使用,是该领域的老大。紧随其后的是EasyMock,另一种模拟测试框架——有231个项目正在使用。
译注:
- TDD这个话题很好玩,我好奇的是这些项目的测试用例的覆盖率及Unit testing coverage。通过这个侧面也可以很好的了解它的质量。
- 还有这些项目的Good Practice是先写接口以及测试用例然后再开发,还是先开发再写测试用例那?
好了大家不要喷我哟,就让我小小邪恶一把吧。
Apache Commons:既然看到了Spring,那么就不能忽略Apache Commons。它是Java开发领域中不可或缺的最重要基础类库之一。 Commons-io 以及 Commons-lang 分别都有519和504个项目在使用它们。这些数据标识着它们在实际开发中非常流行。
与此同时,Apache Commons总共在Top 100 类库中占据了13席。Google的Guava框架也表现得十分出色—— 有483个项目正在使用它,这显示了它在Java开发领域中的重要性。
译注:我觉得作者想表示的类别应该是通用类库,但是直接使用Apache Commons感觉上有点不像分类了。
Sql和NoSQL:随着NoSql以及大数据这几年逐渐成为热门话题,讨论关系型数据库以及NoSql技术变得很时髦。最流行的关系型数据库是MySql——
225个项目在使用它。Hibernate一个著名的OR mapping(对象关系映射)工具,虽然它本身不是数据库却也相当流行——181个项目在使用它。请记住Github是一个开源代码仓库,所以对于商业的数据库产品,例如Oracle,更有可能出现在一些私有项目中。
译注:作者这么说估计是为了避免又有人跳出来讨论为什么没有Oracle什么之类的了。
Hadoop: Hadoop的表现ye十分出色—— 168个项目在使用它。为了对比,Prostgre Sql——一个流行的成熟的开源的关系型数据库,有121个项目在使用它。这样的数据对比验证了上面的说法。
ElasticSearch:ElasticSearch作为另外一个大数据项目——有110个项目在使用它.。令人惊奇的是,Sqlite在Ruby开发领域中——有1085个项目在使用它,但是它并不属于Java Top 100的开发类库。
Android:对于移动设备开发领域的开发者,我们在Github中发现了228个项目使用了Android和Maven。这说明没有很多移动项目托管在Github上,另一方面也标志着Java始终占据服务器端软件主流。
对结果你感到惊奇?那么就来观看完整的在Github上Top 100 Java类库吧,同时也让我们知道你对于这样的结果有什么想法。我们希望听见你的想法以及问题。
原文链接: takipiblog 翻译: ImportNew.com- Andy.Song
译文链接: http://www.importnew.com/7743.html
[ 转载请保留原文出处、译者和译文链接。]
Github最流行的10,000个Java项目使用的类库的更多相关文章
- 得到JAVA项目根文件夹
获得的相对路径 说明:相对路径(这并不说明什么时候相对谁)可以通过以下来获得(无论是一般java项目或web工程) String path = System.getProperty("use ...
- 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架
20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...
- GitHub上那些值得一试的JAVA开源库--转
原文地址:http://www.jianshu.com/p/ad40e6dd3789 作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,S ...
- GitHub上那些值得一试的JAVA开源库
作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,Spring,Hibernate等等.除了这些,你可能还会fork或Star一些其他的开 ...
- 28款GitHub最流行的开源机器学习项目
现在机器学习逐渐成为行业热门,经过二十几年的发展,机器学习目前也有了十分广泛的应用,如:数据挖掘.计算机视觉.自然语言处理.生物特征识别.搜索引擎.医学诊断.DNA序列测序.语音和手写识别.战略游戏和 ...
- 10个用Java谋生非常有趣的方式
令我惊讶的是,有些人觉得编程并不令人兴奋——只将它当作是一份枯燥的工作.不过,虽然可能的确有很多无聊的编程工作,但这并不意味着你不得不接受这些工作中的一个.程序员有各种各样的机会,运用他们的技能去做一 ...
- GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。
1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...
- GitHub上最受欢迎的 5 大 Java 项目
1. Mockito Mockito 并不是无酒精混合饮料的意思.Mockito 是一个针对 Java 的 mocking 框架.它与 EasyMock 和jMock 很相似,但是通过在执行后校验什么 ...
- 2017年11月GitHub上最热门的Java项目出炉
2017年11月GitHub上最热门的Java项目出炉~ 一起来看看这些项目你使用过哪些呢? 1分布式 RPC 服务框架 dubbohttps://github.com/alibaba/dubbo S ...
随机推荐
- reload(sys)后print失效问题解决
python版本: python2.7.6 #查看python默认编码格式 >>> import sys >>> print sys.getdefaultencod ...
- 剑指架构师系列-MySQL的安装及主从同步
1.安装数据库 wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-commun ...
- JavaScript 函数定义
JavaScript 使用关键字 function 定义函数. 函数可以通过声明定义,也可以是一个表达式. 函数声明 在之前的教程中,你已经了解了函数声明的语法 : function function ...
- 工作流引擎 Flowable 6.0.0.RC1 release,完全兼容Activi
Flowable 6.0.0.RC1 release,第一个可流动的6引擎版本(6.0.0.RC1). Flowable 6.0.0.RC1 relase新增加的功能以及特色: 包重命名为org.Fl ...
- ListView常见的优化方式简述
ListView的优化 对于ListView来说,应该算是布局中几种最常用的组件之一了,使用也十分方便,下面个大家介绍一下两种常见的优化方式. 1.条目复用优化 其实listview的工作原理就是,l ...
- 临时关闭Mac SIP系统完整性保护机制
# 修正更新 [2016-12-27] 晚上给我笔记本安装的时候,使用user权限安装成功,mac最后是关闭sip才安装成功. $ pip install -r requirements.txt -- ...
- 初识Vulkan
Vulkan是Khronos组织制定的"下一代"开放的图形显示API,是与DirectX12可以匹敌的GPU API标准.Vulkan是基于AMD的Mantle API演化而来,目 ...
- Spark编译及spark开发环境搭建
最近需要将生产环境的spark1.3版本升级到spark1.6(尽管spark2.0已经发布一段时间了,稳定可靠起见,还是选择了spark1.6),同时需要基于spark开发一些中间件,因此需要搭建一 ...
- iOS 10 推送全解析,注意事项
本文旨在对 iOS 推送进行一个完整的剖析,如果你之前对推送一无所知,那么在你认真地阅读了全文后必将变成一个推送老手,你将会对其中的各种细节和原理有充分的理解.以下是 pikacode 使用 iOS ...
- UNIX环境高级编程——实现uid to name
setpwent()用来将getpwent()的读写地址指回文件开头,即从头读取密码文件中的账号数据. strcut passwd * getpwent(void); getpwent()用来从密码文 ...