每个Java开发人员都需要一个编程编辑器或IDE,它可以帮助编写Java和使用类库和框架的更多部分。确定最适合您的编辑器或IDE取决于几个方面,包括正在开发的项目的性质,您在组织中的角色,开发团队使用的过程以及您作为程序员的级别和技能。其他考虑因素是团队是否已对工具进行标准化以及您的个人偏好。

最常用于服务器端Java开发的三个IDE是IntelliJ IDEA,Eclipse和NetBeans。但是,这些并不是唯一的选择,本综述还将包括一些轻量级IDE。

对于本综述,我在Mac上为Intelli EE IDEA Ultimate 2018.3,Eclipse IDE 2018-09(用于Java EE开发人员)和Apache NetBeans(孵化)IDE 9进行了全新安装。我还查看了几个开源Java项目,以便我可以测试相同项目中的所有IDE。

基础知识:Java IDE需要什么

至少,您希望您的IDE支持Java 8和/或11(LTS版本),Scala,Groovy,Kotlin以及您经常使用的任何其他JVM语言。您还希望它支持主要的应用程序服务器和最流行的Web框架,包括Spring MVC,JSF,Struts,GWT,Play,Grails和Vaadin。您的IDE应与开发团队使用的任何构建和版本控制系统兼容; 示例包括Apache Ant与Ivy,Maven和Gradle,以及Git,SVN,CVS,Mercurial和Bazaar。为了额外的功劳,您的IDE应该能够处理堆栈的客户端和数据库层,支持嵌入式JavaScript,TypeScript,HTML,SQL,JavaServer Pages,Hibernate和Java Persistence API。

最后,您希望Java IDE能够轻松,优雅地编辑,构建,调试和测试您的系统。理想情况下,您不仅需要智能代码完成,还需要重构和代码指标。如果您在一家开展测试驱动开发的公司,您需要支持您的测试框架和存根。如果您的组使用故障单系统和CI / CD,则最好是IDE可以连接到它们。如果需要部署和调试容器和云,IDE应该可以帮助您这样做。

考虑到这个基础,让我们考虑竞争者。

IntelliJ IDEA

IntelliJ IDEA是功能和价格方面首选的Java IDE,有两个版本:免费社区版和带有附加功能的付费Ultimate版。

社区版旨在用于JVM和Android开发。它支持Java,Kotlin,Groovy和Scala; Android的; Maven,Gradle和SBT; 和Git,SVN,Mercurial,CVS和TFS。

用于Web和企业开发的Ultimate版本除了支持其他版本控制系统外,还支持Perforce; 支持JavaScript和TypeScript; 支持Java EE,Spring,GWT,Vaadin,Play,Grails和其他框架; 并包括数据库工具和SQL支持。

这个想法源于商业(终极版)将在专业桌面上占据一席之地,通过提高程序员的工作效率证明付费订阅的合理性。如果您作为Java开发人员每年赚取5万至10万美元的收益,那么在每年500美元的商业IDEA订阅中为您提供快速投资回报并不会带来很大的提高效率。随后几年,企业的价格会下降,创业公司和个人的价格会低得多,学生,教师,“Java冠军”和开源开发者都可以免费使用。

IntelliJ鼓励IDEA深入了解您的代码,开发人员工效学,内置开发人员工具以及多语言编程经验。让我们深入了解这些功能的含义,以及它们如何为您提供帮助。

intellij idea refactor screenshot 2018 11 25 15.06

图1. IntelliJ IDEA在编辑器中提供了各种上下文相关的操作,包括广泛的重构选项和与GitHub的集成。

深入了解您的代码

语法着色和简单代码完成是Java编辑器给出的。IDEA超越了它,提供“智能完成”,这意味着它可以弹出一个适用于当前环境的最相关符号列表。这些按您的个人使用频率排名。“链完成”更深入,并显示可通过  当前上下文中的方法或getter访问的适用符号列表  。IDEA还完成静态成员或常量,自动添加任何所需的import语句。在所有代码完成中,IDEA尝试猜测运行时符号类型,从中优化其选择,并根据需要添加类转换。

Java代码通常包含其他语言作为字符串。IDEA可以将SQL,XPath,HTML,CSS和/或JavaScript代码的片段注入Java String文字中。就此而言,它可以跨多种语言重构代码; 例如,如果在JPA语句中重命名类,则IDEA将更新相应的实体类和JPA表达式。

当您重构一段代码时,您通常要做的事情之一就是重构该代码的所有重复项。IDEA Ultimate可以检测重复项和类似的片段,并将重构应用于它们。

IntelliJ IDEA在加载代码时以及键入时分析代码。它提供检查以指出可能的问题,并且如果您愿意,还提供检测到的问题的快速修复列表。

开发人员工效学

IntelliJ设计了IDEA与开发人员的  创意流程 - 又名  “在区域中” - 记住。只需单击鼠标,图1左侧显示的Project工具窗口即可从视图中消失,这样您就可以专注于代码编辑器。编辑时要执行的所有操作都有键盘快捷键,包括在弹出窗口中显示符号定义。虽然学习捷径确实需要时间和练习,但最终它们成为第二天性。即使不知道快捷方式,开发人员也可以轻松快速地学习使用IDEA。

IDEA调试器的设计特别好。变量值显示在编辑器窗口中,位于相应的源代码旁边。当变量的状态发生变化时,其高亮颜色也会发生变化。

内置开发人员工具

IntelliJ IDEA为大多数主要版本控制系统提供统一的界面,包括Git,SVN,Mercurial,CVS,Perforce和TFS。您可以直接在IDE中执行所有更改管理。当我测试IDEA时,我希望源代码块中的最后一个更改会在编辑器窗口中显示为注释(就像在Visual Studio中一样)。事实证明,  有一个插件

IDEA还集成了构建工具,测试运行器和覆盖工具,以及内置终端窗口。IntelliJ没有自己的探查器,但它通过插件支持多个第三方探查器。其中包括由前IntelliJ首席开发人员创建的YourKit和VisualVM,后者是NetBeans探查器的重新打包版本。

当你没有源代码的类中发生神秘事情时,调试Java会很痛苦。IDEA附带了针对这些案例的反编译器。

Java服务器编程通常涉及使用数据库,因此IDEA Ultimate包括SQL和NoSQL数据库工具。如果您需要更多,可以使用专用的SQL IDE(DataGrip)作为全产品订阅的一部分,这只比IDEA Ultimate订阅的价格贵一点。

IntelliJ IDEA支持所有主要的JVM应用程序服务器,可以部署到服务器并在服务器中调试,从而为Enterprise Java开发人员解决了一个主要难点。IDEA还通过添加Docker工具窗口的插件支持Docker。(说到插件,IntelliJ有  很多。)

多语言编程

IDEA扩展了Spring,Java EE,Grails,Play,Android,GWT,Vaadin,Thymeleaf,Android,React,AngularJS和其他框架的编码协助。并非所有这些都是Java框架。除了Java之外,IDEA还可以理解许多其他语言,包括Groovy,Kotlin,Scala,JavaScript,TypeScript和SQL。如果你需要更多,目前有数百种IntelliJ语言插件,包括R,Elm,Go,Rust和D的插件。

Eclipse IDE

Eclipse是最受欢迎的Java IDE,它是免费和开源的,主要使用Java编写,尽管它的插件架构允许Eclipse以其他语言扩展。Eclipse起源于2001年,是一个IBM项目,用基于Java的可移植IDE替换基于Smalltalk的IBM Visual Age系列IDE。该项目的目标是遮蔽Microsoft Visual Studio,因此得名。

Java的可移植性有助于Eclipse跨平台:Eclipse可在Linux,Mac OS X,Solaris和Windows上运行。Java Standard Widget Toolkit(SWT)至少部分地负责Eclipse的外观和感觉,无论好坏。同样,Eclipse将其性能(或者,有些人说,缺少它)归功于JVM。Eclipse以其运行缓慢而闻名,这可以追溯到较旧的硬件和较旧的JVM。即使在今天,它也会感觉很慢,尤其是在安装了许多插件的情况下在后台进行自我更新时。

Eclipse中的部分开销是它的内置增量编译器,它在加载文件和更新代码时运行。这是一个非常好的事情,并在您键入时提供错误指示。

Eclipse Java项目独立于构建系统,还维护其内容的模型,其中包括有关Java元素的类型层次结构,引用和声明的信息。这也是一件好事,并且可以启用多个编辑和导航助手以及大纲视图。

当前版本的Eclipse是2018-09。我为Java EE开发人员安装了Eclipse IDE,但还有许多其他安装包,包括安装最小Eclipse SDK和仅在需要时添加插件的选项。然而,最后一个选项不适合胆小的人:在插件之间引入冲突并不难,实际上并没有    它们是不兼容的。

eclipse ide截图2018 11 25 12.05

图2.从左上角开始顺时针方向,我们在Eclipse工作台中看到了四个窗格:Project Explorer,Java编辑器,Java类概述以及问题和任务列表。

可扩展的工具支持

插件生态系统是Eclipse的优势之一,也是偶尔挫折的源头。在  Eclipse的市场 包含了超过1600解决方案,目前,社区提供的插件可能会或可能无法正常工作而告之。Eclipse插件仍然支持100多种编程语言和近200种应用程序开发框架。

大多数Java服务器也受支持:如果您从Eclipse定义新的服务器连接,您将进入供应商文件夹列表,在其下面您将找到大约30个应用程序服务器,包括9个版本的Apache Tomcat。商业供应商倾向于将他们的产品集中在一起:例如,Red Hat JBoss Middleware下只有一个项目,包括WildFly和EAP Server Tools,以及JBoss AS。

编辑,浏览,重构和调试

开发人员使用Eclipse的第一次体验可能令人不安,甚至令人困惑。这是因为您的第一个任务是适应Eclipse的工作空间,透视图和视图的概念架构,其功能取决于您安装的插件。例如,对于Java服务器开发,您可能会使用Java,Java EE和Java浏览视角; 包浏览器视图; 调试视角; 团队同步视角; 网络工具; 数据库开发视角; 和数据库调试透视图。实际上,一旦打开所需的视图,所有这些都将开始有意义。

在Eclipse中执行给定任务通常有多种方法。例如,您可以使用项目资源管理器和/或Java浏览透视图浏览代码; 你选择的是品味和经验。

Java搜索支持允许您查找Java包,类型,方法和字段的声明,引用和出现。您还可以使用快速访问进行搜索,并使用快速视图弹出类概述等内容。

错误注释和内容辅助支持添加方法和生成类。可以从代码模板生成公共代码模式,Eclipse可以自动生成和组织import语句。在Eclipse中重构Java支持23种操作,从常见的重命名操作到Martin Fowler的书中更加模糊的转换  。重构不仅可以交互方式执行,还可以通过重构脚本执行。

Eclipse支持本地和远程调试,假设您使用的是支持远程调试的JVM。调试是相当标准的:您通常设置断点,然后在调试透视图的选项卡中查看变量。您当然可以单步执行代码并计算表达式。

Eclipse提供了广泛的帮助和文档,具有不同的年龄,货币和实用程序。发现文档包含的图像与当前版本的软件不匹配,或者操作系统的击键与帮助中提到的击键不同,这并不罕见。我担心这是开源项目的常见问题之一:文档可能会使软件滞后数月甚至数年。由于生态系统如此之大,Eclipse不仅仅是文档问题的一部分。

NetBeans

在  NetBeans的Java IDE的  在1996年开始生活在布拉格一所大学的学生项目,成为商业产品在1997年,1999年被Sun收购,并发布了2000年开源这是最近捐献给了Apache,并已被接受作为一个孵化项目。

Oracle正在以块的形式转换代码; 初始丢弃只是代码的Java SE部分。您需要使用8.2库来获取您可能习惯使用的其他插件。NetBeans在切换期间出现的混乱可能解释了为什么NetBeans 9还不支持JUnit 5:此时集成仅在大纲阶段

当前版本9.0缺少我们在以前版本中预期的系统特定安装程序。我下载了二进制文件并将其解压缩。我很快发现需要安装nb-java,因为这个版本不能在Java 8上运行。但它确实支持JDK 8,9和10代码。它的编辑器,代码分析器和转换器可以帮助您升级应用程序以使用新的Java语言结构,例如lambdas,功能操作,方法引用和var类型。

netbeans ide截图2018 11 25 11.49

图3.这是NetBeans 9,从左上角顺时针显示了Projects,editor,output和Navigator窗口。输出中的错误是由NetBeans 9本机缺少Maven支持引起的,并且在我从NetBeans 8.2存储库添加Groovy工具包时得到修复。

编辑和重构

语言感知NetBeans编辑器在您键入时检测错误,并帮助您完成文档弹出窗口和智能代码完成。它看起来像Eclipse那样显着停顿,虽然略微超过了IntelliJ IDEA。NetBeans还提供了全面的重构工具,允许您在不破坏代码的情况下重构代码; 执行源代码分析; 并提供一系列广泛的提示,以快速修复或增强您的代码。NetBeans包含一个用于Swing GUI的设计工具,以前称为“Project Matisse”。

通过Inspect&Transform工具,您可以在自动修复代码的同时在代码库中运行检查。就个人而言,我总是确保在运行可以进行彻底更改的工具之前检查了所有代码并成功运行了所有单元测试; 我通过导致回归的自动“修复”不止一次被烧毁。

构建,调试和分析

NetBeans具有对Maven和Ant的良好内置支持,以及Gradle的插件。我很高兴地发现现有的Maven项目现在被视为“本机”,这意味着您只需打开它们而不是导入它们。NetBeans还包含Maven依赖项的性感(且有用)图形视图。

NetBeans Java调试器很好,尽管是传统的。单独的可视化调试器使您可以获取GUI快照并直观地探索JavaFX和Swing应用程序的GUI。NetBeans探查器非常适合理解CPU和内存使用,并且具有用于查找内存泄漏的良好工具。

比较三大Java IDE

多年来,我个人按照时间顺序使用了Eclipse,NetBeans和IntelliJ IDEA。每次切换后,我觉得一旦习惯了新的IDE,我的工作效率就提高了。即使曾经认为我已经坚定地转向IntelliJ,但有时候我不得不返回其他Java IDE,例如在Eclipse是唯一支持Android开发的IDE期间。(Android Studio是目前官方的Android IDE,基于IntelliJ IDEA。)

我有全职的Java开发人员朋友,他们使用并发誓每个三大IDE。特别是IntelliJ IDEA用户对他们的IDE忠诚,因为Visual Studio C ++和C#编码器都是他们的,并声称他们的生产力提高在使用后的几周内就会产生年度订阅的成本。NetBeans和Eclipse用户几乎都忠于他们的选择,有些人想知道为什么人们为IntelliJ付钱。

我倾向于建议新的Java编码器    使用Eclipse。尽管它是最受欢迎的Java IDE,但它在日常使用和维护IDE时都具有最陡峭的学习曲线和最大的混淆可能性。许多视角和视图提供了各种功能,但是从一个角度切换到另一个角度可能会刺激并扰乱您的流量。

Eclipse拥有任何IDE最大的插件生态系统,如果您安装了一组不兼容的插件,那么最大的趋势就是无法使用。可悲的是,我不得不删除我破坏的Eclipse安装,并且多年来至少有六次使用官方分发包重新开始。在这一点上,当新的Eclipse“发布列车”在6月问世时,我总是重新开始。

NetBeans对大多数人来说已经足够好了,并且有一个很好的分析器。我在紧要关头使用它,但我仍然喜欢IntelliJ IDEA Ultimate。

对于没有工具预算的新Java编码器,可以选择NetBeans和IntelliJ IDEA Community Edition。如果您使用很少或根本没有钱来编写Java服务器,那么NetBeans可能是更好的选择,除非您属于可以获得免费或打折版IntelliJ IDEA Ultimate的类别,例如作为学生或从事开源项目。

轻量级Java IDE

虽然大多数人最好使用IntelliJ,NetBeans或Eclipse开发Java,但仍有一些情况下您可能需要轻量级IDE,甚至是编程编辑器,如Sublime Text,emacs或vim,以及Java插件。

如果您正在寻找轻量级IDE来尝试,请考虑以下合理选项:

  • DrJava是一个用于编写Java程序的免费轻量级开发环境。它专为莱斯大学学生使用而设计,目前下载量超过300万。DrJava旨在促进测试驱动的软件开发。它包括一个智能程序编辑器,一个用于评估程序文本的交互窗格,一个源代码级调试器和一个单元测试工具。
  • BlueJ是一个免费的Java开发环境,专为伦敦国王学院的初学者设计。它得到了Oracle的支持。BlueJ有一个比NetBeans或Eclipse等专业环境更小更简单的界面,还有一本关于用BlueJ学习OOP的入门大学教科书。
  • JCreator是一个用于Windows的轻量级Java IDE,出于性能原因用C ++编写。付费专业版有调试器,Ant支持和代码向导; 免费的LE版本没有。然而,JCreator似乎自2015年以来没有更新过。
  • Eclipse Che是一个基于浏览器和云的IDE和开发人员工作区服务器。Che支持Java以及C ++,JavaScript,Python,PHP,Ruby和SQL。

用于选择Java IDE的基于项目的技巧

我已经描述了前三个Java IDE中的每一个的显着特征,并提供了一些轻量级替代品的一瞥。您需要根据个人开发需求和资源权衡此信息,以确定哪种IDE最适合您。除个人考虑外,还有基于项目的考虑因素。在许多情况下,最简单的方法是使用与开发团队其他人相同的IDE,但这并非完全必要。

例如,如果团队项目托管在GitHub上,那么如果您的IDE支持GitHub,您的生活将更加轻松。但这并不是绝对的要求:您始终可以使用GitHub客户端或git命令行来回切换到IDE。另一方面,您确实希望您的IDE支持团队采用的任何构建系统。例如,如果它是Maven,您不希望重新构建Ant中的构建系统以进行本地测试。幸运的是,三大Java IDE都支持Ant,Maven和Gradle,既可以开箱即用,也可以使用插件。轻量级IDE不一定如此。

您将希望IDE支持项目标准的JRE版本; 如果版本不匹配,您    遇到团队其他成员无法重现的错误。这不是你想要创造的情况。幸运的是,JRE不匹配通常是配置错误,而不是由于IDE中缺乏支持而导致的错误:当IDE尚未发布新Java版本的更新时,会出现异常情况。

如果您的IDE对项目中使用的框架和技术有很强的支持,那么它会有很大帮助。你可以不用这样做,但是,例如,如果IDE知道JPA语句如何与实体类和JPA表达式相关(如IntelliJ那样),那么你可能会花更少的时间在你的JPA相关代码上。如果IDE支持项目使用的测试框架和测试运行器,您将能够在不离开工作区的情况下进行测试。

您还希望IDE支持将Java应用程序部署到容器,特别是Docker容器,可以选择使用Kubernetes orchestration。直接支持您使用的公共云将使您的生活更加简单。如果您的IDE可以支持基于JVM的机器学习和深度学习框架,例如Spark.ML和H2O.ai,这是一个明确的优点。

最后,如果您的IDE可以与项目采用的任何票务和错误跟踪系统连接,这将有所帮助。同样,您可以使用JIRA的独立或Web客户端,但如果您可以直接从IDE查看票证,那么效率会更高。

结论

我为IntelliJ IDEA Ultimate做了一个很好的案例,许多人会认为它是现代Java IDE的凯迪拉克。虽然它不像Eclipse或NetBeans那样免费,但我相信生产力的提升值得每年订阅。对于刚开始的开发人员,或者那些不愿意付费的开发人员,我建议使用NetBeans over Eclipse。虽然Eclipse的插件生态系统曾经使它成为开发人员的首选,但今天它变得笨拙并且维护得很差。

我还谈到了轻量级的替代品,包括两个专为学生使用而设计的。这些值得尝试,如果您只是学习Java,如果您发现功能全面的IDE压倒性的,或者您只是喜欢轻量级的开发环境,那么它们可能是您的最佳选择。

原文链接:https://www.javaworld.com/article/3114167/choosing-your-java-ide.html