Eclipse必必装插件之Mylyn

以前早听过Mylyn的大名,但因为公司没有配套的软件,一直无缘尝试体验。前段时间,公司把Perforce,JIRA都做了升级,让我终于可以一睹Mylyn的真容。当真是极好的!必装,必装,必装装啊!

Mylyn的好处真不是一句两句可以说清的,它可以和各种开发辅助软件相连,如代码仓库(Perforce,SVN等),代码Review工具(如Gerrit, ReviewBoard等),持续集成工具(如Hudson/Jenkins),问题追踪工具(如JIRA,Bugzilla)。比如你在Eclipse里可以查看/更新JIRA Ticket的状态;直接在Eclipse里Review别人的Code Change并Comment;在Eclipse里查看Jenkins的出错报告并重新集成一下。

我这里只想说说它的另一大好处——Task-focused的IDE工作环境。

先设想一下没有Mylyn的工作环境…

昨天打算要某JIRA Bug,突然QA又发了两个严重的Bug,都急着要修,昨天跟了很晚,没什么头绪。今天看着Eclipse,打开了50+ Java Editor,有意无意地迁出了30个P4上的文件,都在Default ChangeList里。简直一团糟!Java Editor不知该不该关,忘了打开Editor的原因,P4上迁出的文件一会还要分到不同的Checklist里。啊,简直要崩溃了!

也许你要说工作应该更有条理一些。可程序员都知道,活儿真多的时候,没人慢条丝理的在各种工具之间换来换去,至少我不会。:)

当我们有了Mylyn…

有什么工具来帮你把繁乱的工作变得条理清楚吗?Mylyn可以!它可以帮你把不同的工作分类管理好,让你方便的在不同任务间切换,而你只需要记得轻点几下。下面简要说说。

和JIRA连起来

选择JIRA的Connector,

2014-06-24_13-41-39

设置JIRA的登录账户(注意,JIRA服务器的Remote API要先Enable,不然没有办法连接上。)

2014-06-24_13-39-56

连接之后,要做一个所谓Query,其实就是在JIRA里寻找关注的Ticket,可以直接选择某个JIRA里的Filter,Connector也提供一些简单的Filter,比如“Assigned to me”.

2014-06-24_13-43-03

设置完成Query之后,就可以得到一个Task的列表。

2014-06-24_14-08-04

Make your environment Task-Focused

让整个Eclipse IDE进入Task-Focused状态非常容易,选中某个Task,在Context Menu里选择”Activate“。

2014-06-24_14-09-11

随后整个IDE就围绕这个Task进行调整。

  • 对于没有历史的Task,Eclipse Editor Area会被清空;对之前Activated过的Task,打开过的文件会被Restore在Editor Area中。新打开的文件也会加到Task的环境中。
  • Perforce Eclipse Plugin会把当前Task的Pending ChangeList设为Active ChangeList。如果之前Task没有Changelist,Perforce会新建一个。新的迁出都会放到Active CL里By Default。
  • 此外,所有有”Focus on Activated Task”图标的View,都会调整各自的内容,只把浏览过的文件/方法放到View中。2014-06-24_15-02-31包括Package Explorer,Outline,Task,Problems,新的Mylyn还支持Breakpoint等等。

退出Task-Focused状态,只需简单的Deactivate Task即可。切换到另一Task,只需Activate另一个Task即可,同时只能有一个被激活的Task。

总结

有了Mylyn这个好伙伴,开发人员可以轻松在多的Task之间切换,为不同Task打开不同文件,浏览不同的方法/函数都会被Mylyn很好的维护和重建,工作会更加有条理,效率也会大大提高。

我已经离不开它了! 😀

使用Web技术开发桌面客户端的一些准备

有了用Web技术开发客户端的想法,自然就有个疑问,Embedded的Browser到底能力怎么样?

于是便和各桌面流行浏览器的对比实验,Embedded Browser选用的是JavaFX的WebBrowser,也是个基于Webkit的Browser.

不是专业人士,不知道这些测试页有没有代表性。下面是对比结果,

[easy_table caption=”Result Comparison”]Test Page,Firefox 25, Safari 17, Chrome 30, JavaFX, Safari (iOS 7.0.3)
http://browsermark.rightware.com,4051,5163,3701,3323,2627,
http://html5test.com,424,385,463,310,415,
http://css3test.com,58%,61%,60%,51%,61%,
[/easy_table]

显然JavaFX的WebBrowser在各方面都基本是最差的。(Performance比iPhone上的Safari略好,但iPhone毕竟是移动设备,且这个分数比91%的手机都要好。)这结果对于目前的使用场景应该足够了,不会使用很多HTML5和CSS3的高级用法,也不会加载很大的页面,Performance应该不是问题。

接下来做个更贴近产品的Demo吧!

在Nexus OSS上建Eclipse p2 repository

Eclipse p2使用了特殊的repository Layout(其实我认为就是所谓的”Update Site”)。它有别于一般的maven2 layout, Maven 3可以支持,maven tycho也可以很好的支持。但每次都要连接Eclipse的中央仓库,速度是一个问题,稳定性很不好(尤其在中国),有时会断掉。

为了解决这个问题,我尝试地在公司内部搭建了Nexus OSS,并建立了Eclipse p2的Proxy repository。

搭建Nexus OSS

Nexus OSS是流行且免费的部署私有Maven Repository的工作。安装很简单,从官网上下载最新的版本,解压,再运行$install_folder/bin/nexus start. 这个命令还不需要root权限。

TIP:最好把JVM最大内存调整一下。修改$install_folder/bin/jsw/conf/wrapper.conf, 找到wrapper.java.initmemorywrapper.java.maxmemory,分别调大一些。我的配置分别是256和1024.

安装p2的扩展

默认的Nexus OSS是不支持p2 layout的。需要在Sonatype RSO上下载相关的扩展。打开Sonatype RSO网页,搜索nexus-p2-bridge-pluginnexus-p2-repository-plugin两个扩展,我选择了2.6.3-01版本,分别下载它们的bundle zip(包含了dependencies)。再解压到$install_folder/nexus/WEB-INF/plugin-repository,然后重启Nexus OSS ($install_folder/bin/nexus restart).

配置p2 proxy repository

admin登录后,进入Repositories,选择Add->Proxy Repository,

在打开的设置页面里,输入repository id, repository name, format要选择p2, 还有设置Remote Storage Location。我的例子中选择了Eclipse Indigo.

Nexus会生成新的Repository Link,它和Remote Location可以一样使用。第一次的Index要慢一些。

其他用处

新产生的Link还可以帮助定义Target Platform。做Eclipse RCP开发的Team一定会遇到统一Target Platform的问题,说白了就是全组人的目标平台环境要完全一样。默认情况下,Target Platform是和IDE一样,所以如果A用Eclipse 4.3, B用Eclipse 3.7,可想而知那是多么混乱。

Eclipse PDE想到了这个问题,我们可以定义Target文件,在里面详细定义目标平台的构成,包含哪些Feature,哪些Plugin。有了内部的Repository,在Target文件里可以直接引用相应的连接,非常的稳定!

总结

Nexus OSS里可以添加p2 proxy repository,可以大大提高项目在编译时的速度和稳定性,提高生产效率。但它不支持做Host Repository,那是Pro版本里的功能。

 

 

Integrate VisualVM with Eclipse IDE

Recently I got a task to evaluate sqlite, which is a good candidate for our new product. I wrote several samples in Eclipse IDE and run several cases to test its features and  use VisualVM to test its performance.

VisualVM is a lightweight profiling tool which is released with JDK now. It’s quite handy for easy cases. And it’s quite easy to integrate it with your Eclipse IDE.

First, go to visualvm website and download the launcher for Eclipse.

Unzip the launcher and Install it by Eclipse Update Center.

Restart your Eclipse and go to Run Configuration, you will find there is a new launcher for VisualVM. After switching to it, your run is connected with VisualVM now.

😀

把Linux开发环境搬到Virtual Machine里

好久没来写东西,一是项目太紧,一是懒。这两天得空把现有的开发环境改进了一下,把Linux开发环境从公司的开发机上搬到了VM里。

原因有几点:

  • 原来Linux的开发机是共用的,人一多,机子就卡。毕竟同时运行几个Eclipse啊。
  • Linux开发机要用NXClient连接。NXClient能保存Session,很方便,但时不时的就把Mouse Focus给锁了,非常坑爹!已经N次Kill NXClient进程,再把各种窗口工具一一打开。
  • 为了一些技术改进,我在开发机上装了两个Web-Based App。少一个人用开发机,多空出点资源。
  • VM自己控制,可以装一些方便的工具。
  • 回家VPN太卡,VM更灵活,断了网了也不怕。

VM很容易装,Linux Distribution和开发机保持一致,再把自己在开发机上的Home目录Mount过来就一切搞定了。

现在很Happy!

打算写个需求管理(Requirement Management)的工具

工作这几年了,实现过全新的项目,也维护过老旧的项目,总是有一种感觉,就是几个产品的需求管理做的都不好,需求都非常零散的分布在JIRA ticket里(可能很多在comments里),没有总体的控制。一个普遍的现象是你问某个产品工程师,某版本的产品有哪些功能,或者某更新版本比旧版本多了什么功能时,他不能马上回答你。一个可能的做法就是去filter JIRA ticket, 然后慢慢读里面的comment或者附件。

这种做法真的很没有效率,一直希望公司能引进一套做需求管理的工具,像IBM Rational就有比较完善的解决方案。不过这些产品也真的价格不菲。

打算自己写一个玩玩,其实的目前能想到的功能也不多,

  • 能结构化的组织产品的需求
  • 建立需求间的相互联系
  • 可以和JIRA ticket连接(记个Ticket ID就好)
  • 可以比较不同版本之间的差异。
  • 最好能和开发和测试的工作连在一些,如代码的改动,有没有测试等。

先用Eclipse RCP写个样子出来看看吧,正好也学一下RCP的其它特性。

JPDA调试Eclipse RCP程序

当你已经有了一个打包好的Eclipse RCP程序,如何利用JPDA调试呢?其实方法和《使用JPDA进行Java程序的Debug》中说的基本一样。有几点不同。

如何设置JPDA的参数?

RCP程序在打包完成之后,会同时生成.ini文件。JPDA的参数是不能放在这个文件里的,因为这是为OSGi Runtime准备的参数。我们需要在Java命令行里做,所以要手动启动RCP程序,不能用打包好的exe文件。

其实也就是手动把Equinox Launcher运行起来,然后Eclipse IDE就可以和RCP程序连接了。

导入源码

在设置Remote Java Application时,可以直接加入Source。

Sonar上出现多个Snapshot错误的解决方法

这个问题需要写一下,怕以后忘了。

Jenkin最近在Sonar集成上出错了,信息大概是说”同时有几个Snapshot“。Snapshot就是质量快照,应该是每次Build产生一个,保存在Sonar的数据库里,然后用于Sonar的分析。

在尝试了自己手动删除Snapshot不行之后,在网上(Here)找到解决的办法。这个错误的原因是Sonar不支持对同一个项目同时进行Sonar分析,应该属于某种并发的问题。

解决方法就是执行一段SQL语句:

MySQL

Oracle

PostgreSql

搞定了!Cheers!