当前位置: 首页 > 科技观察

2018年排名Top 100的Java类库——在分析了277,975份源码之后得出的结论

时间:2023-03-11 23:09:21 科技观察

2018年Java类库Top100——分析277,975份源代码后得出的结论。SpaceX成功发射猎鹰重型火箭,苹果公司成为第一家市值超过万亿美元的上市公司。2018年,IT圈发生了很多大喜事。SpringBoot2发布了,Java发布了10和11版本,GitHub嫁给了微软,IBM嫁给了RedHat等等。和往年一样,我们分析了2018年排名前100的Java类库。目的是给大家展示一下2018年的风云Java类库,希望能在大家使用Java的时候给大家一些帮助和启发。不能说上榜的所有类库都是最好的,但至少是目前流行的。上一榜单地址:2017年Java类库Top100——分析259885个源代码得出的结论2016年Java类库Top100——分析47251个依赖项得出的结论***的Java类库Top20今年排名Top100Java类库发生了翻天覆地的变化,榜首已被替换。今年,冠军被fasterXML/Jackson占据。而这个类库在2016年排在第14位,2017年排在第18位。Jackson是一个JSON库,可以方便地将JSON转换成Java对象模型,将Java对象模型转换成JSON字符串。在往年的榜单中,Jackson是所有JSON库中的佼佼者。Jackson依赖的jar包少,使用方便,性能比较高,Jackson社区比较活跃,更新速度也比较快。具有以下特性:易于使用-jacksonAPI提供了一个高级外观来简化常见用例。无需创建映射-API为大多数对象序列化提供默认映射。高性能——速度快,内存占用少,适用于大型对象图或系统。干净的JSON-Jackson创建了一个干净紧凑的JSON结果,便于人们阅读。无依赖性——该库不需要任何其他库,JDK除外。开源代码-jackson是开源的,可以免费使用。去年,JUnit家族的三名成员JUnit、JUnitRunner和junit.framework,今年分别排名第三、第四和第五。今年排在第二位的是ApacheHadoop,这是一个开源软件框架,支持数据密集型分布式应用程序,并在Apache2.0许可下发布。它支持在基于商用硬件构建的大型集群上运行的应用程序。Hadoop框架的核心设计是:HDFS和MapReduce。HDFS为海量数据提供存储,MapReduce为海量数据提供计算。在我们排名前20的库中,我们可以找到Eclipse基金会的Jetty、Apache基金会的Shiro和Netty,以及Google的Guice库等。JettyJetty是一个纯基于Java的Web服务器和JavaServlet容器。Web服务器通常用于为人类呈现文档,而Jetty通常用于大型软件框架内的计算机到计算机的通信。ShiroApacheShiro是一个开源安全框架,可提供身份验证、授权、加密和会话管理。Shiro框架直观且易于使用,同时还提供强大的安全性。NettyNetty是一个基于NIO的客户端和服务器端编程框架。使用Netty可以确保您快速轻松地开发网络应用程序,例如实现某种协议的客户端和服务器端应用程序。Netty简化和流线化了网络应用程序的编程和开发过程,例如基于TCP和UDP的套接字服务开发。GuiceGuice是Google基于Java5开发的轻量级依赖注入框架(IOC)(主要使用泛型和注解特性)。Guice非常小而且速度很快。Guice是类型安全的,它可以注入构造函数、属性、方法(具有任意数量参数的任何方法,而不仅仅是setter方法)。此外,在前20名榜单中,还有开源的日志组件——ch.qos.logback、专门用于代码微基准测试的工具套件——org.openjdk.jmh等,还有很多我们比较熟悉的常见apache下的类库,如apache.commons.lang、org.apache.ibatis、org.apache.maven、org.apache.http.client、apache.commons.lang3等也在榜单前20.被挤出前20名的Java类库为了分析榜单的变化,我们将2017年的前20名类库与今年的类库榜单进行了对比。我们发现除了JUnit的使用率下降之外,一些库的排名也在下降,有的甚至被挤出前二十。首当其冲的是Mockito和slf4j,它们分别在去年排名第四和第五。今年,他们被无情地甩出前20名,分别排在第23和第25位。去年我们重点表扬,排名第6,帮助用Java语言编写软件测试的框架——Hamcrest今年掉到第37位。那些后来者要看今年的结果我们看到的主要是一切都可以改变。排名垫底的图书馆明年可能会升至榜首。这就是为什么我们在2018年的图表中查看了一些不太受欢迎的类库,并在2019年像这样跟踪它们:#85org.objectweb.asm–AsimpleAPIfordecomposing,modifying,andrecomposingbinaryJavaclasses#86com.google.common.primitives–GoogleGuavaPrimitiveTypes#87com.datastax.driver–DataStaxJavaDriverforApacheCassandra#88org.json–Thedatainterchangeformat#89org.apache.commons.math3–TheApacheCommonsMathematicsLibrary#90com.netflix.hystrix–Alatencyandfaulttolerancelibrarydesignedtoisolatepointsofaccesstoremotesystems,servicesand3rdpartylibraries.那些贡献较大的组织每年我们都会从GitHubExtractthelatestJavalibrary,andstart处理数据。由于需要区分同一所有者下的不同文件夹,因此大部分处理都是手动完成的。这就是为什么在我们的列表中有许多com.google.common库以及org.springframework和org.apache等。今年,我们决定对***Java库进行更广泛的研究,看看谁是***”业主”是。我们将org.eclipse.XX、org.codehaus.YY、io.nedy.ZZ等类似的库合并到同一个组织下,然后我们整理出如下列表:列表的最前面是我们都熟悉的APCHEFoundation,频频出现在前20名榜单中。第二名:springframework第三名:google第四名:junit第五名:eclipse在今年的榜单中,值得注意的是,来自中国的一个机构贡献的类库总数进入了前20名,那就是阿里巴巴,排名第15在上图中。(作为阿里巴巴人,笔者无比自豪!!!)在Top100Java类库中,com.alibaba.otter排名第85位。Otter是一个基于数据库增量日志分析,准实时同步到本地机房或远程机房的mysql/oracle数据库。分布式数据库同步系统。作为一家互联网公司,阿里巴巴在过去的几年里在开源领域做出了很多杰出的贡献。近年来,阿里巴巴向Apache基金会捐赠了多个重量级开源项目。比如JStorm、RocketMQ、Dubbo、Weex等等,相信在开源社区的滋润下,这些项目会越来越强大!!!分析方法我们提取数据和数字的方法与去年的方法类似。在OverOps研发团队的帮助下,我们主要使用了Google的BigQuery和GitHub的API。我们提取了前1000个存储库,从中提取了这些存储库使用的Java库。BigQuery是Google专为数据分析需求而设计的全托管PB级低成本企业数据仓库。该服务允许开发人员使用谷歌的架构运行SQL语句来操作非常大的数据库。BigQuery可以在几秒内扫描1TB数据,在几分钟内扫描1PB数据。在从GitHub中提取的277,975个Java源文件中,我们过滤掉了Android、Arduino、重复和废弃的repos。此时,我们只剩下28,021个Java源文件。经过切片分析,我们得到了***Top100。TalkIsCheap,ShowYouTheCode首先,我们创建一个仓库表来存储名为java_top_repos_filtered的排名靠前的类库:SELECTfull_nameFROMjava_top_repos_1000WHERENOT((LOWER(full_name)CONTAINS'android')OR(LOWER(full_name)CONTAINS'arduino'))AND((descriptionISnull)OR(NOT((LOWER(description)CONTAINS'android')OR(LOWER(description)CONTAINS'arduino')OR(LOWER(description)CONTAINS'deprecated'))));现在,我们有了排名靠前的库的名称,我们将它们全部下拉:ASfilesINNERJOINjava_top_repos_filteredAStop_reposONfiles.repo_name=top_repos.full_nameWHEREpathLIKE'%.java')ASfiles_filteredONcontents.id=files_filtered.id;至此,我们有了每个项目的源码,我们要把去重后的import语句过滤出来,然后提取包名。SELECTpackage,COUNT(*)countFROM(//extractpackagename(excludelastpointofdata)andgroupwithreponame(tocounteachpackageonceperrepo)SELECTREGEXP_EXTRACT(import_line,r'([a-z0-9\._]*)\.')package,repo_nameFROM(//extractonly'导入'codelinesfrom*.javafilesSELECTSPLIT(content,'\n')import_line,repo_nameFROMjava_relevant_dataHAVINGLEFT(import_line,6)='import')GROUPBYpackage,repo_name)GROUPBYpackageORDERBYcountDESC;***,我们再次过滤,确保没有Android、Arduino、过时的或者Java提供的原生类库。SELECT*FROMjava_top_package_countWHERENOT((LEFT(package,5)='java.')OR(LOWER(package)CONTAINS'android'))ORDERBYcountDESC;至此,您将获得一份2017年Java库排名前100的列表。***一点思考Java在过去的几个月里经历了一些变化。它以6个月的发布周期开始,最近我们听说只有OpenJDK版本可以免费访问,而JavaSE8公共更新将需要商业许可才能用于生产。Java的变化影响着开发者,我们可以从GitHub上Java库流行度的变化看出这一点。最近关于JavaSE更新收费的消息可能会导致openjdk相关库的使用增加,甚至可能将数据转移到企业相关库中。【本文为专栏作家霍利斯原创文章,作者微信公众号Hollis(ID:hollishuang)】点此阅读更多本作者好文