Java开发人员最常用的库是什么? 2017版

Java开发人员最常用的库是什么? 2017版

感觉就像昨天一样,我们正在从GitHub抓取数据,以发现2016年顶级的Java库,而又突然过去了一年。 今年,我们将这些数据提升了一个档次,并将Google BigQuery引入了组合,以检索最准确的结果。

对于今年的数据紧缩,由于有了Google BigQuery,我们对方法进行了一些更改。 首先,我们从星号中拉出了GitHub上排名前1000的Java存储库。 现在我们在Github上拥有最受欢迎的Java项目,我们过滤掉了Android,仅关注477个纯Java项目。

过滤项目后,我们计算了每个项目中的唯一导入并将它们加在一起。 这篇文章的底部提供了更深入的研究过程。

没有更多的理由,现在该看看谁是2017年最受欢迎的Java库的赢家和冠军。 谁会坐在Java宝座上?

排名前20位的Java库

排名前20位的Java库

去年相同,JUnit是GitHub中最受欢迎的Java库。 在扩展的JUnit抽象Runner类中,它也排名第二,而在较旧的junit.framework中,您甚至可以在第三名中找到它。

开源测试框架Mockito现在是第四大最受欢迎的Java库。 排名前五的是slf4j,它是Java的日志记录外观。 它的流行强调了开发人员对日志的依赖,并显示了标准java.util.logging库的低使用率。 我们最近对Java开发人员中最常见的日志记录习惯进行了更深入的研究,并将研究成果发布为广泛的电子书,您可以在此处进行查看

Hamcrest兴起,这是一个有助于在JUnit和jMock内编写测试的框架,这是开发人员需要更好的测试环境的另一个标志。

创建更好的调试环境

旨在产生更好代码的库的最高位置强调了测试的重要性。 它还提出了一个事实,即生产错误是开发人员必须面对的最大难题之一,也就不足为奇了。 解决这一难题的需要是促使我们构建OverOps的主要原因之一

生产中的调试包括筛选日志文件,尝试重现导致错误的变量状态。 OverOps为工程师提供任何异常,记录的错误或警告之后的确切变量状态。 它使您可以查看错误的整个调用堆栈中的完整源代码和变量状态。 即使未将其打印到日志文件中。

我们很乐意向您展示其运作方式, 请点击此处安排一些时间与我们见面。

热门趋势和引人注目的图书馆

在前20个库中,我们可以看到流行的Google Guava库的表示形式,对JUnit框架的更多使用以及对Javax库的更多使用。 我们还可以看到最受欢迎的JSON库是Jackson。

在#20处,我们可以看到一个弹出的新名称,我们在去年的前20名中没有注意到:org.w3c.dom,它提供了用于操作DOM(文档对象模型)的接口。 同样,更广泛地查看前100个列表,我们可以看到Spring具有广泛的代表性,它具有以下8个库:

#57 – org.springframework.beans.factory.annotation
#60 – org.springframework.context
#65 – org.springframework.context.annotation #66 – org.springframework.stereotype #68 – org.springframework.util #81 – org.springframework.test.context.junit4 #85 – org.springframework.beans.factory #91 – org.springframework.web.bind.annotation

我们能够发现的另一个趋势是Apache库的广泛使用:

#16 – org.apache.commons.io
#22 – org.apache.http
#24 – org.apache.commons.lang #25 – org.apache.http.impl.client #30 – org.apache.http.client #33 – org.apache.http.client.methods #34 – org.apache.log4j #35 – org.apache.commons.codec.binary #45 – org.apache.commons.lang3 #53 – org.apache.http.entity #61 – org.apache.http.util #64 – org.apache.commons.logging #75 – org.apache.http.message #88 – org.apache.zookeeper #95 – org.apache.hadoop.conf #98 – org.apache.http.client.config #100 – org.apache.http.client.utils

图表中显着的变化之一是AssertJ的兴起,AssertJ是一个提供流畅接口以编写断言的库。 今年,它攀升到了第50名,这意味着最受欢迎的项目非常重视最佳实践,例如测试。 在电子表格的底部,我们可以找到脚本API javax.script和org.apache.http.client.utils,这是URI实例的构建器。

在此处随意浏览完整的前100个Java库列表。

我们是怎么做的?

正如我们在文章开头提到的那样,今年我们使用Google BigQuery处理来自GitHub的数据。 我们已经使用GitHub的API提取了前1000个存储库,并提取了这些存储库使用的Java库。

过滤掉Android,Arduino和不建议使用的存储库后,我们剩下259,885个Java源文件。 然后,我们删除了同一存储库中相同库的重复使用,最终得到25,788个唯一库。

我们实际上是如何做到的? 在OverOps研发团队的Guy Castel的帮助下,以及一些SQL查询。 首先,我们要创建顶级存储库表,称为java_top_repos_filtered:

SELECT
  full_name
FROM
  java_top_repos_1000
WHERE NOT ((LOWER(full_name) CONTAINS 'android') OR
           (LOWER(full_name) CONTAINS 'arduino'))
      AND ((description IS null) OR
           (NOT ((LOWER(description) CONTAINS 'android') OR
                 (LOWER(description) CONTAINS 'arduino') OR
                 (LOWER(description) CONTAINS 'deprecated'))));

现在我们有了顶级存储库的名称,我们提取了它们的所有内容:

SELECT
  repo_name,
  content
FROM
  [bigquery-public-data:github_repos.contents] AS contents
INNER JOIN
(
  SELECT
    id,
    repo_name
  FROM
    [bigquery-public-data:github_repos.files] AS files
  INNER JOIN
    java_top_repos_filtered AS top_repos
  ON
    files.repo_name = top_repos.full_name
  WHERE
    path LIKE '%.java'
) AS files_filtered
ON
  contents.id = files_filtered.id;

在获得每个项目的源文件之后,我们希望提取其所有唯一的import语句。 在以下查询中,我们提取程序包名称,并确保每个项目仅计一次:

SELECT
  package,
  COUNT(*) count
FROM
( //extract package name (exclude last point of data) and group with repo name (to count each package once per repo)
  SELECT
    REGEXP_EXTRACT(import_line, r' ([a-z0-9\._]*)\.') package,
    repo_name
  FROM
  ( //extract only 'import' code lines from *.java files
    SELECT
      SPLIT(content, '\n') import_line,
      repo_name
    FROM
      java_relevant_data
    HAVING
      LEFT(import_line, 6) = 'import'
  )
  GROUP BY
    package,
    repo_name
)
GROUP BY
  package
ORDER BY
  count DESC;

最后一步是再次过滤结果,确保没有任何Android,Arduino,弃用的或标准的Java库可能会漏掉我们的查询漏洞:

SELECT
  *
FROM
  java_top_package_count
WHERE
  NOT ((LEFT(package, 5) = 'java.') OR
       (LOWER(package) CONTAINS 'android'))
ORDER BY
  count DESC;

那里就是2017年顶级Java库。

最后的想法

使用Google BigQuery带来了回报,我们对顶级GitHub项目中使用的库有了更为冗长的忽视。

主要结论是,2016年最受欢迎的大多数库在2017年仍然名列前茅。从我们的角度来看,这意味着这些库背后的开发人员,团队和/或公司正在努力保持其相关性并与时俱进-至今。

这也意味着,如果您打算启动自己的Java项目,则我们的电子表格可以为您应使用的库提供一些很好的参考。

翻译自: https://www.javacodegeeks.com/2017/08/popular-libraries-java-developers-use-2017-edition.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值