如果启动正常可以进一步尝试在Eclipse中调试Servlet或JSP程序下面我们将用Tomcat自带的Servlet例程HelloWorldExamplejava来示范一下如何在Eclipse中调试Sevlet程序首先要在Java视图中新建一个Java项目为了方便可以直接将项目路径指定到HelloWorldExmaple程序所在路径之后按Next进入Java Settings对话框选择Libraries标签并用Add External JARs按钮来指定Servletjar包的位置这里直接用了Tomcat中的Servletjar包
最后点击Finish完成项目的生成在新生成项目中的default package可以找到HelloWorldExamplejava双击打开文件并可尝试给HelloWorldExample加上一个断点(双击编辑窗口左侧边界)之后在外部浏览器中输//localhost:/examples/servlet/HelloWorldExample再回过来看Eclipse发生了什么变化是一个调试窗口呀!在Eclipse中进行的调试操作和绝大多数的IDE大同小异如设置断点单步跟蹤变量值察看等等在这里也就不用再详述了
Eclipse最有魅力的地方就是它的插件体系结构在这个体系中重要的概念是扩展点(extension points)也就是为插件提供的接口每一个插件都是在现有的扩展点上开发并可能还留有自己的扩展点以便在这个插件上继续开发
由于有了插件Eclipse系统的核心部分在启动的时候要完成的工作十分简单启动平台的基础部分和查找系统的插件在Eclipse中实现的绝大部分功能是由相应的插件完成的比如WrokBench UI插件完成界面的外观显示Resource Management插件完成维护或生成项目或文件等资源管理工作(在下面的第二个例子就会用到这个插件)而Version and Configuration Management (VCM)插件则负责完成版本控制功能等等虽然以上提到的每一个功能都是绝大多数IDE环境所必备的功能Eclipse却也把它们都做成了插件模式甚至用来开发Java程序的开发环境(Java development toolingJDT)也只不过是Eclipse系统中的一个普通插件而已整个Eclipse体系结构就象一个大拼图可以不断的向上加插件同时现有插件上还可以再加插件下面的插件开发示例就是在WorkBench UI插件中的观察窗口扩展点上开发的
本文第一部分介绍过Eclipse的开发界面其中之一就是观察窗口它通常配合编辑窗口显示一些有用的信息在这里我们只简单生成一个显示欢迎信息的观察窗口假设新插件的名子叫Welcome
第一步先用向导新建一个Java项目我们可以在菜单栏选择FileàNew或用工具栏的向导按键或是在资源窗口用鼠标右键菜单中的New打开向导对话框然后用缺省方式创建项目并在项目中建立一个Welcomejava文件代码如下
package comnidapengeclipseplugin;
import orgeclipseswtwidgetsComposite;
import orgeclipseswtwidgetsLabel;
import orgeclipseswtSWT;
import orgeclipseuipartViewPart;
public class Welcome extends ViewPart {
Label label;
public Welcome() {
}
public void createPartControl(Composite parent) {
label = new Label(parent SWTWRAP);
labelsetText(Welcome to Eclipse);
}
public void setFocus() {
}
}
为使这个程序能正常编译要配置它的编译环境即指定所需的CLASSPATH在Eclipse中可以用几种方法常用的是两种第一是在资源窗口或Java包窗口选中该项目点击鼠标右键在打开的菜单中选择属性(Properties)之后在属性对话框中选择Java Build PathàLibraries用Add External JARs功能添加三个包它们都是Eclipse的现有插件的类包可以在你的Eclipse安装路径plugins下面的相应路径中找到分别是reruntime插件中的runtimejarorgeclipseswt中的swtjar和orgeclipseui中的workbenchjar第二种指定CLASSPATH的方法是先将以上提到的三个包直接导入到Eclipse中的某下一个项目中如果导入到和Welcomejava相同的项目中则无需进一步指定CLASSPATH否则需要在项目的属性菜单中选择Java Build PathàProjects然后选中这三个包所在的项目
在pluginxml中一共有四个主要的标签pluginrequiresruntimeextension其中plugin标签的属性提供的是我们要开发的Welcome插件的基本信息除了nameversionprovidername等最重要的是id它要求不能和现有的Eclipse插件id有沖突因此我们用包名作为插件的idrequires标签中所列出的是需要的插件这里我们要用到Eclipse Workbench和SWT API因此导入了orgeclipseui插件runtime标签指明的是我们开发的插件所在JAR包的文件名extension标签是插件扩展点的信息orgeclipseuiviews是Eclipse系统提供的观察窗口扩展点我们的例子是一个观察窗口(View)这表明我们是要在 orgeclipseuiviews扩展点上进一步开发
extension中还包括category和view两个标签在后续的启动Welcome插件步骤中我们就会知道这两个标签的含义要注意的是category和view标签的id的唯一性并且在view的属性中声明了Welcome插件的类名
在Eclipse中为pluginxml提供了缺省可视化的编辑器在编写pluginxml过程中可以借助这个编辑器完成一些工作如果你直接录入了pluginxml文件源代码还可以用这个编辑器校验你的代码如果编辑器不能正确读入就表明你的pluginxml有一些问题
在确认Weclomejava和pluginxml都正确无误之后可以用Eclipse菜单栏中的Export命令将Weclomejava导出为JAR文件它的名子应该和pluginxml中runtime声明的JAR相一致同时导出pluginxml安装Welcome插件的方法和本文第一部分介绍的安装Tomcat插件方法是一样的首先在Eclipse的安装路径plugins路径下面建立一个comnidapengeclipseplugin路径然后将Weclomejar和pluginxml拷到这个路径下之后必需重新启动Eclipse在Eclipse启动的时候它会搜索所有在插件路径下的插件并注册它们(仅仅是注册只有在需要某个插件的时候Eclipse才会启动它)在重新启动的Eclipse的菜单栏中选择PerspectiveàShow ViewàOthers在打开的对话框中我们会找到在pluginxml中extension的category标签中声明的name属性Welcome在Welcome的支结点中包含了view标签name属性Welcome to Eclipse选中它并确认Welcome窗口就会显示在Eclipse Workbench上的某个位置 如果在执行了以上操作但没有显示新窗口可以再次打开Show View菜单此时在菜单中应该有新一顶选择Welcome to Eclipse然后选中它
上面我们完成了一个观察窗口的插件但这个操作过程对开发稍微复杂一些的插件就显得不太方便了每次测试都要将代码打包发布再重新启动Eclipse系统!为此Eclipse提供了一个专门为开发插件而做插件(有点绕嘴)Plugin Development Environment(PDE)本文前面曾提到目前Eclipse的Release或Stable版本缺省提供了这个插件因此如果安装的Eclipse是这两个版本中的一个就可以直接进行下面的步骤下面我们再用PDE环境开发一个稍微复杂一些的插件
第一步仍然要新建一个项目只是在向导中不是用Java项目而是Plugin Development中的Plugin Project在应用向导生成新项目的时候要注意两点第一是PDE的项目名称就是plugin的id因此要保证它的唯一性这里我们的项目名是comnidapengeclipsepluginpde其次为了进一步说明Eclipse插件的结构在Plugin Code Generators中选择用向导模板生成一个缺省的插件
这个用缺省方式生成的插件类对于我们将要的代码并不是必需的也可以用生成空插件的方式建立我们的项目这样做只是为进一步说明Eclipse的插件结构项目生成之后在我们的项目中会包含一个PdePluginjava文件它就是以缺省方式生成的插件类注意到它继承了AbstractUIPlugin类而AbstractUIPlugin类实现了orgeclipseuiplugin接口事实上所有的Eclipse插件都会有一个相应的实现plugin接口的类这个类将是新插件的主类(类似于有main()函数的Java类)它负责管理插件的生存期在我们的AbstractUIPlugin继承子类中可以用singleton模式来保存在Eclipse中的生成的该插件的第一个也是唯一实例一般来说在该继承子类中也要实现一个getDefault()方法以返回当前插件的实例而且当Eclipse首次使用该插件的时候这个主类将是第一个被调用的类因此我们也可以在它的代码中执行一些初始化的工作而且如果插件需要使用PreferencesDialogs或Images资源也可以通过这个类中的相应方法来得到它们的实例如用其中的getDialogSettings()getPreferenceStore()getImageRegistry()方法
但是象前面提到的PdePluginjava对下面的例子并不是必需的我们不用对它进行任何修改在我们第一个例子中的Weclome插件根本就没有生成AbstractUIPlugin的继承子类此时系统会自动为Weclome插件生成一个缺省的主类(类似于Java类构造函数如果没有声明系统会指定一个默认的构造函数)下面的代码是才真正实现了我们新插件的功能假设这个插件名子是NoticeView
package comnidapengeclipsepluginpde;
import reresources*;
import reresourcesIResourceChangeEvent;
import reruntimeCoreException;
import javautilResourceBundle;
import orgeclipseswtwidgetsLabel;
import orgeclipseswtwidgetsComposite;
import orgeclipseuipartView