这份调查报告的主要目的是为广大 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
评论