JVM生态系统2018调查报道(22)

发布于2019-04-21 20:28:36

这份调查报告的主要目的是为广大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相关总结

关于工具

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

工具相关总结

关于平台

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%)在他们的应用程序中使用了开源依赖项。


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

平台和应用程序相关总结

关于流程

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