最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

JVM 生态系统 2018 调查报道

  • 2018-11-15
  • 本文字数:7189 字

    阅读完需:约 24 分钟

JVM生态系统2018调查报道

这份调查报告的主要目的是为广大 Java 社区、全世界的 Java 用户组提供有用信息,包括 Virtual JUG、Java Magazine 的订阅者(Oracle 公司的 Java 双月刊)。以下是报告主要内容。

关于 JDK

1. 你在生产环境主要使用哪个 Java 供应商的 JDK?

我们以这个核心问题作为报告的开始。有很多供应商提供了他们自己的 JDK 实现,那么开发人员在生产环境中使用了哪家的 JDK 实现?我们可以看到,Oracle JDK 和 OpenJDK 的采用处于支配地位。有十分之七的开发人员选择使用 Oracle JDK,五分之一的人选择使用 OpenJDK,其他竞争者寥寥无几。但是,新的许可和支持变更可能会导致这些数字在未来发生变化。



JDK 供应商细分,包括 Oracle JDK 和 OpenJDK

2. 你在生产环境中主要使用哪个版本的 Java SE?

Java 9 发生了重大的结构性变化,很多人预测这会对迁移和采用造成影响。我们可以从结果中看到,Java 8 仍然是 Java 的最主要版本——几乎有五分之四的受访者表示他们的主要应用程序使用的是 Java 8。另外需要注意的是,在非 Java 8 采用者当中,使用更新版本的人不到一半。



生产环境中使用的 JDK 版本,Java 8

3. 你打算如何应对 Java 的新发布周期?

Java 9 带来了一些重大的架构变更,同时也引入了一个新的发布周期,Java SE 版本每六个月发布一次。每两到三年,会发布一个长期支持(LTS)版本,长期支持包括安全更新等。请注意,Java 9 并不是 LTS 版本。这个问题是询问开发团队将如何应对这个新的发布周期。受访者的答复各不相同,表表示现在还存在很多不确定性。实际上,几乎三分之一的开发人员还不知道他们将如何应对新的发布周期。


我们预计,在未来一年将会出现最佳实践,公司将会进入首选的迁移周期,这可能会因行业的不同而有所不同。因此,我们预计“Don’t know yet”这个数字会下降,但我们不知道哪个数字会增加。



自 LTS 发布以来的 Java 迁移计划

4. 你的主要应用程序使用哪个版本的 Java EE?

近五分之二的受访者表示他们不使用 Java EE。对于使用 Java EE 的受访者当中,大多数使用 Java EE 7。Java EE 8 于 2017 年 9 月发布,并有望在发布不到一年的时间成为最受欢迎的版本。与 Java SE 不同,新发布的 Java EE 需要更长时间才能被采用,因为实现它需要更长的时间。此外,应用服务器供应商需要时间采用和实现新规范。


随着 Jakarta EE 8 的推出和采用,我们对这些数字将如何变化拭目以待。



在生产环境中使用的 Java EE 版本,Java EE 7、Java EE 8

5. 你的主要应用程序使用的主要 JVM 语言是什么?

十分之九的 JVM 用户正在使用 Java 开发应用程序。虽然今天的很多项目被定义为多语言项目,但 JVM 上项目主要使用 Java。


尽管对 Java 的偏好非常强烈,但 JVM 用户对其他 JVM 语言也表现出了极大的兴趣,因为 Java Magazine 和主要编程网站上与它们相关的文章非常受欢迎。在过去几年中,新兴的“热门”JVM 语言主要是 JetBrains 的 Kotlin,它继续取得稳步进展。它现在是受 Android 支持的开发语言,同时也是为构建工具 Gradle 编写脚本的第二种主要语言(排在 Groovy 之后)。所有这些因素都让 Kotlin 在我们的调查中超越了 Scala 和 Groovy。


Clojure 为 3.0%,这个数字算非常高的,这是在向我们发出这样的一个信号——开发者对函数式编程保持着持续的兴趣。



JVM 语言流行程度,包括 Java、Clijure、Kotlin、Groovy、Scala

JDK 相关总结

  • 十分之七的开发人员在生产环境中使用 Oracle JDK;

  • 五分之一的开发人员在生产环境中使用 OpenJDK;

  • 五分之四的开发人员在生产环境使用 Java SE 8;

  • 十分之一的开发人员已迁移到 Java 9 或更高版本;

  • 几乎十分之三的开发人员不知道如何应对新的 Java 发布周期;

  • 超过三分之一的开发人员计划只使用 Java 的 LTS 版本;

  • 只有十分之一的开发人员计划继续使用最新版本的 Java;

  • 几乎有一半的开发人员使用 Java EE 7 或 Java EE 8;

  • Java EE 7 仍然是最受欢迎的 Java 企业版,几乎有十分之三的开发人员在使用它;

  • 十分之九的 JVM 开发人员使用 Java;

  • Kotlin 在语言使用方面超过 Groovy 和 Scala,占比 2.42%

关于工具

6. 你在开发当中使用哪个 IDE?

对于这个问题,这份报告得出的结果与最近的其他调查结果保持一致:IntelliJ 在过去一到两年内超过了 Eclipse,而 Apache NetBeans 则保持 10%左右的市场份额。IntelliJ 的 45%总票数包括 32% IntelliJ IDEA Ultimate Edition(付费版)、11% IntelliJ Community Edition(免费版)和 2% Android Studio 的用户。Eclipse 类包括 Eclipse STS、JBoss Tools、Rational Application Developer 和其他基于 Eclipse 的工具。


Apache NetBeans 用户的数量没有太大变化,这表明从 Oracle 迁移到 Apache Software Foundation 并未影响其用户群。值得一提的是,Visual Studio Code 也出现在当中,虽然只有 1%,但这表明它已经开始在 Java 社区中占有一席之地。



IDE 受欢迎程度,包括 IntelliJ IDEA、Eclipse IDE 和 NetBeans

7. 你的主要项目使用哪种构建工具?

我们问的是主要的构建工具,我们想知道你的主要项目所依赖的构建工具是哪些。可以看到,Maven 与其最主要的竞争对手 Gradle 的比例为 3:1,占主导地位。十分之一的开发人员仍然在使用 Ant,而 20 个用户中只有一个没用使用构建工具!


2006 年,RebelLabs(2000 名受访者)进行了一次类似调查,Maven 占 68%,Gradle 占 16%。Gradle 采用率提高可能是因为增加了对 Kotlin 作为脚本语言的支持。Gradle 也是 Android 项目的默认构建引擎。然而,它对 Maven 支持的进展缓慢。



JVM Java 构建工具的流行程度,包括 Maven、Gradle 和 Ant

8. 你使用哪种静态分析工具?

这是一个多项选择问题,因此这里的数字加起来不是 100%。从这些数据中可以看出,实际上只有极少数静态质量工具很流行:SonarQube、Findbugs 和 Checkstyle 占主导地位。最令人惊讶的是,36%的受访者不使用任何静态质量工具。这是最令人惊讶的,因为我们期望使用静态质量工具应该是常态。



静态分析工具的流行程度,包括 SonarQube、Findbugs、Checkstyle 和 PMD

9. 你是否在测试中使用静态安全工具?

安全测试正成为一个热门话题。然而,今天的大多数网站都不使用任何静态安全工具。实际上,72%的受访者(几乎四分之三)没有在他们的管道中使用静态安全工具。我们希望在未来的调查中能够看到更多安全工具被采用。


10. 你使用哪个 CI 服务器?

正如大多数开发人员所期望的那样,Jenkins 的市场份额高达 57%。它最接近的竞争对手是“none”(即不使用 CI 服务器),为 21%,几乎是其他竞争对手的总和(22%)。剩余的 CI 服务器市场份额都不到 5%,Jenkins 的老亲戚 Hudson 在 2%上挣扎。值得一提的是微软 VSTS(Visual Studio Team Server),人们通常认为它不会出现在 Java/JVM 领域,占比 2%。


我们相信,大多数开发人员都希望所有站点都应该使用持续集成,所以五分之一的应用程序根本没有使用持续集成,这点让人感到很震惊。即使是个人项目也会使用 CI(例如 Travis CI 和 CircleCI),这些 CI 可以在 Bitbucket 和 GitHub 等公共项目托管站点上使用。



持续集成受欢迎程度,包括 Jenkins、Bamboo 和 TeamCity

11. 你的团队为主要项目使用了哪个源码管理平台?

正如所料,Git 毫无悬念地赢得了源码管理方面的冠军。受访者有近四分之三使用 Git 来管理代码库。Subversion 涵盖了大部分剩下的受访者。但不知是出于什么原因,在 2018 年,仍然有 3%的人不使用源码管理。



源码管理流行程度,包括 Git 和 SVN

12. 你为主要项目使用了哪个代码存储库?

GitHib 和 Bitbucket 各占 25%,GitLab 紧随其后,为 20%。我们可以称之为项目托管“三巨头”。请注意,这个问题不仅适用于公共项目(GitHub 在这方面具有更大的领先优势),也适用于公开和私有项目托管。


微软最近收购 GitHub 可能会影响其未来的采用率,我们将在未来的调查中了解更多信息。在 GitHub 的 25%的份额中,只有超过一半(52%)的受访者使用公共版本,而其余的(48%)使用私有 GitHub Enterprise 内部部署产品。VSTS 在“other”部分占了 2%。



代码库的流行度,包括 GitHub,Bitbucket 和 GitLab

13. 你使用哪个私有二进制或工件存储库?

大多数站点在理论上不使用打包的工件存储库,因为没有必要。那些喜欢工件存储库提供便利的人会选择成熟的 Nexus,它主要关注 JVM 生态系统,其次是 JFrog 的 Artifactory,它在多语言生态系统中更受欢迎。



二进制工件存储库工具的流行程度,包括 Nexus 和 Artifactory

14. 你使用哪种测试工具?

令人惊讶的是,几乎五分之四的人使用 JUnit,而 10%的人使用了 TestNG。很明显,单元测试是迄今为止 JVM 生态系统中最主要的测试实践。(受访者可以选择多个答案,因此总数超过 100%)。在 Mock 方面,很明显,Mockito 已经成为首选的 Mock 框架。


四分之一的受访者使用了 JMeter,5%的人使用了 Gatling。我们可以看到,性能测试越来越受到重视。有 29%的人使用 Selenium,令人印象深刻。与静态分析工具的结果不同,只有 10%的受访者表示他们不使用测试工具。十分之一的人不使用测试工具?在我们对人性失去信心之前,应该继续前进。



测试工具受欢迎程度,包括 JUnit、Mockito、Selenium 和 JMeter

工具相关总结

  • 20 个开发人员当中有 9 个在使用 IntelliJ IDEA;

  • 五分之三的开发人员使用 Maven 来构建他们的主要项目;

  • 超过七分之一的开发人员仍然不使用静态分析工具;

  • 大约有五分之三的开发人员使用 Jenkins;

  • 几乎四分之三的开发人员使用 Git 作为他们的 SCM;

  • GitHub、BitBucket 和 GitLab 几乎占据了代码存储库市场的大部分份额;

  • 几乎五分之四的开发人员使用 JUnit。

关于平台

15. 你使用哪些云平台?

从数据中可以看到,有 57%的受访者使用某种云平台。



如果我们只考虑那些使用云平台的受访者,那么可以看到,亚马逊 AWS 以近三分之二的票数遥遥领先。接下来是微软 Azure 和谷歌云平台,分别占 18%和 20%。Red Hat OpenShift 和 Oracle Cloud 也正在不断取得进展。



云平台受欢迎程度,包括亚马逊 AWS、Google 云平台、Azure、OpenShift、Oracle Cloud、IBM Cloud、Cloud Foundry、Pivotal Cloud Foundry

16. 你使用哪种云技术?

容器以 43%份额处于领先地位,虚拟机占了 33%的比例。作为一项相对较新的技术,无服务器/Fass 的应用非常强劲,近十分之一的受访者在采用这些技术。PaaS 已经存在了很长时间,占 10%。三分之一的受访者根本不使用云技术。



云技术,包括虚拟机、容器、无服务器、FaaS、PaaS

17. 你使用哪种持续部署或自动化发布工具?

几乎每两个受访者中就有一个不使用持续部署或自动化发布工具。五分之一的人不知道在 CD 或自动化发布当中使用了哪些工具。让人感到惊讶的是,Bash 居然与 Chef 和 Puppet 一样受欢迎。每个人都喜欢 Bash!Ansible 是领先的 CD 工具,占 16%。



持续部署 CD 工具,包括 Ansible、Bash、Chef 和 Puppet

关于应用程序

18. 你的应用程序使用了哪些其他(非 JVM)语言?

在今天的多语言世界中,不要天真地认为 JVM 语言就是 JVM 应用程序使用的唯一语言。实际上,超过一半的 JVM 应用程序也使用 JavaScript,五分之一使用 Python,几乎四分之一使用 Node.js,还有很多项目使用 SQL。



Java 应用程序中使用的其他语言,包括 JavaScript、SQL、Node、Python、C、PHP 和 Go

19. 你使用哪种 Web 框架?

没有什么语言能够比下面这个图表更贴切地表达 Spring 在 Java 生态系统中的主导地位。有五分之二的开发人员在他们的应用程序中使用了 Spring Boot,有趣的是,它首次超越了 Spring MVC 框架。JSF 最接近,为 19%。尽管新闻报道中多次提到了 Struts 存在远程执行代码漏洞问题,但是仍然有十分之一的人在用它,位居第四位。超过五分之一的开发人员没有使用 Web 框架。



JVM Java Web 框架,包括 Spring Boot、Spring MVC、JSF、GWT、Vaadin 和 Play

20. 你使用哪种 ORM 框架?

超过一半的人在他们的应用程序中使用 Hibernate。几乎四分之一的开发人员对 Plain JDBC 感到满意,而 Spring 开发人员当然可以选择使用 Spring JDBC Template,有 23%的人使用它。五分之一的开发人员不使用任何 ORM 框架。(开发人员可以选择多个答案,因此总数不等于 100%)。



ORM 框架普及程度,包括 Hibernate、Plain JDBC、Spring JDBC Template、Eclipse Link、MyBatis

21. 你在生产环境中使用哪个数据库?

Oracle 数据库再次占据了第一位,生产环境中有近十分之三的应用程序使用它。MySQL 和 PostgreSQL 分别是 21%和 20%。MongoDB 是使用率最高的 NoSQL 数据库,占 5%。



数据库流行程度,包括 Oracle、MySQL、PostgreSQL、MS SQL、MongoDB、DB2、Cassandra、H2、Redis

22. 你在生产环境中使用哪个应用程序服务器?

超过五分之二的受访者使用 Tomcat 作为他们的首选应用程序服务器。Tomcat 快速、轻量级、开源,受到社区的喜爱,已经领先了很长一段时间,看起来这种情况不会很快发生变化。JBoss 的 Wildfly 为 15%。在较大型的企业级应用服务器类别中,WebLogic 略微领先于 WebSphere。“Other”类别包括 TomEE 和 Liberty Profile,各为 1%,在这一组别中领先。



应用程序服务器的流行程度,包括 Tomcat、JBoss、WildFly、Jetty、WebLogic、WebSphere、Glassfish

23. 你在开发当中和在生产环境中使用的应用程序服务器是否一样?

尽管存在明显的危险性,但出于便利性考虑,仍然有超过三分之一的受访者在开发当中使用的服务器与生产环境中使用的服务器不一样。令人惊讶的是,那些声称在开发中使用不同应用程序服务器(或者没有)的人实际上在生产环境中还使用了有各种各样的应用程序和服务器。


24. 你的主要应用程序(直接)依赖了多少个开源项目?

几乎四分之一的受访者公开表示他们不知道他们的项目中有多少依赖项。这可能是因为应用程序分布在复杂的构建系统中。从结果中可以看出,20 个受访者中只有不到 1 个不使用任何开源依赖项,72%的受访者表示使用了开源依赖项。如果不考虑那些不知道使用了多少依赖项的人,我们可以看到,20 个受访者中有 19 个(95%)在他们的应用程序中使用了开源依赖项。



使用了多少个开源依赖项?

平台和应用程序相关总结

  • 超过五分之三的开发人员使用 AWS;

  • 超过五分之二的开发人员使用容器;

  • 超过五分之二的开发人员不使用任何 CD 工具;

  • 五分之三的开发人员在他们的应用程序中使用了 JavaScript;

  • 几乎四分之一的开发人员也在他们的应用程序中使用了 Node;

  • 五分之二的开发人员使用了 Spring Boot;

  • 超过一半的开发人员在他们的应用程序中使用 Hibernate;

  • 几乎十分之三的开发人员在生产环境中使用 Oracle 数据库;

  • 五分之二的开发人员在生产环境中使用 Tomcat;

  • 四分之一的开发人员不知道他们的应用程序中有多少开源依赖项;

  • 20 位开发人员中有 19 位在他们的应用程序中使用了开源依赖项。

关于流程

25. 你的版本发布频率是怎样的?

令人担忧的是,近四分之一的受访者(24%)不知道他们的代码发布频率!这也可能是由于应用程序的复杂性,并且在不同的时间发布不同的服务。


几乎十分之一的受访者都有足够的勇气每天发布多次。大多数受访者每两周或一个月发布一次。超过十分之一的受访者每六个月发布一次。


26. 你的代码审计频率是怎样的?

大约一半的网站都进行代码审计,其中有四分之一每季度进行一次。有一半的受访者没有进行代码审计,想象一下这些代码库中可能存在的问题!


关于开发者

27. 你在哪里从事开发工作?

更多的受访者来自北美,不够我们也很高兴看到来自世界各地的受访者。


28. 你怎么形容自己?

我们可以看到绝大多数受访者都是技术人员,87%的受访者是开发人员、团队领导者或架构师。超过一半的人是软件开发人员。2%的 C 级别受访者也抽出时间参加我们的问卷调查。


29. 你如何评价你的安全专业知识?

安全通常被认为是一门暗黑艺术。很多开发人员只掌握了“足够”的安全知识来完成他们的工作,这意味着真正的专家是那些专门从事安全相关职业的人。由于开发人员拥有越来越多的应用程序安全责任,这已经成为一个热门话题。在我们的调查中,1%的受访者表示他们没有掌握任何安全知识,却仍然十分乐意使用 Struts 开发应用程序。也有 1%的受访者表示他们是真正的安全专家。有五分之三的受访者表示自己并非专家,但也不是新手,大多数人的安全知识掌握程度在 5 到 7 分之间。


30. 你多大了?

编程仍然是最适合年轻人的职业。38%的受访者年龄小于 35 岁,35%的受访者年龄介于 35 岁至 45 岁之间,只有 25%的受访者年龄大于 45 岁。调查数据显示了职责和年龄之间的相关性,中年以后的数字较低,部分原因是程序员进入了管理层。


31. 你有多少年的 Java 专业经验?

从图中可以看出,受访者的 Java 经验跨度比较大。结果非常有趣,中级开发人员的经验为 10 年,团队领导为 11 年,架构师为 14 年,C 级别的管理者为 12 年。


32. 你公司的规模是怎样的?

近 40%的受访者所在的公司员工少于 100 人,我们发现,Java 在初创公司和中小型企业中仍然发挥着重要作用。这一发现与 Java 作为企业级应用程序开发语言的观点有点不一致。


33. 你主要从哪里获取有关 Java 的信息?

StackOverflow 仍然是首选的网站,可以在上面提问并从答案中获取有用的信息。Oracle 的文档也是很好的参考资料。Java Magazine 为希望完全理解某个主题的读者提供了深度长文,而 YouTube 则以视频形式提供了相同的功能。DZone 和 InfoQ 都覆盖到了所有这些领域。(受访者可以选择多个答案。)


34. 你是 Java 用户组(JUG)成员吗?

JUG 仍然是未被充分利用的资源,只有五分之一的开发人员每年参加一次。三分之二的受访者不是 JUG 成员。如果说地理位置是一个影响因素,那么可以考虑加入虚拟 Java 用户组(https://meetup.com/virtualjug)。


35. 你对开源做了多少贡献?

GitHub 和其他代码存储库的存在有助于开发人员贡献代码,但仍然有超过一半的开发人员从未参与过开源项目。



英文原文:https://snyk.io/blog/jvm-ecosystem-report-2018


2018-11-15 16:558261
用户头像

发布了 731 篇内容, 共 433.8 次阅读, 收获喜欢 1997 次。

关注

评论

发布
暂无评论
发现更多内容

Animate 2024 for mac(An2024)v24.0.1中文激活版

影影绰绰一往直前

使用 Footprint Analytics 提升 Web3 项目的空投活动

Footprint Analytics

blockchain

开发苹果iOS应用后如何提交到App Store

雪奈椰子

实现一个简单的哈希映射功能

JYeontu

JavaScript 前端 哈希表 算法、

淘宝京东1688...等电商平台商品详情数据,淘宝京东1688商品详情 API 返回值说明

Anzexi58

API 文档

装配行业如何通过MES系统实现生产管理数字化

万界星空科技

制造业 生产管理系统 mes 万界星空科技 装配行业

Tower for Mac(强大的Git客户端)v10.5注册激活版

影影绰绰一往直前

一键生成个性化二维码:打造你的专属数字名片

JYeontu

JavaScript 前端 npm 插件 Node

参与DevData调研,共建国内首份研发效能基准线,免费获得“体检报告”!

思码逸研发效能

低代码与MES的结合--万界星空科技低代码平台

万界星空科技

低代码 低代码平台 mes 制造业生产管理系统 万界星空科技

【技术探讨】如何选择一款距离远的无线通信模块?

Geek_ab1536

✅被百度追着项目问,上亿数据,限制1G内存,如何去重?

派大星

Java 面试题 互联网大厂面试 数据去重

火山引擎ByteHouse:如何用OLAP为抖音精准推荐提效

Geek_2d6073

NFTScan | 02.26~03.03 NFT 市场热点汇总

NFT Research

NFT NFTScan nft工具

关于AI智能生成(AIGC),整理一下你该知道这些

Geek_ee6d52

人工智能 AIGC

Illustrator 2024 for Mac(AI2024领先的矢量图形软件)v28.3中文激活版

影影绰绰一往直前

CADintosh X for Mac(CAD制图软件)v8.8.6 (726)注册版

影影绰绰一往直前

Reader for mac(快速且简约的 PDF 查看器)v5.8激活版

影影绰绰一往直前

函数防抖?一个vue指令搞定

JYeontu

Vue 前端 vue指令 Vue组件库

如何通过ETL实现快速同步美团订单信息

RestCloud

美团 数据同步 ETL 数据集成 订单同步

想做大模型开发前,先来了解一下MoE

华为云开发者联盟

人工智能 华为云 大模型 华为云开发者联盟

装配制造业的MES系统中的物料齐套技术

万界星空科技

制造业 生产管理系统 mes 万界星空科技 装配行业

华为云云原生专家入选全球顶级开源组织CNCF技术监督委员会

Geek_2d6073

Translatium for Mac(强大的mac翻译软件)v42.0.1中文版

影影绰绰一往直前

Archicad 27 for Mac(3D建模软件)v27.1.2 (4060)激活版

影影绰绰一往直前

子线程如何获取Request

伤感汤姆布利柏

DRmare Tidal Music Converter Mac(一体式Tidal音乐转换器)v2.14.0直装版

影影绰绰一往直前

软件测试学习笔记丨SQL操作命令(库操作、表操作、表数据操作)

测试人

软件测试

漫画算法——二叉查找树的删除

梦倚栏杆

二叉树 删除 查找算法

INFINI Labs 产品更新 | Easysearch 1.7.1发布

极限实验室

console Gateway easysearch

千分位分隔?一个vue指令搞定

JYeontu

Vue 前端 vue指令 vue组件

JVM生态系统2018调查报道_编程语言_Andrew Binstock_InfoQ精选文章