我听说有人选择了其中一种方式,并对其中一种方式发誓。
作为一个Eclipse的忠实粉丝,但没有时间尝试IntelliJ,我很有兴趣从“前Eclipse用户”IntelliJ用户那里听到一些用IntelliJ可以做而用Eclipse不能做的具体事情。
请注意:这不是一个主观的问题,也不意味着变成一场IDE圣战。请为任何煽情的答案投票。
IntelliJ具有从代码到jspx文档的智能感知和重构支持。
IntelliJ调试器有一个非常方便的特性,叫做“表达式计算”,这比eclipses pendant好得多。它有完整的代码完成,我认为它通常“更有用”。
IntelliJ有一些相当高级的代码检查(与FindBugs类似但又不同)。
虽然我在使用IntelliJ时非常想念FindBugs插件(Eclipse/FindBugs集成非常酷)。
在这里是IntelliJ支持的代码检查的官方列表
编辑:最后,IntelliJ有一个findbugs-plugin。它仍处于测试阶段,但代码检查和FindBugs的组合非常棒!
对我来说是一大堆小事。我觉得Eclipse中的一些宏和GUI布局很糟糕。我不能在Eclipse的不同窗口中打开多个项目。我可以打开多个项目,但它是基于视图的系统当我切换文件时,会在我周围交换一些东西。IntelliJ的代码检查似乎更好。它的弹出帮助来修复常见问题是很好的。很多简单的可用性东西,比如侧栏,我可以把鼠标悬停在一个热点上,它会告诉我一个方法的每个实现子类或者我正在实现的方法,以及从哪里实现的。
每当我不得不使用Eclipse时,或者看到别人使用Eclipse时,他们似乎可以做我在IntelliJ中可以做的大部分事情,但它花费的时间更长,而且更笨重。
按下ctrl键,就可以找到定义对象的地方——不仅在Java代码中的Java类和变量中,而且在Spring配置中(可以单击类名、属性或bean名),在Hibernate中(可以单击属性名或类或包含的资源),只需单击一下,就可以从Java类导航到用作Spring或Hibernate bean的地方;点击包含的JSP或JSTL标签也可以,ctrl-click JavaScript变量或函数会将您带到定义它的位置,如果有多个位置,则会显示一个菜单,包括HTML或JSP文件中的其他. JS文件和JS代码。
在HSQL表达式、Hibernate配置(包括类、属性和DB列名)、Spring配置中自动完成
<property name="propName" ref="<hit CTRL-SPACE>"
它会显示你可以注入到属性中的bean列表。
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中的智能自动完成。
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="",等等?
最新版本有语言注入,所以你可以声明你自定义的JSTL标签通常包含JavaScript,它会突出显示其中的JavaScript。
<ui:obfuscateJavaScript>function something(){...}</ui:obfuscateJavaScript>
当我在调试器的监视窗口中查看HashMap时,我看到逻辑视图-键和值,上次我在Eclipse中这样做时,它显示了带有哈希和下一个字段的条目-我并不是真正调试HashMap,我只是想查看它的内容。
它在编辑时验证Spring和Hibernate配置,所以我不需要重新启动服务器来知道我拼错了类名,或者添加了构造函数参数,所以我的Spring cfg无效。
上次尝试时,我无法在Windows XP x64上运行Eclipse。
,它会建议你person.name或person.address。 Ctrl-click person.name,它将导航到人类的getName ()方法
输入Pattern.compile("");,把\\放在那里,点击CTRL-SPACE,看看关于你可以在正则表达式中放入什么的有用提示。你也可以在这里使用语言注入——定义你自己的接受字符串参数的方法,在IntelliLang选项对话框中声明你的参数是正则表达式——它也会给你自动补全。不用说,它突出了不正确的正则表达式。
Pattern.compile("");
有几个特性我不确定Eclipse中是否存在。但是至少我们团队中使用Eclipse的每个成员,也使用一些合并工具来合并本地更改和来自源代码控制的更改,通常是WinMerge。我从来不需要它——合并到IDEA对我来说就足够了。通过3次点击,我可以看到源代码控制中的文件版本列表,通过3次点击,我可以比较以前的版本,或者以前和当前的版本,并可能合并。
它允许指定我需要WEB-INF\lib文件夹中的所有.jar,而不单独选择每个文件,因此当有人提交新的.jar到该文件夹时,它会自动选择它。
WEB-INF\lib
上面提到的可能是它所做的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方法,那么你可以使用上下箭头来循环实现:
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
其他一些事情:
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()
List<Person> list = service.listAllPersons();
节省输入,并且不必检查所调用方法的返回类型。在使用泛型时尤其有用,例如:
new ArrayList<String>()
(引入变量)
ArrayList<String> stringArrayList = new ArrayList<String>();
(当然,你可以在按输入之前轻松地更改变量的名称)
我最近发现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,它在数据流分析方面做得相当好。当代码非常复杂时,它在少数情况下会失败(拒绝做任何事情)。
http://plugins.jetbrains.net/plugin/?id=164中关于这个插件的一些注释
就这篇文章而言,我的时机可能有点不对,但我必须做出回应。
我是一个超级日食迷——从它第一次出现就开始使用它。一个朋友告诉我(10多年前),这将是一个播放器。他是对的。
然而!我刚刚开始使用IntelliJ,如果你还没有看到或使用变更列表——你错过了编程的天堂。
跟踪我更改的文件(在我的开发分支alclearcase上)的能力是我在eclipse插件中寻找的东西。Intellij在一次提交中跟踪您的所有更改,非常简单。您可以使用自定义列表隔离已更改的文件。我将它用于必须在本地唯一的配置文件,但当我同步或与存储库进行比较时,会不断地标记它们——将它们列在更改列表下,我可以监视它们,但巧妙地将它们隐藏起来,以便专注于我正在进行的实际添加。
此外,还有一个提交日志插件,可以输出那些没有与错误跟踪软件集成的SCCS的所有更改的文本。将日志粘贴到票据的工作历史记录中可以捕获文件、它们的版本、日期/时间和分支/标记。太酷了。
我打赌,所有这些都可以通过eclipse中的插件(或未来的增强)来支持;然而,Intellij使这变得轻而易举。
最后,我真的很高兴主流对这款产品的喜爱——按键,所以它很痛苦,但很有趣。
有一件事IntelliJ做得比Eclipse好得多,那就是清空你的口袋!
然而,我确实更喜欢使用它,它比Eclipse有一个很大的优势,就是它与文件系统同步的方式,对于大项目和慢速的计算机(是的,在工作环境中,PC的速度比我们家里的慢得多),Eclipse似乎与IntelliJ相比似乎更快,尽管初始索引时间较慢。
IntelliJ社区版显然可以免费使用它,但你很快就会想要那些额外的重构和CC版不包含的小东西。
在我看来,这通常是一个更好的用户体验,但是否值得这个成本是每个开发者自己要回答的问题。
但是让我们感激我们现在有三个很棒的Java ide, NetBeans一直在变得更好。
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如此出色的一个简单示例:
我想创建一个新的SimpleTimeZone。SimpleTimeZone没有带零参数的构造函数。
SimpleTimeZone
Ctrl +空格在Eclipse
Ctrl +空格在IntelliJ
在IntelliJ中,我没有得到SimpleTimeZone具有哪种构造函数的信息。
在Eclipse中的输入之后
我得到先前选择的构造函数,其中填充了预定义的变量名。我可以看到每个参数的类型。使用代码推荐器,Eclipse根据先前在当前作用域中定义的变量类型猜测正确的构造函数,并用这些变量填充构造函数。
在IntelliJ中输入之后什么都没有发生。构造函数是空的。我必须按Ctrl + P才能看到预期的参数。
两者有许多不同的特性和工作流程,这在所有的答案中都很明显。然而,我认为在决定使用哪种框架时,也应该考虑使用每种工具所能提高的总体生产力。
我是Netbeans和Eclipse的忠实粉丝,并且已经使用它们很多年了。它们都是很好的工具,根据您正在做的事情,您可能想要选择其中一个。
然而,大约六个月前,当我在一个复杂的java web项目中工作时,由于js的自动完成错误,我被迫寻找Eclipse的替代品。我是如此绝望,我正在考虑回到一个简单的文本编辑器为我的js代码!!
我只是碰巧遇到了Intellij Idea(不幸的是没有时间研究工具)。
虽然需要一些时间来适应Idea的做事方式,除了特殊的功能之外,在我看来,它从左到右的小事情上提供的生产力提高是最大的资产。它更适合我,我现在是Idea Ultimate的付费客户。一旦你习惯了这一点,就很难再去做别的事情了。
没有什么比免费更好的了,我是开源的忠实粉丝,但最终如果你以开源为生,那么每次都能更快地完成任务。