我听说有人改变了选择的方式,并且互相誓约。
作为Eclipse的忠实拥护者,但没有时间尝试IntelliJ,我感兴趣的是IntelliJ用户,他们是“前Eclipsians”,您可以使用IntelliJ来完成某些您无法使用Eclipse来完成的特定工作。
注意:这不是主观问题,也不是要成为IDE的圣战。请否决任何烈火的答案。
我听说有人改变了选择的方式,并且互相誓约。
作为Eclipse的忠实拥护者,但没有时间尝试IntelliJ,我感兴趣的是IntelliJ用户,他们是“前Eclipsians”,您可以使用IntelliJ来完成某些您无法使用Eclipse来完成的特定工作。
注意:这不是主观问题,也不是要成为IDE的圣战。请否决任何烈火的答案。
Answers:
按住CTRL键并单击即可将定义的对象带到任何地方-不仅在Java类和Java代码中的变量中,而且在Spring配置中(您可以单击类名,属性或bean名称),在Hibernate中(您可以单击可以单击属性名称或类,或包含的资源),您可以在Java类中单击一下导航到用作Spring或Hibernate bean的位置;单击包含的JSP或JSTL标记也可以,按住Ctrl键单击JavaScript变量或函数可将您带到定义的位置,或者如果存在多个位置,则显示菜单,包括HTML或JSP中的其他.js文件和JS代码文件。
在HSQL表达式中,在Hibernate配置中(包括类,属性和数据库列名称),在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对象中的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,我只想看看它的内容。
当您编辑它时,它会正确验证Spring和Hibernate配置,因此我不需要重新启动服务器即可知道我拼写了错误的类名或添加了构造函数参数,因此我的Spring cfg无效。
上次尝试时,无法在Windows XP x64上运行Eclipse。
它会建议你PERSON.NAME或person.address。按住Ctrl键单击person.name,它将导航您到Person类的getName()方法。
类型Pattern.compile("");
把\\那里,按CTRL-SPACE,看什么,你可以把你的正则表达式有用的提示。您还可以在此处使用语言注入-定义自己的使用字符串参数的方法,在IntelliLang选项对话框中声明您的参数为正则表达式-它将在此自动完成。不用说,它突出显示了不正确的正则表达式。
我不确定Eclipse中是否存在一些功能。但是,至少我们团队中使用Eclipse的每个成员还使用某种合并工具来合并本地更改与源代码控制(通常是WinMerge)中的更改。我从不需要它-对我来说,合并IDEA就足够了。通过单击3次,我可以在源代码管理中看到文件版本的列表,通过单击3次以上,我可以比较以前的版本,或者可以比较以前的版本和当前的版本,并可能合并。
它允许指定我需要WEB-INF\lib
文件夹中的所有.jar,而无需分别选择每个文件,因此当有人将新.jar提交到该文件夹时,它将自动将其拾取。
上面提到的大概是其功能的10%。我不使用Maven,Flex,Swing,EJB和许多其他东西,因此我无法确定它如何对他们有所帮助。但是确实如此。
我使用intellij而不是蚀的原因只有一个:可用性
无论是调试,重构,自动完成。Intellij都易于使用,因为它们具有一致的键绑定,可以在需要的位置使用的选项等。在功能方面,intellij很难赶上Eclipse,因为后者具有比intellij更多的插件,并且易于扩展。
大概不是什么可以做/不可以做,而是如何做。
例如,两者的编辑器周围都有用于项目,类路径,输出,结构等的停靠面板。在日食中,所有这些面板均保持打开状态,从而使我的编辑器区域大大缩小,约占总可见区域的1/5。因此,我必须抓住鼠标并单击以最小化这些面板中的内容。整日这样做在日食方面是非常令人沮丧的经历。
相反的事情发生在视图输出窗口中。在Idea中,运行程序会带出输出窗口/面板以查看程序的输出,即使以前已将其最小化也是如此。在eclipse中,我必须再次抓住鼠标,寻找“输出”选项卡,然后单击它以查看我的程序输出,因为输出窗口/面板与其他所有窗口一样只是另一个窗口,但是在Idea中,它在一种特殊的方式:“如果用户要运行其程序,很可能希望查看该程序的输出!” 当我编写它时,看起来很自然,但是在这个基本的用户界面概念中,eclipse失败了。
eclipse中可能有一个快捷方式(在编辑时自动隐藏输出窗口,并在运行程序时自动显示它),但是作为其他数十种功能,必须在论坛,在线帮助等地方找到快捷方式,而在Idea中则需要更多一些“自然”。
几乎所有功能都可以重复此操作,包括自动完成功能,自动换行功能,快速文档查看功能以及所有功能。我认为Idea的用户体验要比Eclipse的要愉快得多。然后,座右铭成真“快乐发展”
Eclipse处理更快的大型项目(+300个jar和+4000个类),我认为IntelliJ Idea 8正在为此工作。
所有这些当然是主观的。我们如何衡量用户体验?
Idea 8.0具有出色的ctrl+shift+spacex 2功能,可以执行以下自动完成功能:
City city = customer.<ctrl-shift-space twice>
决心
City city = customer.getAddress().getCity();
通过任意数量的吸气剂/吸气剂。
不要忘记“与剪贴板比较”。
我一直在IntelliJ中使用某些东西,而在Eclipse中却没有。
我最喜欢的IntelliJ快捷方式是“转到符号”,它在Eclipse中没有等效项(我发现了)。 CTRL-ALT-SHIFT-N使您可以从整个项目中开始输入和汇总类,方法名,变量名等。
由于新的Android Studio,我试图切换到IntelliJ。但是我现在非常失望。我将Eclipse与Code Recommanders插件一起使用。这是一个为什么Eclipse如此出色的简单示例:
我想创建一个新的SimpleTimeZone
。SimpleTimeZone
没有带有零参数的构造函数。
Ctrl + Space 在Eclipse中
Ctrl + Space 在IntelliJ中
在IntelliJ中,我不知道任何类型的构造函数SimpleTimeZone
。
后Enter在Eclipse
我得到了先前选择的构造函数,其中填充了预定义的变量名。我可以看到每个参数的类型。Eclipse使用Code Recommanders通过当前作用域中先前定义的变量类型来猜测正确的构造函数,并用这些var填充该构造函数。
Enter在IntelliJ 之后,什么也没有发生。我得到一个空的构造函数。我必须按一下Ctrl + P才能看到预期的论点。
如果您将光标放在某个方法上,CTRL+SHIFT+I则将弹出该方法的实现。如果该方法是一种interface
方法,则可以使用向上和向下箭头在实现之间循环:
Map<String, Integer> m = ...
m.contains|Key("Wibble");
哪里 是(例如)您的光标所在的位置。
IntelliJ具有一些相当高级的代码检查功能(与FindBugs相当,但有所不同)。
尽管我在使用IntelliJ时非常想念FindBugs插件(Eclipse / FindBugs集成非常酷)。
这是IntelliJ支持的CodeInspections的正式列表
编辑:最后,有一个IntelliJ 的findbugs插件。它仍然是一个beta版,但是Code Inspections和FindBugs的组合真是太棒了!
我经常使用的一件事是设置一个断点,然后控制它的作用。(在我的上一份工作中,大多数其他人都使用了Eclipse ...我记得很惊讶,没人能找到如何在Eclipse中做到这一点。)
例如,可以使断点实际上不停止,而只需将消息记录到控制台即可。这意味着,我不必用“ System.out.println(...)”乱码,然后重新编译。
System.out.println("here"); false
打印但不中断(最后一个语句是确定是否应该中断的布尔表达式)
有许多想法可以用更简单的方法解决,或者没有等效的解决方法:
自动完成动作:ctrl+shift+a您可以从键盘上调用任何想法动作,而无需记住其按键组合...考虑一下gnome-do或在Windows中启动,您就知道了!另外,此功能支持CamelCasing缩写;)
架子:让您轻松地将一些代码分开,然后通过diff查看器对其进行检查。
本地历史记录:管理起来更好,更简单。
SVN注释和历史记录:更易于检查,并且您也可以仅查看整个源文件中这一部分的历史记录。
到处都有自动完成功能,例如评估表达式和断点条件窗口。
Maven集成...要简单得多,而且集成得很好。
重构离手更近,例如循环插入,环绕/投射,重命名和添加变量。
查找功能强大且组织良好的组织。即使在大型项目中
可以同时与一个大型项目的多个分支一起工作非常稳定(由于分支机构以前曾为1.5Gb的bugfixer,并且需要同时使用它们,想法表明了其坚如磐石的功能)
界面更简洁
而且,仅使用键盘更易于使用,无需使用鼠标即可完成许多简单的操作,从而节省了时间,并让您更加专注于代码……这很重要!
现在,成为开源... Idea用户群将成倍增长。
就此线程而言,我的时机可能有点差,但我只需要响应即可。
我是月食的忠实粉丝-自首次露面以来就一直使用它。那时(10年前),一个朋友告诉我它将成为一名选手。他是对的。
然而!我刚刚开始使用IntelliJ,如果您还没有看到或使用过更改列表,则可能会错过编程的天堂。
跟踪我更改的文件的能力(在我的开发分支ala clearcase上)是我在eclipse插件中所需要的。Intellij一次提交即可跟踪所有更改,非常简单。您可以使用自定义列表隔离更改的文件。我将其用于必须在本地唯一的配置文件,但是在我与存储库进行同步或比较时会不断对其进行标记-将它们列出在更改列表下,我可以对其进行监视,但可以整齐地将它们藏起来,以便专注于实际添加的内容我正在做。
另外,还有一个Commit Log插件,可以输出未与您的错误跟踪软件集成的那些SCCS的所有更改的文本。将日志粘贴到故障单的工作历史记录中可捕获文件,它们的版本,日期/时间以及分支/标签。真是太酷了。
我敢说,所有这些都可以通过eclipse中的插件(或将来的增强功能)来支持。然而,Intellij使这变得轻而易举。
最后,对于这个产品的主流热爱,我真的感到很兴奋-击键,虽然很痛苦,但是很有趣。
介绍变量。(Ctrl+Alt+V在Windows上,Cmd+Alt+V在OSX上)
假设您调用一个方法service.listAllPersons()
Hit Ctrl+Alt+V和Enter,并插入了用于从方法调用返回值的变量:
List<Person> list = service.listAllPersons();
节省您的键入时间,而无需检查正在调用的方法的返回类型。在使用泛型时尤其有用,例如
new ArrayList<String>()
[引入变量]
ArrayList<String> stringArrayList = new ArrayList<String>();
(当然,您可以在点击之前轻松更改变量的名称Enter)
control+1
(世界上最明显的键绑定,是吗?),它建议您可以在当前光标位置执行操作,类似于IDEA中的意图。例如,它列出了“本地分配”,“分配字段”和其他选项。control+2, L
是它的捷径。
ctrl+2, L
,您仍然可以将创建的变量的类型更改为右侧类型(默认情况下)或任何超类型:该变量类型可通过TAB选择。
IntelliJ具有从代码到jspx文档的智能感知和重构支持。
Intellij具有比Subversive或Subclipse更好的SVN插件,并且可以使用!我们浪费了使用Eclipse合并源文件的时间,这是不值得考虑的。这对于IntelliJ来说不是问题,因为该插件可以为您提供更多帮助。
Subclipse插件也不可靠-我们经常遇到这样的实例,即该插件认为其他开发者没有将任何代码签入SVN,但确实存在-CI服务器已对其进行处理!
VIM仿真器。这个插件在IDEA中编辑文件时提供了几乎完整的vi / vim / gvim仿真。支持以下功能:
来自此插件的一些评论 http://plugins.jetbrains.net/plugin/?id=164
由于这个插件,我看不到任何其他想法。两全其美...太棒了!这就是我在所有IDE中都缺乏的东西。我认为优点之一是“ 依赖关系结构矩阵”:http : //www.jetbrains.com/idea/features/dependency_analysis.html#link0
Lattix网站(独立产品)对DSM的用法和优点有很好的介绍:http : //www.lattix.com/files/dl/slides/s.php? directory=4tour
一个非常有用的功能是能够部分构建Maven反应堆项目,从而仅包括您需要的零件的能力。
为了使这一点更加清楚,请考虑以下情况:使用叠加技术在WAR文件的集合之间共享许多公共资源(例如JavaScript,Spring配置文件等)。如果您正在某个网页上运行(在Jetty中运行)并且想要更改保存在单独模块中的某些覆盖代码,则通常希望停止Jetty,运行Maven构建,再次启动Jetty,然后继续。Eclipse和我使用过的几乎所有其他IDE都是这种情况。在IntelliJ中不是这样。使用项目设置,您可以定义要将哪个模块的哪个方面包含在后台构建中。因此,您最终将看到一个无缝的过程。您对项目中的几乎所有代码进行了更改,刷新浏览器后即可立即使用。
非常整洁,非常快。
我无法想象没有它的情况下,将类似YUI的前端编码支持到DWR / SpringMVC上。
我的答案的序言:我对Eclipse的使用受到限制。我们需要一个Java IDE才能在Windows和Mac上运行,并且Mac端口日渐减慢。这是几年前的事,我确定现在可以。但这就是促使我们转向IntelliJ的原因,我们对此感到满意。
现在我来回答:我还没有提到的一个很大的不同是IntelliJ / Jet Brains对技术的支持更好。我们向JetBrains发送电子邮件,并在不到一个小时的时间内得到了明确的答复。寻找Eclipse问题的答案会得到通常的“您愚蠢的傻瓜”答案(通常是少数答复)以及大量的有见地,有用的答复。但是需要一些整理才能得到真正的答案。
我一直在IntelliJ中使用的东西在我键入时一直在重构。我已经使用两个IDE从打印输出中重写了类(最初是用eclipse编写的),并且在IntelliJ中编写相同的类比使用eclipse少了大约40%的击键/鼠标单击次数。
在它们使用不完整的代码支持尽可能多的重构之前,我不希望使用Eclipse。
这是IntelliJ 8.0 / 8.1中较长的功能列表[ http://www.jetbrains.com/idea/features/index.html]
有一件事,IntelliJ的表现要比Eclipse好得多,这实在是空洞了!
但是,我确实更喜欢使用它,并且与Eclipce相比,它具有与文件系统同步的一个最大优点是,对于大型项目和速度较慢的计算机(是的,在工作环境中,PC的速度比我们在家中的PC慢得多)。尽管IntelliJ的初始索引时间较慢,但它似乎要更快一些。
IntelliJ社区版显然可以免费使用它,但是您很快就会希望CC版中未包含的那些额外的重构和漂亮的小东西。
在我看来,它通常具有更好的用户体验,但是其成本是否值得每个开发人员自行回答。
但是,值得庆幸的是,由于NetBeans一直在不断发展,我们目前拥有多达三个出色的Java IDE。
首先,我喜欢intellij。它至少有一百个缺少日食的功能。我说的是可靠性和智能性更高的级别,在重构,重命名,移动和其他已经提到的方面,夸张无法描述。
但是,有一件事情是intellij不允许哪个蚀发生的。它不允许在同一虚拟机下一次运行多个项目。
当您为前端,中间,核心,代理等创建单独的项目时,它们都必须彼此交互,因此无法同时快速修改和调试afaik。我目前解决这个问题的唯一方法是使用ant脚本在相关项目中部署和更新jar,或者使用maven。
Eclipse允许在一个ide vm实例下调试多个项目。