Java開發者所使用的Java語言已經很成熟且高度進化,目前經常要面臨的問題是什麼時候寫新代碼——是追隨每一個人都在討論的新的熱門技術,仍是堅持使用通過考驗證實可靠的庫? java
事實上,因爲很大一部分的Java應用程序是以盈利爲目的的,以致於咱們很難分辨出傳聞中的新框架的實際使用量。對於社區用戶和貢獻者圍繞的框架,這是決定它繼續成功和持續發展的最大因素之一。 git
咱們決定經過分析託管在世界上最大的開放倉庫——GitHub的Java項目的數據來看看Java開發者到底使用的是哪些庫。 程序員
在咱們前一篇文章中介紹了咱們在GitHub研究出的結果:JavaScript、Ruby、java前100個庫。如今讓咱們挖掘數據,特別是java。 github
爲生成數據集,咱們須要10000個Java項目。這些項目偏向那些在社區裏最受歡迎的。這樣的限定是由於它們相對重要。咱們分析被GitHub上的Java項目普遍用於定義依賴pom.xml文件,而後將它們分組。最後結果頗有趣。 web
前100的JavaScript、Ruby、Java庫的完整列表 sql
日誌(Loggin)。最流行的Java庫是slf4J——一個日誌門面框架,有3068項。能夠看出GH上的Java開發者已經徹底擁抱與日誌引擎解藕的範式,都很統一地使用slf4j來作。 數據庫
然而slf4j自己不是一個日誌引擎。看看排在前面的日誌引擎一樣有用。log4j彷佛是「獲勝者」,有891個項目使用了它。接着是Logback有340個。雖然log4j的使用量看起來體面一些,但仍是少於半數的項目使用log4j。slf4j的簡單實現排名第三,有174的使用量。 後端
當今最聞名Java庫是slf4J,1000個項目中有30.7%的使用率。 ruby
Spring。儘管Spring可能被看做是一個成熟的而非一個時髦框架,它仍然有可觀的使用率,在前100名中佔據了15個位置。因爲Spring是一個超級框架,因此,看看它的哪些組件用得最多。Spring-test以376項成爲Spring框架最經常使用的框架(在core庫後)。其後是爲設計健壯Web應用的web-mvc,有277項。緊跟web功能,咱們看到web-orm有218項,突出Spring的關鍵使用場景是搭建以DB爲後端的Java web應用。 服務器
TDD。和Spring同樣前排的還有JUnit,有3068項。這真實的展示了測試驅動開發(Test Driven Development)在Java世界的深刻影響。看來,在今天,若是Java程序員發佈代碼,單元測試是絕對必須的。提這個是很是有必要的,雖然在這方面不僅是有最有統治地位的JUnit(TestNG,排名第二的流行的測試框架,有331項)。
Mockito。一個流行的模擬測試框架,一樣得到了普遍的吸引力——有413項。EasyMock,另外一個模擬框架,在本分類中排名第二,有231項。
Google的Guava框架正在成爲主流,GitHub上10000個Java項目有4.8%使用它。
Apache Commons。看了Spring,咱們就不能忽視衆多語言級上的基礎庫——Apache Commons。Commons-io和Commons-lang都排前10,分別有519項和504項。顯示出他們很是的流行。
整個Apache Commons有13個庫排在前100。Google的Guava框架,也提供語言級的工具(有些與Commons類似),一樣很是優秀,有483項,使它能成爲別一個關鍵的Java構建塊(building block)。
Sql與NoSql。介於在最近幾年NoSql和大數據(Big data)是熱門話題(好理由),看看關係型數據庫和NoSql技術的實際使用率,仍是值得的。最流行的Sql DB是MySql,有225項。Hibernate ORM自己不是數據庫,也至關的流行,有181項。在DB方向,咱們須要注意到的是在GH這麼一個開源倉庫裏,咱們看到一個稍強的商業數據庫,它是閉源的數據庫Oracle。
證實傳聞(the buzz)是正確的:Hadoop在GitHub上的Java項目中比Postgre SQL更流行
Hadoop的表現也不錯,有168項。實際數據證實傳聞是真的。要正確看待,Hadoop比Postgre SQL(121項)具備更多的項數。Postgre SQL是最成熟的開源關係型數據庫之一。
ElasticSearch,另外一個大數據技術,有110項。出乎意料的是sqlite在Ruby中有1085項,但排Java的100名之外。
Android。在GH上的移動開發者,咱們看到有228項是使用Maven來構建Android。儘管這代表不是不少移動項目放在GH上,但它仍然是一個強用力的指標,Java仍然是很是強大的服務器端語言。
有些結果是否是很意外?咱們對其中一些結果是有些意外。看過在GitHub上排名在前100的Java庫後,請在評論處告訴咱們你所想的。咱們喜歡聆聽你的想法和提問。
申明:我不肯定這個數據的準確性,我也想找到他們是如何統計分析的。
翻譯這文章有吹捧Java的嫌疑,同時容易引發你們在語言的無用的討論。這都不是個人目的。實際上,咱們應該看到做者這種拿數聽說明的精神,而後把做者那種分析問題的思惟方式學下來。這纔是重點。