【51CTO.com快译】就因为某个工具是***的,并不意味着它就是“***的”。在编程领域,什么是***的取决于具体环境。然而,在一批类似的工具当中选择时,人气或受欢迎程度无疑是个重要的衡量标准。倒不是人气本身增添了工具的价值,而是说某个工具的更庞大社区带来了更丰富的资源和支持。
流行的工具更容易上手,因为有很多人可以帮助你使用它。而流行的开源工具往往代码错误较少,因为有更多双眼睛盯着代码,更多的人在数量更多的场景下测试代码。
所以,虽然始终有Apache和Nginx(这是两种Web服务器)这样的竞争对手:Apache用在数量多得多的网站上,但是Nginx更常被知名网站所使用,这意味着Nginx被一些最出色的工程团队所使用――在许多情况下,人气可能是工具之间的关键区别因素之一。
本文涵盖了你在开发Java应用程序时需要的大部分重要工具,包括每个类别,提供了***的工具,还提供了“次流行的工具”,并附有一些背景介绍和来自Java社区调查的引言,证实了这些排名。Java初学者应看一下所有这些***工具,进一步熟悉整个生态系统。
语言版本
***的:Java 8
次流行的:Java 7
Java 8可能是任何新版本中采用速度最快的。这可能是由于,Java 8带来了期待已久的现代语言功能,比如lambda表达式,缓解了Java经常饱受诟病的冗长啰嗦这一缺点。性能提升也是一大方面。
虽然现在新的Java应用程序和主要的应用程序是用Java 8编写的,但大量现有的Java应用程序依然使用Java 7或6。
我不会比较Java EE和Spring孰优孰劣,因为这方面的统计数字始终存在争议,而两者的用户数量似乎旗鼓相当。使用其中一种语言的约三分之一的开发人员同时还使用另一种语言。
编辑器或IDE
***的:Eclipse和IntelliJ IDEA(存在争议)
次流行的:Netbeans
Eclipse和Netbeans都是免费、开源的。Eclipse以庞大的社区和丰富的插件(易于编写)而家喻户晓,这让Eclipse平台具有无比强大的扩展性,但是载入速度缓慢、有时比较笨拙。Netbeans的不同之处在于结合了一些特性,比如默认情况下就与Maven和Git整合起来。IntelliJ拥有商业产品的那种性能和成熟。它有免费版和收费版。
Web框架
***的:AngularJS和SpringMVC
次流行的:Java Server Faces(JSF)
虽然三分之二的调查显示Spring MVC比Java Server Faces(JSF)更有优势,但DZone的大规模调查显示,Spring MVC和JSF其实难分伯仲。这种比较可能不再重要,因为JavaScript框架正在大举进入到许多流行的web堆栈。有一项调查询问AngularJS的使用相比纯粹的Java Web框架怎样,结果发现AngularJS在前端方面比***的Java框架更有优势。
应用服务器
***的:Tomcat
次流行的:Wildfly
多年来,Tomcat一向是使用最广泛的Java应用服务器。它是轻量级应用服务器,并不试图实现所有的Java EE规格。在一些调查中,另一种轻量级应用服务器Jetty领先***的、支持Java EE的应用服务器Wildfly。对简单的Java应用程序而言,Tomcat显然是领头羊;轻量级应用服务器无疑是微服务架构方面的***选择。
测试框架
单元测试
***的:JUnit
事实上的Java单元测试框架。
模拟测试
***的:Mockito
它显然是Java 模拟测试框架中的佼佼者。
自动化浏览器Web测试
***的:Selenium
Selenium可自动化测试浏览器。开发人员经常结合测试框架来使用这个工具,进行大规模的Web应用程序测试。
行为驱动开发(BDD)测试
***的:Cucumber-JVM和Spock
Cucumber起初是个Ruby项目,但是现在已支持各大编程语言。除了Java外,Spock还支持JVM语言Groovy。它还能处理Mockito能处理的大部分工作。
版本控制系统
***的:Git
次流行的:Subversion
记住:Git比仅仅使用GitHub及其版本控制约定来得活。Git似乎基本上赢得了版本控制大战的胜利,而大多数Subversion和CVS用户是只好使用一套遗留工具的开发人员。
持续集成
***的:Jenkins
次流行的:暂无
这是显然存在领头羊的另一个方面。在过去的五年间,Jenkins灵活的插件系统让它逐渐成为霸主。不使用任何持续集成服务器的人比使用Jenkins的任何一个竞争对手的人要多。实力最接近的下一个竞争对手是Bamboo。
数据库
***的:OracleDB
次流行的:MySQL
你在选择数据库时比本文介绍的其他许多工具更依赖具体环境。除了庞大的列式数据库外,你可能还需要轻型的键值存储数据库,这取决于你在构建的应用程序。对于大多数应用程序来说,关系数据库仍能满足要求,这就是为什么你看到两种关系数据库跻身Java工具榜单的前列。
Oracle是本文中为数不多的商业软件之一,这意味着它有许多“企业级”功能。如果你偏爱开源,MySQL或甚至SQLite是合理的选择。
持久API及/或对象关系映射(ORM)
***的:Java持久API(JPA)/hibernate
次流行的:Java数据库连接API(JDBC)
Hibernate太流行了,几年前就在Java持久API规范当中实现了标准化。
静态代码分析
***的:FindBugs
次流行的:SonarQube
这两个工具的范围大不一样,所以很难比较。FindBug是一个较简单的静态代码分析工具,而SonarQube是个完整的平台,可用于代码质量分析、语法检查和代码度量。
语法检查
***的:Checkstyle
次流行的:Eclipse
主要的Java IDE都有这项功能,但是如果你需要专门用于语法检查的另一个程序,Checkstyle倒是个不错的选择。
工件管理
***的:Sonatype Nexus
次流行的:JFrog Artifactory
许多开发人员并不使用工件库对JAR、WAR、库和整个应用程序进行版本管理。但是他们在这么做时,Nexus更受用户的青睐。两者都是商业软件。Apache Archiva是个开源工具。
依赖注入
***的:Spring Framework DI
次流行的:Google Guice
Spring框架在依赖注入方面做得不赖,但是谷歌的开发人员也开发了一款流行的工具:Guice。Dagger 的人气比不上两者,但它是新工具,用户越来越多,尤其是在安卓开发方面。热门游戏《Pokémon Go》用的就是它。
性能分析
Java分析
***的:VisualVM
次流行的:暂无
为数不少的Java开发人员并不使用任何性能分析工具(可能将性能问题交给不同的团队去考虑)。YourKit是替代VisualVM的另一种流行的工具。
载入测试
***的:JMeter
次流行的:LoadRunner
除了这两款工具外,还有一大批的载入测试工具,所以务必要调研这个市场。JMeter是开源工具,LoadRunner是商业产品。商业产品的主要优点是它为在云端运行测试提供了众多服务。
构建自动化和依赖管理
***的:Maven
次流行的:Gradle
虽然Maven是明显的领头羊,但是Gradle依然使用广泛,是一种仅次于Maven的构建工具,它还是安卓平台的标准构建工具。
日志库
***的:Log4j
日志库方面的次流行工具并不明确,因为这个工具类别方面开展的研究比较少。
原文标题:The most popular Java tools for every phase of development,作者:Mitch Pronschinske
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】