0%

从Eclipse转到IDEA的过程

这篇文章会比较乱,因为我不想做太多系列细分,就是单纯地把我从eclipse转到idea的经过写出来而已,公司的项目一直采用的>是eclipse+maven+jboss的环境开发的,版本控制通过svn控制,这年代还用svn做控制确实有点更不上时代了,转的过程有点麻烦,但是最终我还是顺利用上idea,只是目前还不太习惯。想入坑idea很早之前就有这个想法了,eclipse我们公司一直都在用很古老的一个版本,隐藏的bug且不说,时不时的卡顿就够影响效率的了。

idea的subversion巨坑

转idea遇到第一个大难题就是svn版本控制的转换,我司采用svn+ssh协议,还是秘钥文件+密码验证的。以前使用的一直是入职就分给我的一个ssh的秘钥文件eclipse专用的,还附带了一个ppk后缀的秘钥文件,但是ppk那个一直没有派上用途。idea的svn用户认证可能存在bug,我和在elipse上做了类似的svn地址和用户+秘钥文件的配置之后一直无法脸上代码仓库,一直无限弹出让我输入密码。搞得我一度想放弃。
后来在查了下,ssh+svn协议原则上是先通过ssh登录svn服务端的机器,等于先打通一条数据流通的渠道,然后svn的交互依赖于这条ssh的通道上面。一直依赖我都是直接在eclipse做svn的操作,没有考虑太多,于是我好奇用我的svn账号密码+ppk秘钥文件去登录svn指向ip的服务器,果然成功了,既然能登上去,说明idea只是没有正确通过ssh登录到svn服务器上而已,通过搜索我才知道,原来的ppk文件是putty的专用格式秘钥文件,而openssh一般采用pem,于是刻不容缓,我又查了下ppk转pem的方法,然后顺利转换到pem文件,在idea的preferences->Version Control->Subversion->SSH上面的Private key指向到新的pem秘钥文件,then connect svn server success,注意其他关于svn的设置先还原,保持默认即可。

ssh+svn可以通过SSH tunnel的方式连接

之前一定用pem秘钥的方式,有次突然抽风不能用了,于是改用SSH tunnel的方式。Subversion->SSH,勾选Subversion config,SSH tunnel用默认的:

但是要先记住ssh的pem秘钥通过命令:

1
ssh-add -k /Users/zhanshifeng/Documents/ccssoftDocument/eclipse/zhanshifeng.pem

输入密码然后即可永久记住,测试是否可以登录成功:

1
ssh zhanshifeng@199.3.0.10

不复存在的workspace

使用eclipse的开发者转到idea最不习惯的地方之一就是idea没有eclipse对应的workspace,我们公司是采用maven来控制jar依赖的,
通过maven实现多个子工程(project-anything)继承一个父工程(project-parent),父工程的依赖jar可以被子工程共用。我直接粗暴得将所有模块的根目录直接check out到新的目录(idea-all-project),然后选择idea的import project,因为eclipse不存在workspace的概念,所以我直接import idea-all-project这个跟目录,因为根目录也有一个pom.xml指向了project-parent,project-parent会因为子模块继承了它,它回去自动匹配到所哟偶子模块,只要在引入的时候勾选了项目是由maven做jar管控。
其实,很多时候如果存在子模块,或者其他模块不在所引入的目录之下可以通过project structure里面的modules去增减想要的模块。从这种角度上来讲,其实任何一个目录都是一个workspace,也可以说任何一个module都是workspace。

maven管控的企业级j2ee应用架构

我们的整个应用架构可以这样分级。架构类似采用金字塔三角形管控。工程application-all的pom.xml中引入apache的maven-ear-plugin插件,这个EAR插件主要用于生成Java EE Enterprise Archive (EAR)文件,即将各种组件打包到一起生成一个ear文件。此外,EAR插件也用于生成EAR的部署描述符文件application.xml。
application-all通过maven-ear-plugin指向了子模块console-web-all,console-web-all采用了maven-war-plugin插件,maven-war-plugin顾名思义,是将底下所有依赖的资源打包成一个war包,war被ear包含。

在idea中将ear部署到jboss中

一直依赖我都以为,jboss是启动的时候自动加载他对应的部署目录下面的应用,使用了idea之后,才发现,idea中maven项目是默认将资源部署到maven目录架构对应的target中的。。idea会去先启动jboss,jboss只有启动成功之后,才通过它的EARDeployer,传给部署器一个资源目录,然后jboss加载部署资源还是部署。
部署ear到jboss的时候有一点要特别注意的。由于我们项目采用ear管控war,所以需要一些额外的配置操作,开发过程中建议部署Artifacts中的exploded,exploded是被分解的意思,翻译成中文我也不知道叫什么合适,总之开发模式采用这个比较好。我还在Project Structure的Artifacts对ear exploded的资源输出目录手动加了个ear后缀,不加应该也没关系,还是我又强迫症,然后在war exploded的资源输出目录手动加了war后缀,还有对资源输出做了一些配置调整,最后成功部署到jboss。

不习惯的subservion操作模式

用惯eclipse的svn插件就知道,eclipse的资源同步功能非常实用,然后idea乍眼一看貌似是没有这个类似的功能的,这让我很抓狂,后来通过摸索找到了可以基本代替之的办法。
idea底部有个Version Control栏,其tool bar上有个Local Changes,打开这个刷新,可以看到本地改了那些代码,Local Changes旁边的Incoming可以看到别人新提交我没有更新下来的代码,Repository可以看到所有人的操作记录,还可以在Local Changes左边的tool bar对一些文件做一些辅助性的操作,比如搁置,忽略版本控制,还原等操作,实用性可以说五五开吧,虽然还是很不习惯。其他的基本操作基本会无师自通的。

强大无比的各种快捷键

几个自动生成代码的快剪辑区别:

Bookmarks的排序功能

shift+F11,可以对书签进行上下移动排序,大赞!

输出控制台乱码解决

在Server的VM options参数中加入以下配置:

1
-Dfile.encoding=UTF-8

代码审计,代码分析,FindBugs Plugin

Q&A

shift+方向怎么改成选中?
在vim命令行模式下按v+方向,用这种方式更好。