2019年排名Top 100的Java類(lèi)庫(kù)——在分析了30073份源碼之后得出的結(jié)論
最近,OveOps公布了《The 2019 edition of the Top 100 Java packages from GitHub》,作者查看了這份榜單,做了翻譯和補(bǔ)充,向你展示2019年的風(fēng)云Java類(lèi)庫(kù),希望可以給正在使用Java的你一些幫助和啟示。不能說(shuō)榜單中的類(lèi)庫(kù)都是最好的,但是至少是目前比較受歡迎的。
距離Java首發(fā)以來(lái)已經(jīng)有25年了,它仍然是最流行的編程語(yǔ)言(根據(jù)2019年10月TIOBE編程語(yǔ)言排行榜)。
Java存在了很多年,但是并不意味著他不再實(shí)用了,很多年來(lái),Java一直在適應(yīng)開(kāi)發(fā)人員的需求做很多改變。就在今年,Oracle同時(shí)發(fā)布了Java 12和Java 13,為該語(yǔ)言增加了更多的特性和能力。
正如Java本身的變化一樣,Java語(yǔ)言相關(guān)的類(lèi)庫(kù)也在做著各種變化。今年的Java類(lèi)庫(kù)排行榜恰恰證明了這一點(diǎn)。言歸正傳,是時(shí)候深入研究一下2019年最熱門(mén)的Java類(lèi)庫(kù)了。
最受歡迎的前10個(gè)Java類(lèi)庫(kù)
今年的Java類(lèi)庫(kù)排行榜的榜首被hadoop摘得,這個(gè)去年第二的類(lèi)庫(kù),今年終于被扶正了。
Apache Hadoop,是一款支持?jǐn)?shù)據(jù)密集型分布式應(yīng)用程序并以Apache 2.0許可協(xié)議發(fā)布的開(kāi)源軟件框架。它支持在商品硬件構(gòu)建的大型集群上運(yùn)行的應(yīng)用程序。Hadoop的框架最核心的設(shè)計(jì)就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲(chǔ),而MapReduce則為海量的數(shù)據(jù)提供了計(jì)算。
今年的第二名是一個(gè)新星——Apache Camel,Apache Camel是一個(gè)基于規(guī)則路由和中介引擎,提供企業(yè)集成模式的Java對(duì)象的實(shí)現(xiàn),通過(guò)應(yīng)用程序接口來(lái)配置路由和中介的規(guī)則。
而去年的第一名fasterXML/Jackson今年降到了第十名。
Jackson是一個(gè)JSON庫(kù),可以方便的將JSON轉(zhuǎn)化成Java的對(duì)象模型,以及把Java的對(duì)象模型轉(zhuǎn)換成一串JSON。
前100類(lèi)庫(kù)透露出的主要信息
JUnit的衰落。對(duì)我們來(lái)說(shuō),今年最大的意外是JUnit的衰落。盡管它在2018年并不是第一名,我們也沒(méi)料到它會(huì)從第三名一路跌到第33名。
Apache的崛起。正如您所看到的,今年的列表中有一些有趣的新名稱(chēng),其中最引人注目的是Apache。免費(fèi)、開(kāi)源和跨平臺(tái)的軟件占據(jù)了前5名的位置,包括它的Hadoop包、集成框架Camel、Commons compression API、以內(nèi)存為中心的分布式數(shù)據(jù)庫(kù)Ignite和HTTP包。
企業(yè)單點(diǎn)登錄。前10名中有一個(gè)新名字:Apereo。該包提供了一個(gè)用于在企業(yè)中實(shí)現(xiàn)SSO解決方案的開(kāi)源項(xiàng)目。正如我們所知,在內(nèi)部實(shí)現(xiàn)SSO解決方案可能比較困難,所以這個(gè)開(kāi)源框架被廣泛使用。
榜單中出現(xiàn)了更多新名字。Apereo并不是我們今年看到的唯一一個(gè)新名字,有一長(zhǎng)串的包已經(jīng)進(jìn)入我們的頂級(jí)Java列表,比如:
- #13 – org.pentaho – 提供數(shù)據(jù)管理和分析。
- #16 – com.facebook.buck – 一個(gè)鼓勵(lì)在各種平臺(tái)和語(yǔ)言上創(chuàng)建小型可重用模塊的系統(tǒng)。
- #21 – com.yahoo.vespa – 雅虎的數(shù)據(jù)處理類(lèi)庫(kù)。
- #28 – org.killbill.billing – 一個(gè)開(kāi)源的計(jì)費(fèi)和支付平臺(tái)。
- #56 – com.baidu.disconf – 百度的分布式配置管理平臺(tái)。
不可能有贏家而沒(méi)有輸家,這使得在我們的榜單中,排名靠后的包和靠前的包一樣重要。我們決定把重點(diǎn)放在那些從2018年跌至2019年榜單底部的類(lèi)庫(kù)身上。這些包括:
- #79 – org.glassfish.jersey – 用于用Java開(kāi)發(fā)RESTful Web服務(wù)。它提供對(duì)JAX-RS API的支持,并充當(dāng)JAX-RS參考實(shí)現(xiàn),去年排名#65.
- #81 – org.jboss.netty – 一個(gè)非阻塞I/O客戶端-服務(wù)器框架,主要用于開(kāi)發(fā)Java網(wǎng)絡(luò)應(yīng)用程序,如協(xié)議服務(wù)器和客戶端。異步事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用程序框架和工具用于簡(jiǎn)化網(wǎng)絡(luò)編程, 去年排名#22.
- #85 – org.apache.curator – Apache ZooKeeper的Java庫(kù),去年排名#29
- #87 – org.assertj.core –富類(lèi)型斷言庫(kù),去年排名 #56
- #88 – org.xml.sax – Java SAX解析,去年排名#71
- #93 – com.codahale.metrics – 一款監(jiān)控指標(biāo)的度量類(lèi)庫(kù),去年排名#42.
- #97 – org.joda.time – 一個(gè)標(biāo)準(zhǔn)的日期和時(shí)間庫(kù),去年排名#44.
- #99 – org.apache.kafka – 一個(gè)開(kāi)源流處理平臺(tái),由Scala和Java編寫(xiě)。該項(xiàng)目的目標(biāo)是為處理實(shí)時(shí)數(shù)據(jù)提供一個(gè)統(tǒng)一、高吞吐、低延遲的平臺(tái),去年排名#69.
那些貢獻(xiàn)較大的組織
為了深入了解我們的頂級(jí)Java包,我們逐個(gè)查看每個(gè)包,試圖了解Java開(kāi)發(fā)人員正在構(gòu)建什么以及如何構(gòu)建它們。當(dāng)我們?yōu)g覽列表時(shí),有許多供應(yīng)商/所有者多次出現(xiàn),為不同的用途提供各種包。
這就是為什么我們決定更廣泛地查看我們的整個(gè)數(shù)據(jù)集,不僅要了解誰(shuí)是最受歡迎的包,還要了解誰(shuí)是使用最多的包背后的組織、公司甚至個(gè)人。
那些貢獻(xiàn)較大的組織的前10名如下:
他們分別是apache、springframework、google、jboss、amazonaws、junit、facebook、yahoo、eclipse、pentaho
另外,在前100名類(lèi)庫(kù)中,我們發(fā)現(xiàn)有4個(gè)類(lèi)庫(kù)分別來(lái)自3家中國(guó)企業(yè),他們分別是:
來(lái)自百度的com.baidu.disconf (分布式配置管理平臺(tái))
來(lái)自微信的weixin.popular.bean(微信SDK)
來(lái)自阿里巴巴的com.alibaba.otter(阿里巴巴分布式數(shù)據(jù)庫(kù)同步系統(tǒng))和com.alibaba.jstorm(阿里巴巴流處理框架)
其中排名最高的是阿里巴巴的otter,排名第19。
分析方法
就像去年一樣,我們使用谷歌BigQuery和GitHub的API來(lái)獲取我們想要的數(shù)字。我們提取了頂級(jí)的存儲(chǔ)庫(kù),并從中提取了這些存儲(chǔ)庫(kù)使用的Java包。
BigQuery 是 Google 專(zhuān)門(mén)面向數(shù)據(jù)分析需求設(shè)計(jì)的一種全面托管的 PB 級(jí)低成本企業(yè)數(shù)據(jù)倉(cāng)庫(kù)。該服務(wù)讓開(kāi)發(fā)者可以使用Google的架構(gòu)來(lái)運(yùn)行SQL語(yǔ)句對(duì)超級(jí)大的數(shù)據(jù)庫(kù)進(jìn)行操作。BigQuery 可在幾秒內(nèi)掃描 1 TB 的數(shù)據(jù),在幾分鐘內(nèi)掃描 1 PB 的數(shù)據(jù)。
從GitHub中提取的30,073個(gè)Java源文件中,我們過(guò)濾掉了Android、Arduino、重復(fù)和廢棄的repos。獲得每個(gè)項(xiàng)目的源文件后,我們提取惟一的import語(yǔ)句,確保每個(gè)項(xiàng)目只計(jì)算一次。最后一步是再次檢查結(jié)果,確保沒(méi)有Android、Arduino、deprecated或標(biāo)準(zhǔn)的Java包,然后導(dǎo)出最終的數(shù)字進(jìn)行處理。
我們過(guò)濾了前100個(gè)結(jié)果,創(chuàng)建了一個(gè)新的谷歌電子表格,并寫(xiě)了這篇文章供您欣賞:https://docs.google.com/spreadsheets/d/1QXw5TILFQCBoB0wxhNAoKabRbUm9C6TE3mD260S_gXY/
關(guān)于作者:Hollis,一個(gè)對(duì)Coding有著獨(dú)特追求的人,現(xiàn)任阿里巴巴技術(shù)專(zhuān)家,個(gè)人技術(shù)博主,技術(shù)文章全網(wǎng)閱讀量數(shù)千萬(wàn),《程序員的三門(mén)課》聯(lián)合作者。