Snyk和Azul合作的JVM 生态系统报告 2021显示,62% 的接受调查的开发人员在生产中使用 Java 11,以 60% 的比例领先 Java 8。Kotlin 是继 Java 之后最流行的 JVM 语言。AdoptOpenJDK占 45%,是最受欢迎的 JDK 发行版,远远领先于分别占 28% 和 23% 的 Oracle OpenJDK 和 Oracle JDK。Eclipse Adoptium,最近创建了他们的新工作组, 已经贡献了 1%(Adoptium 仍在孵化中,尚未正式发布任何二进制文件)。Spring Boot、Jarkarta EE 和更新框架的使用在过去一年中有所增长。开发者青睐 IntelliJ IDEA,它的使用量是 Eclipse IDE 的三倍,而 Maven 的使用量是 Gradle 的两倍。
超过 2000 名 Java 开发人员对这项从 2 月到 2021 年 3 月持续六周的调查做出了回应。60% 的回应来自欧洲,19% 来自北美,12% 来自俄罗斯和亚洲。35% 的受访者为员工人数不超过 100 人的公司工作,而 37% 的受访者为员工人数不超过 1000 人的公司工作。今年的调查结果大部分无法与去年相比,因为它允许多个答案。
调查发现,在生产环境中使用 Java 12 或更新版本的开发人员为 21%,是使用 Java 7 或更早版本的 6% 的三倍多。由于此问题最多允许三个回答,因此使用 Java 11 或更高版本的开发人员的总百分比未知,使用 Java 8 或更旧版本的开发人员的比率也是未知的。
该报告中的发现与 JRebel于 2021 年 3 月发布的2021 年 Java 开发人员生产力报告形成鲜明对比。该报告发现 Java 8 的使用率是 Java 11 的两倍,并且 Java 7 及更早版本的使用率与 Java 12 及更新版本相当. JRebel 报告收集了 2020 年 8 月至 11 月的 876 份开发人员回复,与 Snyk 报告不同,它没有区分 JDK 的开发和生产使用。下图比较了今年和去年的 Snyk 报告和 JRebel 报告的结果:
Java 版本使用
JRebel 2021 报告看到所有 Java 版本的使用从 2020 年开始增长,包括 Java 8 和 Java 7 及更早版本。
Snyk 发现 Java 是最受欢迎的 JVM 语言,占 91%,领先于 Kotlin,占 18%,Groovy 占 13%,Scala 占 10%,Clojure 占 8%。该报告通过分析 GitHub 存储库的编程语言,将调查结果与实际使用情况进行了对比。由于 Kotlin 1.0 是在 GitHub 推出 8 年后发布的,因此 Java 以 18:1 而不是 5:1 领先 Kotlin 也就不足为奇了,正如调查回复所表明的那样。Groovy 和 Scala 发布了他们的 1.0 版本,之后不久将 GitHub 与 Clojure 一起引入。尽管如此,Kotlin 以比调查中更大的优势领先所有三种语言:Groovy 为 8:1 与 1.4:1,Scala 为 2.7:1 与 1.8:1,Clojure 为 7:1 与 2.3:1。
Kotlin 在报告中的受欢迎程度与TIOBE 指数形成鲜明对比,截至2021 年 7 月,Groovy 以 3.4:1(1.09% 对 0.32%)领先 Kotlin。TIOBE 指数通过搜索引擎查询部分衡量编程语言的流行度。
在 AdoptOpenJDK 之后,第二受欢迎的 JDK 发行版是 Oracle 的 OpenJDK 发行版,占 28%。Oracle 的商业许可 JDK 以 23% 位居第三,其次是各种 OpenJDK 发行版:Azul 占 16%,Amazon Correcto 占 9%,与 Linux 和 Red Hat 捆绑的 OpenJDK 发行版均占 8%。
去年的调查已经允许对服务器端框架进行多次响应,因此可以与去年进行比较。除了 Spring MVC,所有框架的使用量都有所增长:
Spring Boot 以温和增长保持领先,而 Java EE/Jakarta EE 则大幅增长。现代微服务框架,如红帽的 Quarkus、Eclipse MicroProfile 和 Micronaut,在今年首次出现。
在 IDE 部分,Snyk 报告 IntelliJ IDEA 的市场份额为 72%,Eclipse 为 25%,Microsoft 的 Visual Studio Code 为 23%。Snyk 还发现,每两个开发人员使用一个以上的 IDE,而每四个开发人员使用四个或更多。
据报道,76%的开发者使用Maven构建工具,38%使用Gradle,12%使用Ant,5%使用SBT。在查看Snyk 开源工具报告的实际使用数据时,Maven 对 Gradle 的领先优势增加到 3:1(74% 对 25%)。但该工具仅支持 Maven、Gradle 和 SBT。而且,与调查不同的是,这里的使用率加起来为 100%。
Snyk 的开发人员倡导者、Java Champion 和本研究的作者Brian Vermeer就该报告向 InfoQ 进行了采访。
InfoQ:您的研究基于 2,000 多个调查回复。与整个 Java 开发人员人口相比,您认为您的结果具有多大的代表性?
我相信默认情况下调查总是有偏见的。然而,这是当前 JVM 生态系统报告中最多的受访者,去年我们也有类似的数量。我相信数字可能会有所波动,但结果将具有代表性。
InfoQ:你今年与 Azul 合作进行了这项研究。他们的贡献是什么?
来自 Azul 的人帮助我们设置调查和审查问题。此外,其他一些 Java Champions 和 Java 社区人员也提供了反馈。来自 Azul 的人在如何命名所有不同的 OpenJDK 构建与更多商业许可构建方面提供了大量帮助。对于某些人来说,这可能是一个微妙的问题。
此外,我们、Snyk 和 Azul 一起决定区分 JDK 构建和版本的生产和开发。
InfoQ:你的报告总是包含基于调查响应的 Java 构建工具分发。但是今年,您还包括一个基于 Snyk 开源工具自动收集的数据的构建工具分发版。为什么?
对于多个问题,我们将调查数据与其他数据源进行了比较。我们采用了 Github 搜索、谷歌趋势以及我们自己在 Snyk 的数据。这样我们就可以在一定程度上验证调查结果。
对于构建工具,我们查看了 Snyk 内部构建工具的分布,发现 Maven 比其他构建工具的使用更广泛。这与调查得出的结论相似。
InfoQ:Snyk 工具扫描构建文件和 Docker 容器。您是否计划在未来的研究中包含更多由您的工具(例如 Java 框架、JDK 发行版或 JDK 版本)收集的数据?
在某种程度上,我们已经做到了。对于容器,我们还可以扫描某些 Linux 发行版中 JDK 版本的二进制文件。例如,这是随 Alpine Linux 3.8 提供的 OpenJDK 8中的问题列表。
我们已经根据您在 Maven 或 Gradle 中的项目清单文件扫描 Java 框架和库中的安全问题。除此之外,我们目前有Snyk Code,一种 SAST 功能,可以扫描您的自定义 Java 代码以查找可能的安全问题。所有这些功能都可以由我们的 CLI 使用,其中大部分功能也可以使用 IDE、构建工具和 CI 管道的 Snyk 集成来使用。
开发人员调查(如 Snyk 和 JRebel 提供的调查)为 Java 社区提供了有用的数据。然而,结果通常不能代表全球 Java 开发人员群体,因为这些调查“往往是自我选择的,并围绕特定的人群聚集,例如 Twitter 关注者或 IDE 论坛”。Snyk 和 JRebel 都没有披露他们调查结果中的误差幅度。
更多细节可以在完整报告中找到。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。