使用emacs-jde进行java开发
内容:
i.安装
ii.使用jde
iii.配置
iv.总结
关于作者
(hacking java with emacs-jde)
王挺昊 (bachg@sina.com)
清华大学硕士
2001年 5 月
进行java开发的朋友们一般都使用某种ide进行开发,比较常用的有jbuilder ,visual cafe,visual age等。使用ide开发对于初学者是一种很好的手段。但对于熟悉了linux/unix开发习惯的朋友们,使用这样的ide进行开发的缺点和限制是显而易见的,首先,你不得不了解各个ide不同的用法,同时不得不接受各种wizard强加给你的代码,这些代码(尤其是经过改动之后)经常是丑陋且令人费解的。(本人就经常对着jbuilder产生的丑陋代码恶心)。其次,这些ide一般都或多或少地使用了私有的工具或库,对软件的可移植性埋下了隐患。最后,最令我无法接受的是在我的机器(piii500,128m,nt4)上,jbuilder的速度实在无法令人满意(可能其他ide在这方面好一些)。
使用emacs(本文使用emacs来代表gnu emacs或xemacs)来开发程序显然是个很好的选择,其效率、高度的可配置性和极其强大的功能足以让任何人爱不释手,本人更是标准的hardcore-xemacs-fan。由于java的特性一些特性,使用emacs这样的纯编辑器来进行java开发也有其不方便之处,对于较大的项目,源文件经常分布在繁多的目录中(/com/foo/bar/.....),如果使用emacs进行开发,需要频繁的敲入冗长的目录名,这是一大不方便之处。其次,在java编译和运行调试,我们需要向编译器,虚拟机传递一些参数,当然,可以使用makefile来实现,但这些参数大多并不复杂,使用make 这样功能强大的工具有些破费了。还有,对于一些经常使用的功能或语句如(system.out .println,implements)每次使用都自己敲显然太烦琐。最后,对于一个oo语言来说,有一个类浏览器也是很方便的。
现在,使用jde可以基本克服所有这些缺点,将ide的功能和emacs的优点完美地结合起来。jde是一个使用emacs-lisp编写的ide软件包,主要部分有paul kinnucan开发,在emacs中安装jde后可以基本实现大多数商业ide系统所提供的功能。由其主要特性有:
针对java的语法高亮显示和缩进。
关键字及类方法等的自动补全(sourceinsight?,目前还不很成熟).
编译错误定位。
框架代码自动产生(listener,println等)
工程文件(记录编译运行调试参数)
树状类和文件浏览器显示
集成帮助(javadoc)及调试功能(jdb+gud)
除了这些特征外,jde当然具有emacs的一切优秀特征,如可移植性(几乎一切 os),可配置性(几乎是无限的,黑客的生命,:-))。下面将具体介绍jde的安装及使用
i.安装
由于jde是一个emacs-lisp语言包,它的安装是非常方便的,当然,需要具有 emacs配置的基本知识。首先,需要满足其安装要求,
emacs,gnu emacs 或xemacs 19 版以上,软硬件平台不限。
确认安装了jde需要的一些emacs-lisp包(package),有speedbar(类浏览器),semantic(语法分析),eieio(oo lisp),elib(emacs lisp utilities),另外,有些功能需要beanshell(什么是beanshell?www.beanshell.org) ,在xemacs下运行需要安装fsf-compat包
将jde包解开到某目录,修改你的.emacs配置文件增加以下一些内容: ;; set the debug option to enable a backtrace when a
;; problem occurs.
;; 当有问题出现显示错误信息,便于调试
(setq debug-on-error t)
;; update the emacs load-path to include the path to
;; the jde and its require packages. this code assumes
;; that you have installed the packages in the emacs/site
;; subdirectory of your home directory.
;; 加载所需的package
(add-to-list ´load-path (expand-file-name "~/emacs/semantic-1.3.3"))
(add-to-list ´load-path (expand-file-name "~/emacs/speedbar-0.13"))
(add-to-list ´load-path (expand-file-name "~/emacs/eieio-0.16"))
(add-to-list ´load-path (expand-file-name "~/emacs/jde/lisp"))
(add-to-list ´load-path (expand-file-name "~/emacs/elib-1.0"))
;; if you want emacs to defer loading the jde until you open a
;; java file, edit the following line
;; 不自动加载jde-mode
(setq defer-loading-jde t)
;; to read:
;;
;; (setq defer-loading-jde t)
;;
;; 编辑.java文件时加载jde
(if defer-loading-jde
(progn
(autoload ´jde-mode "jde" "jde mode." t)
(setq auto-mode-alist
(append
´(("\\.java\\´" . jde-mode))
auto-mode-alist)))
(require ´jde))
如果安装无误的话,使用emacs打开java文件时将自动进入jde-mode,过程可能需要几秒钟,因为jde将调用semantic对整个文件进行语法分析。
ii.使用jde
进入jde-mode后,我们自然可以发现与普通java-mode有一些不同,首先是语法的高亮显示更加"java"化,一目了然。xemacs顶部的菜单也有了一些变化多了三个菜单项,"jde","classes","senator",jde菜单里包括了jde提供的所有功能,下面将详细介绍, "classes"是jde对java文件进行语法分析后生成的,包括了当前文件中的所有类,变量,方法,可以通过选择菜单的方式访问相应的代码。而senator菜单是由semantic包生成的,可以通过token的方式对源文件进行搜索定位。下面我们来看看emacs-lisp为我们提供了什么样的功能:
javadoc支持:javadoc是jdk提供的文档生成工具,通过遵循一定的规范对源代码进行注释,javadoc可以生成整个程序的java风格文档。在jde中,我们只需要将光标定位在某 method的开始,按c-c c-v j,jde将自动生成javadoc框架注释,在相应的部分写好说明后,可以使用javadoc工具生成java风格的文档。
自动补全:将变量jde-enable-abbrev-mode变量设置为t,jde可以实现自动补全的功能,避免我们手工输入的烦琐和易错,补全主要有三种类型,首先关键字补全,即可以自动补全java语言的关键字,如我们敲入"impl",jde就会自动补全成为implements(一个本人经常拼错的关键字).其他的如abstract可以用"ab"来补全,当然,这只是emacs-lisp雕虫小技罢了,但重要的是,你可以通过对变量jde-mode-abbrevations变量的修改来自己定义那些关键字应补全,应怎样补全(这样太方便了!)。
下面介绍对控制流结构的补全,即if-else等结构的补全,可以避免控制结构写大了以后结构发生错误,不过本人体会只要你有良好的编程习惯,这个东西用处不是太大。比较有用的还有变量名的补全,如我们在某java文件中定义了名字较长的变量,名为 "variablenametoolong",在后面需要引用时,我们不必记住变量的名字,在输入头几个字母后,按m-/键,jde将自动补全为相应的变量名,如果有多个选择,多次按m-/可以找到你需要的。sourceinsight式的全局method补全功能目前jde通过beanshell实现,还不够成熟。
代码框架:jde可以自动生成特定类和代码段的框架代码,不需要用户多次重复输入,目前支持的有:
import自动生成,即不需要知道某class到底是在什么package里,敲入其名字后按c-c c-v c-z,jde会自动调用beanshell找到相应的package并自动加入import;method重载自动生成,即可以根据当前继承的类来自动生成重载函数的框架;
interface自动生成,根据所implements的interface,自动生成所需要的重载的函数(太方便了,不需要自己对着文档一个一个地实现了);根据模版生成某特定类型类的框架,目前有windowlistener,actionlistener,get/set等等。以上这些模版都可以根据需要自己来修改,great!
项目文件:将所有编译,运行参数一次存储起来,设置好classpath,sourcepath ,mainclass...之后我们可以在任一文件的buffer中按c-c c-v c-c对当前文件进行编译, 按c-c c-v c-r可以自动运行项目,或按c-c c-v c-d进行调试。
集成帮助:设置好帮助文件的url后,可以使用c-c c-v c-n自动运行启动browser 来查看帮助,最好安装emacs-w3m,这样看帮助非常方便,更方便的是设置好class的帮助文件后可以实现上下文敏感的帮助。在某符号上调用jde-help-symbol,可以自动显示该符号的帮助。
类和文件的浏览:jde提供了三种方法,第一种即我们已提过的class菜单,第二种是使用etags,第三种最强大的是使用speedbar实现的树状浏览器。几乎和商业ide使用的没有任何区别,可以用图形方式快速地访问文件,类的方法及变量及其所依赖的包等等。
调试:jde通过gud提供了对jdb的支持,同时为了更好地发挥jde的功能,jde的作者们还专门写了一个自己的调试器jdebug。遗憾的是对此本人研究不够。
iii.配置
jde拥有几乎无限的可配置性,最基础可以修改与jde相关的变量和key-binding等,深入一些的可以修改模版等,当然最深入的就是直接hack其源码了。
iv.总结
本文简要介绍了emacs下的java ide-jde的安装使用和基本功能,希望更多的朋友能喜欢上emacs和jde.以上只是一最简要的介绍,具体功能和妙处还需要在使用中体会。需要说明的一点是使用jde首先必须具有emacs的基本知识,其次要有一点hack精神,如果需要一个上手快的傻瓜式的ide,那jde可能就不能满足要求了。关于jde有关的资料,maillist等其他信息,可以访问jde主页http://jde.sunsite.dk。
关于作者
王挺昊(bachg@sina.com),男,23 岁,清华大学硕士,主要从事利用 java,xml,corba 等技术进行 cad/cg 等相关领域的开发。是自由软件项目-- jcad (http://jcad.gnuchina.org) 的创始人以及主要开发人员
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器