在IntelliJ中可能发生的事情在Eclipse中不可能发生?

我听说有人选择了其中一种方式,并对其中一种方式发誓。

作为一个Eclipse的忠实粉丝,但没有时间尝试IntelliJ,我很有兴趣从“前Eclipse用户”IntelliJ用户那里听到一些用IntelliJ可以做而用Eclipse不能做的具体事情。

请注意:这不是一个主观的问题,也不意味着变成一场IDE圣战。请为任何煽情的答案投票

237141 次浏览

IntelliJ具有从代码到jspx文档的智能感知和重构支持。

IntelliJ调试器有一个非常方便的特性,叫做“表达式计算”,这比eclipses pendant好得多。它有完整的代码完成,我认为它通常“更有用”。

IntelliJ有一些相当高级的代码检查(与FindBugs类似但又不同)。

虽然我在使用IntelliJ时非常想念FindBugs插件(Eclipse/FindBugs集成非常酷)。

在这里是IntelliJ支持的代码检查的官方列表

编辑:最后,IntelliJ有一个findbugs-plugin。它仍处于测试阶段,但代码检查和FindBugs的组合非常棒!

对我来说是一大堆小事。我觉得Eclipse中的一些宏和GUI布局很糟糕。我不能在Eclipse的不同窗口中打开多个项目。我可以打开多个项目,但它是基于视图的系统当我切换文件时,会在我周围交换一些东西。IntelliJ的代码检查似乎更好。它的弹出帮助来修复常见问题是很好的。很多简单的可用性东西,比如侧栏,我可以把鼠标悬停在一个热点上,它会告诉我一个方法的每个实现子类或者我正在实现的方法,以及从哪里实现的。

每当我不得不使用Eclipse时,或者看到别人使用Eclipse时,他们似乎可以做我在IntelliJ中可以做的大部分事情,但它花费的时间更长,而且更笨重。

CTRL-click在任何地方都适用

按下ctrl键,就可以找到定义对象的地方——不仅在Java代码中的Java类和变量中,而且在Spring配置中(可以单击类名、属性或bean名),在Hibernate中(可以单击属性名或类或包含的资源),只需单击一下,就可以从Java类导航到用作Spring或Hibernate bean的地方;点击包含的JSP或JSTL标签也可以,ctrl-click JavaScript变量或函数会将您带到定义它的位置,如果有多个位置,则会显示一个菜单,包括HTML或JSP文件中的其他. JS文件和JS代码。

自动完成许多语言

Hibernate

在HSQL表达式、Hibernate配置(包括类、属性和DB列名)、Spring配置中自动完成

<property name="propName" ref="<hit CTRL-SPACE>"

它会显示你可以注入到属性中的bean列表。

Java

Java代码中非常智能的自动完成:

interface Person {
String getName();
String getAddress();
int getAge();
}
//---
Person p;
String name = p.<CTRL-SHIFT-SPACE>

它只显示了getName ()getAddress ()toString ()(只有它们在类型上是兼容的),而getName ()在列表中是第一个,因为它有更相关的名称。EAP的最新版本8拥有更智能的自动补全功能。

interface Country{
}
interface Address {
String getStreetAddress();
String getZipCode();
Country getCountry();
}
interface Person {
String getName();
Address getAddress();
int getAge();
}
//---
Person p;
Country c = p.<CTRL-SHIFT-SPACE>

它会自动完成到

Country c = p.getAddress().getCountry();

Javascript

JavaScript中的智能自动完成。

function Person(name,address) {
this.getName = function() { return name };
this.getAddress = function() { return address };
}


Person.prototype.hello = function() {
return "I'm " + this.getName() + " from " + this.get<CTRL-SPACE>;
}

并且它只显示getName ()getAddress (),无论你在项目中的其他JS对象中如何使用may get*方法,并且按下ctrl键单击this.getName ()会将你带到了这个函数的定义位置,即使在你的项目中还有其他一些getName ()函数。

超文本标记语言

我提到过自动完成和按ctrl键点击文件路径,比如<script src="", <img src="",等等?

在HTML标签属性中自动完成。自动完成HTML标签的样式属性,包括属性名和值。在类属性中自动补全 输入<div class="<CTRL-SPACE>,它将显示你在项目中定义的CSS类列表。选择一个,按住ctrl点击它,你将被重定向到它定义的地方

轻松凸显自己的语言

最新版本有语言注入,所以你可以声明你自定义的JSTL标签通常包含JavaScript,它会突出显示其中的JavaScript。

<ui:obfuscateJavaScript>function something(){...}</ui:obfuscateJavaScript>

跨所有项目的索引搜索。

你可以使用任何Java类或方法的“查找用法”,它将发现它被使用的地方,不仅包括Java类,还包括Hibernate、Spring、JSP和其他地方。重命名方法重构不仅在Java类中重命名方法,而且在任何包含注释的地方重命名方法(它不能确定注释中的字符串是否真的是方法名,所以它会询问)。它只会找到你的方法,即使有同名的其他类的方法。 良好的源代码控制集成(SVN支持更改列表吗?IDEA对每个源代码控制都支持它们),能够用您的更改创建一个补丁,这样您就可以将您的更改发送给其他团队成员而无需提交

改进的调试器

当我在调试器的监视窗口中查看HashMap时,我看到逻辑视图-键和值,上次我在Eclipse中这样做时,它显示了带有哈希和下一个字段的条目-我并不是真正调试HashMap,我只是想查看它的内容。

春天,Hibernate配置验证

它在编辑时验证Spring和Hibernate配置,所以我不需要重新启动服务器来知道我拼错了类名,或者添加了构造函数参数,所以我的Spring cfg无效。

上次尝试时,我无法在Windows XP x64上运行Eclipse。

,它会建议你person.nameperson.address。 Ctrl-click person.name,它将导航到类的getName ()方法

输入Pattern.compile("");,把\\放在那里,点击CTRL-SPACE,看看关于你可以在正则表达式中放入什么的有用提示。你也可以在这里使用语言注入——定义你自己的接受字符串参数的方法,在IntelliLang选项对话框中声明你的参数是正则表达式——它也会给你自动补全。不用说,它突出了不正确的正则表达式。

其他功能

有几个特性我不确定Eclipse中是否存在。但是至少我们团队中使用Eclipse的每个成员,也使用一些合并工具来合并本地更改和来自源代码控制的更改,通常是WinMerge。我从来不需要它——合并到IDEA对我来说就足够了。通过3次点击,我可以看到源代码控制中的文件版本列表,通过3次点击,我可以比较以前的版本,或者以前和当前的版本,并可能合并。

它允许指定我需要WEB-INF\lib文件夹中的所有.jar,而不单独选择每个文件,因此当有人提交新的.jar到该文件夹时,它会自动选择它。

上面提到的可能是它所做的10%。我不使用Maven、Flex、Swing、EJB和其他很多东西,所以我不知道它对它们有什么帮助。但确实如此。

可能不是什么能不能做的问题,而是如何

例如,两者都有编辑器围绕码头面板的项目,类路径,输出,结构等。但在Idea中,当我开始输入所有这些自动折叠时让我专注于代码本身;在eclipse中,所有这些面板都保持打开,使我的编辑器区域非常小,大约是总可视区域的1/5。所以我必须抓住鼠标,点击来最小化这些面板。在日食中,整天这样做是一种非常令人沮丧的经历。

视图输出窗口发生了完全相反的事情。在Idea中,运行一个程序会带来输出窗口/面板来查看程序的输出,即使它之前是最小化的。在eclipse中,我不得不再次抓住鼠标,寻找输出选项卡并单击它来查看我的程序输出,因为输出窗口/面板只是另一个窗口,就像所有其他窗口一样,但在Idea中,它以一种特殊的方式处理:“如果用户想要运行他的程序,很可能他想要看到该程序的输出!”当我编写它时,它看起来很自然,但是eclipse在这个基本的用户界面概念上失败了。

可能在eclipse中有一个快捷方式(编辑时自动隐藏输出窗口,运行程序时自动显示),但由于其他几十个功能,快捷方式必须在论坛,在线帮助等中寻找,而在Idea中则更“自然”一些。

这可以重复几乎所有的功能,自动完成,自动换行,快速文档查看,一切。我认为在Idea中的用户体验要比在eclipse中的用户体验愉快得多。那么,“快乐地发展”这句格言就成为现实了。

Eclipse可以处理更快的大型项目(+300个jar和+4000个类),我认为IntelliJ Idea 8正在处理这个问题。

当然,所有这些都是主观的。我们如何衡量用户体验?

结构搜索和替换。

例如,搜索如下内容:

  System.out.println($string$ + $expr$);

其中$string$是一个文字,$expr$是my.package.and.Class类型的表达式,然后替换为:

  $expr$.inspect($string$);

如果你把光标放在一个方法上,那么CTRL + SHIFT + I将弹出方法实现。如果方法是interface方法,那么你可以使用上下箭头来循环实现:

Map<String, Integer> m = ...
m.contains|Key("Wibble");

|的位置(例如)您的光标所在的位置。

IntelliJ做了而Eclipse没有做的两件事对我来说非常有价值:

方法分隔符:方法之间那些模糊的灰色线条使代码更具可读性

文本抗锯齿:使代码在IDE中看起来很漂亮

显示导航栏ALT-Home。

一个非常有用的特性是能够部分构建Maven反应堆项目,以便只包括您需要的部分。

为了使这一点更清楚,考虑一个WAR文件集合的情况,其中有许多公共资源(例如JavaScript, Spring配置文件等)在它们之间使用覆盖技术共享。如果你正在处理一些web页面(在Jetty中运行),并且想要更改一些保存在单独模块中的覆盖代码,那么你通常需要停止Jetty,运行Maven构建,再次启动Jetty并继续。Eclipse和我使用过的几乎所有其他IDE都是这样。在IntelliJ中则不是这样。使用项目设置,您可以定义希望包含在后台构建中的模块的哪个方面。因此,您最终会得到一个看起来无缝的流程。对项目中的几乎任何代码进行更改,在刷新浏览器后就可以立即使用这些代码。

非常简洁,而且非常快。

我无法想象在没有它的情况下,在像YUI这样的东西中编写一个返回到DWR/SpringMVC的前端。

我经常使用的一件事是设置断点,然后控制它的功能。(在我的上一份工作中,大多数人都使用Eclipse……我记得我很惊讶,没有人能在Eclipse中找到如何做到这一点。)

例如,可以让断点实际上不停止,而只是将消息记录到控制台。这意味着,我不必用“System.out.println(…)”乱写代码,然后重新编译。

别忘了“和剪贴板比较”。

这是我在IntelliJ中一直使用的,而在Eclipse中没有对应的东西。

我不记得在Eclipse中是否可以实现字/行/方法/类换行

在Intellij Idea中使用Ctrl + W

其他一些事情:

  • 传播参数/异常时 改变方法签名,非常 便于深度更新方法 在调用堆栈
  • 作为参数传递给jdbc调用的字符串中的SQL代码验证 (和整个新捆绑 语言注入东西)
  • 实现在/覆盖在图标的界面&类(及其方法)和 智能实现导航 (Ctrl+Alt+Click或Ctrl+Alt+B)
  • EJB 2.1接口和bean类之间的链接 (包括重构支持);老 一个,但仍然非常有价值 当工作在较老的项目

Idea 8.0有可爱的ctrl + shift +空间 x 2,它执行以下自动完成:

 City city = customer.<ctrl-shift-space twice>

解析为

 City city = customer.getAddress().getCity();

通过任何级别的getter /setter。

我使用intellij而不是eclipse的原因只有一个:可用性

无论是调试、重构、自动完成…Intellij更容易使用一致的键绑定,可用的选项等。在特性方面,intellij很难赶上Eclipse,因为后者比intellij有更多可用的插件,而且很容易扩展。

我在IntelliJ中一直使用的东西是在我输入时重构。我用两种ide重写了打印输出的类(最初是在eclipse中编写的),用IntelliJ编写相同的类比用eclipse少了大约40%的按键/鼠标点击。

除非Eclipse对不完整的代码段支持同样多的重构,否则我不会使用它。

下面是IntelliJ 8.0/8.1 [http://www.jetbrains.com/idea/features/index.html] .0]中的一个更长的特性列表

多得多的重构。

我没有用IntellijIdea编写过很多代码,但在IntellijIdea中,你可以看到括号(如果,尝试/捕捉,循环等等)之间的代码块从哪里开始,从哪里结束。

在Eclipse中(我在Eclipse 3.2中编码),您只能手动识别块。

回答的序言:我对Eclipse的使用是有限的。我们需要一个Java IDE在Windows和Mac上都能运行,而Mac的移植速度越来越慢。这是几年前的事了,我相信现在没问题了。但这正是我们转向IntelliJ的原因,我们对它很满意。

现在是我的答案:我还没有看到提到的一个很大的区别是,IntelliJ/Jet Brains的技术支持更好。我们向JetBrains发送电子邮件,并在不到一个小时内得到明确的答复。寻找Eclipse问题的答案通常会得到“你这个愚蠢的白痴”的答案(通常是一小部分回答),同时还有大量有见解的、有帮助的回答。但要得到真正的答案还需要一些梳理。

我在IntelliJ中最喜欢的快捷方式是“转到符号”,这在Eclipse中是没有对应的(我发现的)。CTRL-ALT-SHIFT-N让你开始从整个项目中输入和整理类、方法名、变量名等。

引入变量。(Windows上的Ctrl + Alt + V, OSX上的Cmd + Alt + V)

假设你调用一个方法service.listAllPersons() 点击Ctrl + Alt + V输入,方法调用返回值的变量被插入:

List<Person> list = service.listAllPersons();

节省输入,并且不必检查所调用方法的返回类型。在使用泛型时尤其有用,例如:

new ArrayList<String>()

(引入变量)

ArrayList<String> stringArrayList = new ArrayList<String>();

(当然,你可以在按输入之前轻松地更改变量的名称)

从Maven POM打开一个项目。 只需选择“打开项目…”导航到你的顶级pom.xml,并按Enter:) NetBeans现在也有这个特性了

我最近发现IntelliJ IDEA与Eclipse相比至少有两个优点。

如果试图在JSP代码编辑器中使用代码格式化,JSP脚本就会出错。Eclipse变得有点疯狂,它到处发布随机的代码片段。IDEA表现得很好。

另一件事是在JBoss服务器上部署应用程序的速度。IntelliJ正在替换JBoss tmp文件夹中的应用程序,因此重新部署非常快。Eclipse WTP正在替换deploy文件夹中的应用程序,而后者的持续时间要长得多。

Intellij有一个比subversion或Subclipse优秀得多的SVN插件,而且它是有效的!我们在使用Eclipse合并源文件上所浪费的时间是无法想象的。对于IntelliJ,这不是一个问题,因为插件可以帮助你更多。

此外,Subclipse插件也不可靠——我们经常遇到插件认为其他开发人员没有将任何代码签入SVN的情况,但确实存在——CI服务器已经处理了它们!

对我来说,它是IDEA的maven支持,特别是在版本9中是首屈一指的。项目与maven模型的动态同步非常棒,使开发变得愉快。

有很多事情是idea用更简单的方法解决的,或者没有等价的方法:

  • 自动完成动作:做ctrl+shift+a你可以调用任何想法的动作从键盘不记得它的组合键…想想gnome-do或launchy在窗户里,你就明白了!此外,该特性支持camel套管缩写;)

  • 架子:让您轻松地将一些代码片段分开,然后通过diff查看器检查它们。

  • 当地历史:管理得更好,也更简单。

  • SVN注释和历史记录:检查起来更简单,而且您可以很容易地看到整个源文件的这一部分的历史记录。

  • 自动补全所有地方,例如求值表达式和断点条件窗口。

  • Maven集成…简单得多,而且整合得很好。

  • 重构更接近于手工操作,例如循环插入、换行/强制转换、重命名和添加变量。

  • 找一个强大而有条理的人。即使在大型项目中

  • 在一个大项目的几个分支中同时工作非常稳定(作为一个1.5Gb的bug修复者,并且需要同时在它们中工作,idea显示了其坚如磐石的能力)

  • 更简洁的界面…

  • 而且,只使用键盘使用更简单,省去了使用鼠标进行许多简单操作的需要,节省了你的时间,让你更专注于代码……重要的地方!

现在,作为开源的…Idea的用户群将呈指数级增长。

数据流分析:过程间反向流分析和正向流分析,如在这里所述。我的经验是基于Community Edition,它在数据流分析方面做得相当好。当代码非常复杂时,它在少数情况下会失败(拒绝做任何事情)。

< p > VIM模拟器。这个插件在IDEA中编辑文件时提供了几乎完整的vi/vim/gvim仿真。 支持以下功能:
  • 运动键
  • 删除/修改
  • 插入模式命令
  • 标志着
  • 寄存器
  • VIM撤销/重做
  • 可视模式命令
  • 一些Ex命令
  • Some:设置选项
  • 用于搜索和搜索/替换的完整VIM正则表达式
  • 测量
  • 命令行历史记录
  • 搜索历史记录
  • 跳转列表
  • VIM提供帮助
  • < / ul > < / p >

    http://plugins.jetbrains.net/plugin/?id=164中关于这个插件的一些注释

    因为这个插件,我看不到任何其他ide。 两全其美……太棒了! 这就是我在所有ide中所缺少的。

就这篇文章而言,我的时机可能有点不对,但我必须做出回应。

我是一个超级日食迷——从它第一次出现就开始使用它。一个朋友告诉我(10多年前),这将是一个播放器。他是对的。

然而!我刚刚开始使用IntelliJ,如果你还没有看到或使用变更列表——你错过了编程的天堂。

跟踪我更改的文件(在我的开发分支alclearcase上)的能力是我在eclipse插件中寻找的东西。Intellij在一次提交中跟踪您的所有更改,非常简单。您可以使用自定义列表隔离已更改的文件。我将它用于必须在本地唯一的配置文件,但当我同步或与存储库进行比较时,会不断地标记它们——将它们列在更改列表下,我可以监视它们,但巧妙地将它们隐藏起来,以便专注于我正在进行的实际添加。

此外,还有一个提交日志插件,可以输出那些没有与错误跟踪软件集成的SCCS的所有更改的文本。将日志粘贴到票据的工作历史记录中可以捕获文件、它们的版本、日期/时间和分支/标记。太酷了。

我打赌,所有这些都可以通过eclipse中的插件(或未来的增强)来支持;然而,Intellij使这变得轻而易举。

最后,我真的很高兴主流对这款产品的喜爱——按键,所以它很痛苦,但很有趣。

有一件事IntelliJ做得比Eclipse好得多,那就是清空你的口袋!

然而,我确实更喜欢使用它,它比Eclipse有一个很大的优势,就是它与文件系统同步的方式,对于大项目和慢速的计算机(是的,在工作环境中,PC的速度比我们家里的慢得多),Eclipse似乎与IntelliJ相比似乎更快,尽管初始索引时间较慢。

IntelliJ社区版显然可以免费使用它,但你很快就会想要那些额外的重构和CC版不包含的小东西。

在我看来,这通常是一个更好的用户体验,但是否值得这个成本是每个开发者自己要回答的问题。

但是让我们感激我们现在有三个很棒的Java ide, NetBeans一直在变得更好。

在我看来,其中一个优点是依存结构矩阵: http://www.jetbrains.com/idea/features/dependency_analysis.html#link0 < / p > 在Lattix的网站上(一个独立的产品)有一个关于DSM使用和好处的很好的介绍: http://www.lattix.com/files/dl/slides/s.php?directory=4tour < / p >

Alt +插入在列模式下编辑文本。

目前,它是唯一一个可以将标签撕下到另一个窗口。当你有更多的屏幕时很方便。

抱歉,如果这已经涵盖了,但简单地有“变化”标签在那里,我可以看到我的本地变化,传入的变化,远程变化只是简单的东西,我不能没有。在Eclipse中,我找不到这样的特性!

另外,像中间点击绑定到“开放声明”这样简单的事情是一个很好的UI添加——我也看不到在Eclipse中实现的东西。

在我工作的地方只有Eclipse,但我正在认真考虑购买个人的Idea许可证....

首先,我喜欢intellij。它至少有100个eclipse所缺乏的特性。在重构、重命名、移动和其他已经提到过的东西时,我所说的可靠性和智能程度是任何夸张都无法形容的。

但是,有一件事intellij不允许,而eclipse做到了。它不允许在同一个vm下同时运行多个项目。

当你有独立的前端、中间、核心、代理项目时…等等,它们都必须相互交互,你不能同时快速修改和调试。我目前处理这个问题的唯一方法是使用ant脚本在依赖的项目中部署和更新jar,或者使用maven。

Eclipse允许在一个ide vm实例下调试多个项目。

在IntelliJ中,您可以通过“最后编辑位置”跳过最后编辑位置的历史。Eclipse也有类似的特性,但是Eclipse只返回到编辑位置的一个级别。

拥有历史记录而不仅仅是Eclipse提供的一个级别是一个很好的生产力特性:它充当了一种自动书签的形式,因为您经常希望跳转回您进行更改的地方。我每天都要使用这个功能几次,当我被要求使用Eclipse来做某些事情时,我感到没有这个功能的痛苦。

因为有了新的Android Studio,我试着改用IntelliJ。但我现在很失望。我使用Eclipse的代码Recommanders插件。下面是Eclipse如此出色的一个简单示例:

我想创建一个新的SimpleTimeZoneSimpleTimeZone没有带零参数的构造函数。

Ctrl +空格在Eclipse

enter image description here

Ctrl +空格在IntelliJ

enter image description here

在IntelliJ中,我没有得到SimpleTimeZone具有哪种构造函数的信息。

在Eclipse中的输入之后

enter image description here

我得到先前选择的构造函数,其中填充了预定义的变量名。我可以看到每个参数的类型。使用代码推荐器,Eclipse根据先前在当前作用域中定义的变量类型猜测正确的构造函数,并用这些变量填充构造函数。

在IntelliJ中输入之后什么都没有发生。构造函数是空的。我必须按Ctrl + P才能看到预期的参数。

enter image description here

两者有许多不同的特性和工作流程,这在所有的答案中都很明显。然而,我认为在决定使用哪种框架时,也应该考虑使用每种工具所能提高的总体生产力。

我是Netbeans和Eclipse的忠实粉丝,并且已经使用它们很多年了。它们都是很好的工具,根据您正在做的事情,您可能想要选择其中一个。

然而,大约六个月前,当我在一个复杂的java web项目中工作时,由于js的自动完成错误,我被迫寻找Eclipse的替代品。我是如此绝望,我正在考虑回到一个简单的文本编辑器为我的js代码!!

我只是碰巧遇到了Intellij Idea(不幸的是没有时间研究工具)。

虽然需要一些时间来适应Idea的做事方式,除了特殊的功能之外,在我看来,它从左到右的小事情上提供的生产力提高是最大的资产。它更适合我,我现在是Idea Ultimate的付费客户。一旦你习惯了这一点,就很难再去做别的事情了。

没有什么比免费更好的了,我是开源的忠实粉丝,但最终如果你以开源为生,那么每次都能更快地完成任务。

我认为你可以坚持使用这两个ide中的任何一个。 不要“担心在您没有使用的IDE中错过一个巨大的好处”的最好迹象是我们在Eclipse爱好者和IntelliJ爱好者之间看到的很长的争论。这是一个很好的迹象,双方拥有几乎相同的力量,这使得这场长期的讨论得以幸存。< / p >