GitHub上最流行的10000個(gè)Java都使用了哪些庫?
Java開發(fā)者所使用的Java語言已經(jīng)很成熟且高度進(jìn)化,目前常常要面臨的問題是何時(shí)寫新代碼——是追隨每個(gè)人都在討論的新的熱門技術(shù),還是堅(jiān)持使用經(jīng)過考驗(yàn)證明可靠的庫?
事實(shí)上,由于很大一部分的Java應(yīng)用程序是以盈利為目的的,以至于我們很難分辨出傳聞中的新框架的實(shí)際使用量。對(duì)于社區(qū)用戶和貢獻(xiàn)者圍繞的框架,這是決定它繼續(xù)成功和持續(xù)發(fā)展的***因素之一。
我們決定通過分析托管在世界上***的開放倉庫——GitHub的Java項(xiàng)目的數(shù)據(jù)來看看Java開發(fā)者到底使用的是哪些庫。
在我們前一篇文章中介紹了我們?cè)贕itHub研究出的結(jié)果:JavaScript、Ruby、java前100個(gè)庫?,F(xiàn)在讓我們挖掘數(shù)據(jù),特別是java。
方法
為生成數(shù)據(jù)集,我們需要10000個(gè)Java項(xiàng)目。這些項(xiàng)目偏向那些在社區(qū)里***的。這樣的限定是因?yàn)樗鼈兿鄬?duì)重要。我們分析被GitHub上的Java項(xiàng)目廣泛用于定義依賴pom.xml文件,然后將它們分組。***結(jié)果很有趣。
結(jié)果
前100的JavaScript、Ruby、Java庫的完整列表
日志(Loggin)。***的Java庫是slf4f——一個(gè)日志門面框架,有3068項(xiàng)??梢钥闯鯣H上的Java開發(fā)者已經(jīng)完全擁抱與日志引擎解藕的范式,都很統(tǒng)一地使用slf4f來做。
然而slf4f本身不是一個(gè)日志引擎??纯磁旁谇懊娴娜罩疽嫱瑯佑杏谩?strong>log4j似乎是“獲勝者”,有891個(gè)項(xiàng)目使用了它。接著是Logback有340個(gè)。雖然log4j的使用量看起來體面一些,但還是少于半數(shù)的項(xiàng)目使用log4j。slf4f的簡單實(shí)現(xiàn)排名第三,有174的使用量。
當(dāng)今最聞名Java庫是slf4f,1000個(gè)項(xiàng)目中有30.7%的使用率。
Spring。盡管Spring可能被看作是一個(gè)成熟的而非一個(gè)時(shí)髦框架,它仍然有可觀的使用率,在前100 名中占據(jù)了15個(gè)位置。由于Spring是一個(gè)超級(jí)框架,所以,看看它的哪些組件用得最多。Spring-test以376項(xiàng)成為Spring框架最常用的框架(在core庫后)。其后是為設(shè)計(jì)健壯Web應(yīng)用的web-mvc,有277項(xiàng)。緊跟web功能,我們看到web-orm有218項(xiàng),突出 Spring的關(guān)鍵使用場景是搭建以DB為后端的Java web應(yīng)用。
TDD。和Spring一樣前排的還有JUnit,有3068項(xiàng)。這真實(shí)的展現(xiàn)了測(cè)試驅(qū)動(dòng)開發(fā)(Test Driven Development)在Java世界的深入影響??磥恚诮裉?,如果Java程序員發(fā)布代碼,單元測(cè)試是絕對(duì)必須的。提這個(gè)是非常有必要的,雖然在這方面不只是有最有統(tǒng)治地位的JUnit(TestNG,排名第二的流行的測(cè)試框架,有331項(xiàng))。
Mockito。一個(gè)流行的模擬測(cè)試框架,同樣獲得了廣泛的吸引力——有413項(xiàng)。EasyMock,另一個(gè)模擬框架,在本分類中排名第二,有231項(xiàng)。
Google的Guava框架正在成為主流,GitHub上10000個(gè)Java項(xiàng)目有4.8%使用它。
Apache Commons??戳薙pring,我們就不能忽視眾多語言級(jí)上的基礎(chǔ)庫——Apache Commons。Commons-io和Commons-lang都排前10,分別有519項(xiàng)和504項(xiàng)。顯示出他們非常的流行。
整個(gè)Apache Commons有13個(gè)庫排在前100。Google的Guava框架,也提供語言級(jí)的工具(有些與Commons相似),同樣非常優(yōu)秀,有483項(xiàng),使它能成為別一個(gè)關(guān)鍵的Java構(gòu)建塊(building block)。
Sql與NoSql。介于在最近幾年NoSql和大數(shù)據(jù)(Big data)是熱門話題(好理由),看看關(guān)系型數(shù)據(jù)庫和NoSql技術(shù)的實(shí)際使用率,還是值得的。***的Sql DB是MySql,有225項(xiàng)。Hibernate ORM本身不是數(shù)據(jù)庫,也相當(dāng)?shù)牧餍?,?81項(xiàng)。在DB方向,我們需要注意到的是在GH這么一個(gè)開源倉庫里,我們看到一個(gè)稍強(qiáng)的商業(yè)數(shù)據(jù)庫,它是閉源的數(shù)據(jù)庫Oracle。
證明傳聞(the buzz)是正確的:Hadoop在GitHub上的Java項(xiàng)目中比Postgre SQL更流行
Hadoop的表現(xiàn)也不錯(cuò),有168項(xiàng)。實(shí)際數(shù)據(jù)證明傳聞是真的。要正確看待,Hadoop比Postgre SQL(121項(xiàng))具有更多的項(xiàng)數(shù)。Postgre SQL是最成熟的開源關(guān)系型數(shù)據(jù)庫之一。
ElasticSearch,另一個(gè)大數(shù)據(jù)技術(shù),有110項(xiàng)。出乎意料的是sqlite在Ruby中有1085項(xiàng),但排Java的100名以外。
Android。在GH上的移動(dòng)開發(fā)者,我們看到有228項(xiàng)是使用Maven來構(gòu)建Android。盡管這表明不是很多移動(dòng)項(xiàng)目放在GH上,但它仍然是一個(gè)強(qiáng)用力的指標(biāo),Java仍然是非常強(qiáng)大的服務(wù)器端語言。
有些結(jié)果是不是很意外?我們對(duì)其中一些結(jié)果是有些意外??催^在GitHub上排名在前100的Java庫后,請(qǐng)?jiān)谠u(píng)論處告訴我們你所想的。我們喜歡聆聽你的想法和提問。
翻譯后語
申明:我不確定這個(gè)數(shù)據(jù)的準(zhǔn)確性,我也想找到他們是如何統(tǒng)計(jì)分析的。
翻譯這文章有吹捧Java的嫌疑,同時(shí)容易引起大家在語言的無用的討論。這都不是我的目的。實(shí)際上,我們應(yīng)該看到作者這種拿數(shù)據(jù)說明的精神,然后把作者那種分析問題的思維方式學(xué)下來。這才是重點(diǎn)。