??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV成人一区二区三区观看,亚洲人6666成人观看,亚洲欧美黑人猛交群http://m.tkk7.com/Victor/category/5998.html享受喧嚣 安于q静zh-cnWed, 28 Feb 2007 23:08:46 GMTWed, 28 Feb 2007 23:08:46 GMT60Eclipse介和插g开?/title><link>http://m.tkk7.com/Victor/articles/23911.html</link><dc:creator>Victor</dc:creator><author>Victor</author><pubDate>Wed, 14 Dec 2005 09:39:00 GMT</pubDate><guid>http://m.tkk7.com/Victor/articles/23911.html</guid><wfw:comment>http://m.tkk7.com/Victor/comments/23911.html</wfw:comment><comments>http://m.tkk7.com/Victor/articles/23911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Victor/comments/commentRss/23911.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Victor/services/trackbacks/23911.html</trackback:ping><description><![CDATA[<P>U别: 初</P> <P><A ><FONT color=#996699>赵勇</FONT></A>, J2EEE序?BR></P> <P>2004 q?11 ?03 ?/P> <BLOCKQUOTE>Eclipse 是一个很让h着qL开发环境,它提供的核心框架和可扩展的插件机制给q大的程序员提供了无限的惌和创造空间。目前网上流传相当丰富且全面的开发工h面的插gQ但是Eclipse已经越了开发环境的概念Q可以想象Eclipse成为未来的集成的桌面环境。目前的Eclipse本n具备资源管理和外部E序的功能,加上无所不能的插Ӟ构成一个丰富多彩的工作环境而不仅仅是一个IDE?/BLOCKQUOTE> <P><A name=N1003B><span id="0gi8000" class=atitle><FONT face=Arial size=4>1.Eclipse介和插g开?/FONT></SPAN></A></P> <P>Eclipse 是一个很让h着qL开发环境,它提供的核心框架和可扩展的插件机制给q大的程序员提供了无限的惌和创造空间。目前网上流传相当丰富且全面的开发工h面的插gQ但是Eclipse已经越了开发环境的概念Q可以想象Eclipse成为未来的集成的桌面环境。目前的Eclipse本n具备资源管理和外部E序的功能,加上无所不能的插Ӟ构成一个丰富多彩的工作环境而不仅仅是一个IDE。对于程序员来说Q没有什么比可以随心所Ʋ的定制的工作环境更重要Q你的决心,勇气和创造力在与别h分n成果的过E中一览无余。好了,你是不是心动了,如果你已l对Eclipse有一定的认识Q那么,和我一h造自q个性化工作环境吧,首先我们一起开发一个天气预报的插gQ然后我们打造属于自q邮g快速监控功能?/P> <P>以下的工作基于一定的前提Q那是你是一名JavaE序员,你很ƣ赏q正开始用Eclipseq个酷的工作环境,别忘了下载最新版的Eclipse3.0Q本文基于Eclipse3.0开发?/P><BR> <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> <TBODY> <TR> <TD><IMG height=1 alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"></TD></TR></TBODY></TABLE> <TABLE class=no-print cellSpacing=0 cellPadding=0 align=right> <TBODY> <TR align=right> <TD> <TABLE cellSpacing=0 cellPadding=0 border=0> <TBODY> <TR> <TD vAlign=center><IMG height=16 alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width=16 border=0><BR></TD> <TD vAlign=top align=right><A class=fbox ><B><FONT color=#996699>回页?/FONT></B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR> <P><A name=N10047><span id="uq8ayi0" class=atitle><FONT face=Arial size=4>2.天气预报插g</FONT></SPAN></A></P> <P>如果你已l厌倦了L要登录某些网站从相关|页上获取信息,q里有一个让你通过Eclipse快速获取信息的新方法。让我们从头开始,做一个属于自q天气预报插g吧,你的Eclipse具有天气预报功能,是不是很酷呢Q?/P> <P>在这一部分Q我们将要实C个Eclipse插gQ他可以在Q何我们想知道的时候通过单的点击鼠标告诉我们本地区的天气预报Q这当然很刺Ȁ。对于一个程序员而言Q事情就应该如此。让我们开始吧Q我们首先要定义一个插Ӟ把他加到菜单和工h中。对于没有插件开发经验的你,可以参考?<A ><FONT color=#996699>开?Eclipse 插g</FONT></A>》,树立基本的插件开发意识,当然Q本文将详细的辅助你完成q一创造性的工作?</P> <P><A name=N10057><span id="mqqmqka" class=smalltitle><STRONG><FONT face=Arial>2.1最基础的插?/FONT></STRONG></SPAN></A></P> <P>你可以完全参考?<A ><FONT color=#996699>开?Eclipse 插g</FONT></A>》的插gCZQ制作你的第一?hello Eclipse 插gQ幸q的是,Eclipse3.0完全考虑C的需求,通过菜单 File -> New-> Other ->Plug-in ProjectQ输入项目名Uͼnext出现对话框,只要在插件名处输?muplugin",next 以后选择 "Hello,World"的插件模板你可以直接新徏一个名为myplugin的最单的插gQ但其实我们的天气预报ƈ不比它复杂多,建完Ҏ件以后的效果如下图?</P><BR><A name=N10066><B></A><BR><IMG height=343 alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-plugin/images/image001.png" width=286 border=0> <BR> <P>现在Q将目作ؓq行时工作台q行Qrun Q?run as runtime workbenchQ,在一个全新的EclipseH口中,通过点击菜单 sample menu 的sample Action或者工h中的圆ŞEclipse 图标Q你看到如下效果的对话框?/P><BR><A name=N1007A><B></A><BR><IMG height=133 alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-plugin/images/image003.png" width=521 border=0> <BR> <P>到此为止Q天气预报插件的原始版做成了Q通过修改plugin.xmlQ我们将菜单Ҏ中文形式Q需要修改的地方?处,详见表格?/P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section> <FONT face="Lucida Console"> <actionSet label="Sample Action Set" visible="true" id="myplugin.actionSet"> <menu label="我的I间" id="sampleMenu"> <separator name="sampleGroup"> </separator> </menu> <action label="天气预报" icon="icons/sample.gif" class="myplugin.actions.SampleAction" tooltip="Hello, Eclipse world" menubarPath="sampleMenu/sampleGroup" toolbarPath="sampleGroup" id="myplugin.actions.SampleAction"> </action> </FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>此时在运行时工作収ͼ我们的菜单已l改变?/P><BR><A name=N10095><B></A><BR><IMG height=118 alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-plugin/images/image005.png" width=487 border=0> <BR> <P><A name=N100A4><span id="ayosmu8" class=smalltitle><FONT face=Arial>2.2用VisualEditer制作天气预报对话?/FONT></SPAN></A></P> <P>虽然菜单是天气预报,但是我们需要的不是hello Eclispe对话框,我们需要的是告诉我们天气的对话框,当然需要我们从头开始,于是我们需要重新构Z个对话框Q这个就需?Visual Editor来帮助进行界面的开发(关于Visual Editer参考?<A ><FONT color=#5c81a7>Build GUIs with the Eclipse Visual Editor project</FONT></A>》) 。我们将使用Visual Editor实现一个Swing对话框,当然只用VE做一个对话框是有点大材小用,但是作ؓLQ已l合适了?</P> <P>首先参考?<A ><FONT color=#5c81a7>Build GUIs with the Eclipse Visual Editor project</FONT></A>》构建Visual Editer开发环境,当一切准备齐全,鼠标右键点击PackgeExpoler中的 "muplugin.actions"java文gQ从弹出式菜单中选择 new->other->VisualClassQ新Z个可视化的类Q弹出界面如下图Q?</P><BR><A name=N100BA><B></A><BR><IMG style="WIDTH: 691px; HEIGHT: 561px" height=583 alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-plugin/images/image007.png" width=774 border=0> <BR> <P>选择nextQ然后在name中输入WeatherDialogQ这个就是我们用来显C天气预报的dialog</P> <P>选择该对话框的超cMؓjavax.swing.JDiaog,点击Finish按钮。等待一D|间后Q我们的对话框就基本生成了,鼠标点击左上角图标,直接输入天气预报是对话框的标题Q同?我们可以看到左侧的VisualEditor面板?/P><BR><A name=N100D1><B></A><BR><IMG height=403 alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-plugin/images/image011.png" width=718 border=0> <BR> <P>然后我们该对话框于与刚才的天气预报菜单q接扑ֈSampleAction的run函数Q如下所C:</P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section> <FONT face="Lucida Console"> public void run(IAction action) { MessageDialog.openInformation( window.getShell(), "Myplugin Plug-in", "Hello, Eclipse world"); } </FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>替换成如下代?/P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section> <FONT face="Lucida Console"> public void run(IAction action) { WeatherDialog wd=new WeatherDialog(); wd.setSize(400, 335); wd.show(); } </FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>此时Q点击菜单运行,我们的对话框看v来象q个样子Q在此基上我们还要在上面增加天气预报信息</P><BR><A name=N100F3><B></A><BR><IMG height=331 alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-plugin/images/image013.png" width=397 border=0> <BR> <P><A name=N10102><span id="mw08cuu" class=smalltitle><FONT face=Arial>2.3增加天气预报功能</FONT></SPAN></A></P><BR><A name=N1010A><B></A><BR><FONT face=Arial><IMG height=425 alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-plugin/images/image015.png" width=573 border=0></FONT> <BR> <P>下面的部分是重点Q我们将使用h解析Html功能的SwinglgJEditPaneQ来获取|络上的现成的天气预报信息,Ҏ上图Q从 VisualEditor的面板中Swing Componentsl点击JEditPaneQ加入到对话框中。ƈ修改对话框代码得最l的代码如下Q?/P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section> <FONT face="Lucida Console">/* * Created on 2004-9-23 * */ package myplugin; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import javax.swing.JDialog; import javax.swing.JEditorPane; /** * <p>Title: WatherDialog</p> * <p>Description: q个是对话框c,用于昄指定城市的当天的天气预报</p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company:UF SOFT</p> * @author 赵勇 * @version 1.0 */ public class WatherDialog extends JDialog { String city="北京"; private JEditorPane jEditorPane = null; /** * This method initializes * / public WatherDialog(String city) { super(); this.city=city; initialize(); } /** * This method initializes this * @return void */ private void initialize() { this.setContentPane(getJEditorPane()); try { //构徏URL对象 URL url =new URL(<A +city); String temp=""; BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); //使用openStream得到一输入ƈ由此构造一个BufferedReader对象 String inputLine; //从输入流不断的读数据Q直到读完ؓ? while ((inputLine = in.readLine()) != null) temp=temp+inputLine+"\n"; //关闭输入? in.close(); String weather =temp.substring ( temp.indexOf( "<body"), temp.lastIndexOf( "body>")+5); this.jEditorPane .setText(weather); } catch (Exception e) { e.printStackTrace(); } this.setTitle("天气预报"); this.setSize(400, 166); } /** * This method initializes jEditorPane * * @return javax.swing.JEditorPane */ private JEditorPane getJEditorPane() { if (jEditorPane == null) { jEditorPane = new JEditorPane(); jEditorPane.setContentType( "text/html"); } return jEditorPane; } } // @jve:decl-index=0:visual-constraint="70,19" </FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>以上代码中最关键的部分就是对话框中的JEditorPane对象Q在初始化时Q从一个URL 获取天气预报信息Q表CؓHtml标记片段Q不用解析,直接调用JEditorPane的setText ҎQ就可以Html格式的信息直接按解析q的方式昄Q也是天气预报信息了,</P> <P>此时Action中的调用需要做修改</P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section> <FONT face="Lucida Console"> public void run(IAction action) { WeatherDialog wd=new WeatherDialog("北京"); wd.setSize(400, 335); wd.show(); } </FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>现在以运行时工作台的方式q行Q点d气预报菜单,可以看到下图Q?/P><BR><A name=N1012F><B></A><BR><IMG height=423 alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-plugin/images/image017.png" width=642 border=0> <BR> <P>如果你在上v或者其他城市,试着修改city参数?上v"Q再ơ运行,你将发现Q你仍然能够得到该城市的天气预报Q这里我们从|站上提取的信息Q有Ҏ机取巧了Q。值得注意的是QXmethod|站提供了一个天气预报的WebServiceQ可惜只有美国的城市Q不然我们可以用Web Service调用获取天气预报Q将会更酗?/P> <P>现在q行是工作台已经具备了天气预报的功能Q还需要更q一步,改插g导出发布Q拷贝到Eclipse根目录的plugins目录中,重新启动Q具体参见Eclipse帮助Q。现在你自己的EclipseQ就具备了天气预报的功能Q只要你点击鼠标Q就可以在编E之余轻杄获取天气信息?除非你的老板认ؓ你在工作旉随时了解天气情况不是一个好LQ我认ؓ你完全可以将q个插gU_个h收藏的插件之列。你也可以在此基上扩展,增加一些配|文件和属性设|,定制出满p求的插g。如果能够增加信息的自动qo和筛选,那将是一ơ很愉快的体验,如果你有旉和兴,不妨一试?/P><BR> <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> <TBODY> <TR> <TD><IMG height=1 alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"></TD></TR></TBODY></TABLE> <TABLE class=no-print cellSpacing=0 cellPadding=0 align=right> <TBODY> <TR align=right> <TD> <TABLE cellSpacing=0 cellPadding=0 border=0> <TBODY> <TR> <TD vAlign=center><IMG height=16 alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width=16 border=0><BR></TD> <TD vAlign=top align=right><A class=fbox ><B><FONT color=#996699>回页?/FONT></B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR> <P><A name=N10144><span id="i0mceku" class=atitle><FONT face=Arial size=4>3.邮g快速监控插?/FONT></SPAN></A></P> <P>现在你的工作因ؓEclipse而更加惬意,更具创造力Q那么你q有什么不满?你是否厌倦了各种邮g客户端随旉地的骚扰你呢Q你希望你在高兴的时候适时的了解一下邮件的概况Q好了,既然惛_了ؓ什么犹豫呢Q因Z是程序员Q你是要用Eclipse享受完全DIY的乐?/P> <P><A name=N1014D><span id="i08wc0o" class=smalltitle><FONT face=Arial>3.1生成插g</FONT></SPAN></A></P> <P>本部分我们将在以上myplugin插g的基上增加一个邮件过滤显C的对话框,cM的我们通过VisualEditer创徏一个名为MailDialog的对话框Qƈ增加一个JEditPane用来昄邮箱中我们关注的信息?/P> <P>修改plugin.xmlQ增加一?我的邮g"菜单</P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section> <FONT face="Lucida Console"> <action label="邮g信息" icon="icons/sample.gif" class="myplugin.actions.MailAction" tooltip="邮g信息" menubarPath="sampleMenu/sampleGroup" toolbarPath="sampleGroup" id="myplugin.actions.MailAction"> </action> </FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>现在Q你知道要创Z个MailAction的Actionc,q在在Run中增加如下代?/P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section> <FONT face="Lucida Console"> MailConfig mail=new MailConfig(); String popServer="server"; String popUser="zhaoyong"; String popPassword="1234"; //讄需要过滤的关键字:发g人和邮g主题 String [] strFrom=new String[] {"zhaoyong"}; String [] strSubject=new String[] {"试"}; MailConfig[] mc =new MailConfig [] { mail }; MailDialog md=new MailDialog(mc); System.err.println("run run run ") ; md.setSize(400, 335); md.show(); </FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>以上的代码编译不会通过Q但是别着急,慢慢来,很快了?/P> <P><A name=N10167><span id="ocy0c8e" class=smalltitle><FONT face=Arial>3.2构徏邮g监控对话?/FONT></SPAN></A></P> <P>当然你需要徏立一个MailConfigcȝ来表CZ个邮q具体讄已及相关信息Q这里就不在累述说明Q详情参见参考资料中的代码。需要说明的式MailConfig除了要记录一个邮q地址Q用户名和密码外Q还提供2个关键字数组Q如果ؓI,不加qoQ如果关键字有|pȝ会根据发件h和邮件标题中是否包含关键字来q行昄邮g信息Q已保证你的l对自由?/P> <P>首先我们需要实C个MailConfigc,表示邮g配置Q每个MailConfig的对象代表一个邮件帐P我们的系l将能显C多个邮q配置Q每个MailConfig中用一个数l来保存需要过滤的收g人和邮g地址?/P> <P>MailConfigcȝ中的变量如下Q?/P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section> <FONT face="Lucida Console"> String popServer; String popUser; String popPassword; //?|?需 ?q??????Q????????? String [] strFrom; String [] strSubject; //???C????? boolean isViewContent=false; </FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>同样Q我们将使用一个对话框来显C邮件信息,MailDialog需要引用javaMail.jar,和activation.jarq两个类包,保已经有这两个cdq加入到目的类路径中。最后的MailDialog代码如下Q?/P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section> <FONT face="Lucida Console">package myplugin; import java.io.IOException; import java.util.Properties; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.InternetAddress; import javax.swing.JDialog; import javax.swing.JEditorPane; import javax.swing.JTextPane; /** * @author zhaoyong * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class MailDialog extends JDialog { private JEditorPane jEditorPane = null; private JTextPane jTextPane = null; //可以昄多个邮g配置 MailConfig[] mc= null; /** * This method initializes * 构造函? * @param mc : 需要显C的多个邮箱配置对象? */ public MailDialog(MailConfig[] mc) { super(); if(mc!=null) this.mc = mc; else System.err.println("邮g配置错误Q?) ; initialize(); } /** * This method initializes this * 初始? * @return void */ private void initialize() { try { //讑֮昄内容的面? this.setContentPane(getJTextPane()); //取得所有的新邮件信? String s= getAllMailInfo(); //信息显C在对话框中 this.jTextPane .setText(s); this.setTitle("邮g信息"); this.setSize(251, 100); } catch (Exception e) { //发生错误昄错误信息 this.jTextPane .setText(e.toString()); e.printStackTrace(); } } /**取得所有的邮箱的需要监控的邮g信息 * * @return String */ private String getAllMailInfo() { String allMailInfo=""; if (mc.length <1) allMailInfo="没有配置邮箱Q?; else { for(int i=0;i<mc.length;i++) { //循环获取每个邮箱的邮件信? allMailInfo=allMailInfo+getMailInfo(mc[i]); } } //q没有收到相关的邮g if (allMailInfo.trim().length() ==0) allMailInfo="未检到相关新邮Ӟ"; return allMailInfo; } /* *得到一个邮׃满条g的所有新邮g的字W串形式 **/ private String getMailInfo(MailConfig mc) { //最l输出的邮g信息 String mailInfo=""; //每个邮箱服务器上的Store和Folder对象 Store store=null; Folder folder=null; try { Properties props = System.getProperties(); //与邮件服务器生成一个Session Session session = Session.getDefaultInstance( props,null); //l出服务器,用户名,密码q接服务? store = session.getStore("pop3"); store.connect(mc.getPopServer(), mc.getPopUser(),mc.getPopPassword()); //取得默认的邮件Folder folder = store.getDefaultFolder(); if (folder == null) throw new Exception("No default folder"); //取得收g? folder = folder.getFolder("INBOX"); if (folder == null) throw new Exception("No POP3 INBOX"); //以只L式打开收g? folder.open(Folder.READ_ONLY); //获取所有新邮gq处? Message[] msgs = folder.getMessages(); for (int i = 0; i < msgs.length; i++) { Message message= msgs[i]; //取得每封邮g的信息,需要引用MailConfig对象q行关键字过? mailInfo = mailInfo+ getMessageInfo( message,mc); } } catch (Exception ex) { ex.printStackTrace(); } finally { //安全的关闭邮件服务器资源 try { if (folder!=null) folder.close(true); if (store!=null) store.close(); } catch (Exception ex2) {ex2.printStackTrace();} } return mailInfo; } /** * 得到一邮件的信息Q需要根据MailConfigqo * @param mailInfo * @param message * @return 邮g信息 * @throws MessagingException * @throws IOException */ private String getMessageInfo( final Message message ,final MailConfig mc) throws MessagingException, IOException { //q回的改邮g信息 String mailInfo=""; String from=((InternetAddress)message.getFrom()[0]).getPersonal(); if (from==null) from=((InternetAddress)message.getFrom()[0]).getAddress(); String subject=message.getSubject(); //如果满qo信息则显C,否则q回I? if(isElementinString(from,mc.getStrFrom()) ||isElementinString(subject,mc.getStrSubject()) ) { mailInfo=mailInfo+"发g?: "+from+"\n"; mailInfo=mailInfo+"邮g主题 : "+subject+"\n"; mailInfo=mailInfo+"发送时?: "+message.getSentDate() +"\n"; //如果昄内容Q则打印内容 if(mc.isViewContent) mailInfo=mailInfo+message.getContent() +"\n"; mailInfo=mailInfo+"------------------------------------\n"; } return mailInfo; } private JTextPane getJTextPane() { if (jTextPane == null) { jTextPane = new JTextPane(); } return jTextPane; } /** * 判断目标关键字数l中是否有指定的字符?q行qo * @param targetStr Q? * @param keys Q? * @return 如果有,q回trueQ?否则q回false */ private boolean isElementinString(String targetStr,String [] keys) { //没指定过滤条Ӟ昄所? if (keys==null) return true; //指定字符串ؓI,直接q回false if (targetStr==null) return false; for(int i=0;i<keys.length ;i++) { if (targetStr.indexOf(keys[i])>-1) return true; } return false; } } // @jve:decl-index=0:visual-constraint="10,10"Q-说明Q这是Visual Editord的控制信? </FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>以上代码的注释已l保证你能够看清楚,q里׃加篏qͼ有兴的可以自己试试Q体验一切尽在掌握的快感。当然这个例子做的实在简单,因此也ؓ你的q一步开发留有够的余地?/P> <P><A name=N10184><span id="oo8c0ku" class=smalltitle><FONT face=Arial>3.3打包和发?/FONT></SPAN></A></P> <P>到此Q在mypulgin中增加了邮g信息菜单和对话框Q系l的plugin.xml如下Q?/P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section> <FONT face="Lucida Console"><?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.0"?> <plugin id="myplugin" name="Myplugin Plug-in" version="1.0.0" provider-name="" class="myplugin.MypluginPlugin"> <runtime> <library name="myplugin.jar"> <export name="*"/> </library> <library name="lib/javaMail.jar"> <export name="*"/> </library> <library name="lib/activation.jar"> <export name="*"/> </library> </runtime> <requires> <import plugin="org.eclipse.ui"/> <import plugin="org.eclipse.core.runtime"/> </requires> <extension point="org.eclipse.ui.actionSets"> <actionSet label="Sample Action Set" visible="true" id="myplugin.actionSet"> <menu label="我的I间" id="sampleMenu"> <separator name="sampleGroup"> </separator> </menu> <action label="天气预报" icon="icons/sample.gif" class="myplugin.actions.SampleAction" tooltip="Hello, Eclipse world" menubarPath="sampleMenu/sampleGroup" toolbarPath="sampleGroup" id="myplugin.actions.SampleAction"> </action> <action label="邮g信息" icon="icons/sample.gif" class="myplugin.actions.MailAction" tooltip="邮g信息" menubarPath="sampleMenu/sampleGroup" toolbarPath="sampleGroup" id="myplugin.actions.MailAction"> </action> </actionSet> </extension> </plugin> </FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>实际上,我们在一个插件中加入?个功能,因此实C我们的开发环境的自我扩展和定制。同P参考Eclipse的帮助,你可以轻杄再次插件打包导出,q将其加入自qEclipse 的plugins目录Q可能需要解压羃Q,或通过help菜单的Update选项q行安装Q注意导出时需要选定相关的类包。重新启动,你将发现自己的IDE已经多了自己的菜单,开发环境已l随着自己的意愿在改变了,E序员天生的满感a然而生?</P> <P>现在Q你可以在需要的时候点击菜单,了解你希望监控的邮g情况或者最q的天气情况Q一切轻杄在掌握QEclipse的插Ӟ是q样全能?/P><BR> <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> <TBODY> <TR> <TD><IMG height=1 alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"></TD></TR></TBODY></TABLE> <TABLE class=no-print cellSpacing=0 cellPadding=0 align=right> <TBODY> <TR align=right> <TD> <TABLE cellSpacing=0 cellPadding=0 border=0> <TBODY> <TR> <TD vAlign=center><IMG height=16 alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width=16 border=0><BR></TD> <TD vAlign=top align=right><A class=fbox ><B><FONT color=#996699>回页?/FONT></B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR> <P><A name=N10197><span id="y0uyi0w" class=atitle><FONT face=Arial size=4>4.ȝ</FONT></SPAN></A></P> <P>那么Q聪明的你有没有发现什么问题,对,上面的东西太_糙Q太单了Q你可以做进一步的优化设计和功能加强,比如Q自己增加邮仉|文件而不是写在代码里面,动态监控弹出邮仉警(通过事先讑֮的紧急状态)Q你也许q会惌v来很多的新的LQ比如我Z么不能有个能看电q插gQ或是Eclipse中飘出动听的音乐Q别急,q些不一定需要你亲手dQ?<A ><FONT color=#5c81a7>http://sourceforge.net/projects/rocexwang/</FONT></A>有一个播攑֙插gQ但是现在仅能播N乐,国外已经有h用Eclipse开发游戏,也有人用Eclipse来做MISpȝ的。http://www.matrix.org.cn/forum_view.asp?forum_id=25&view_id=10510 有一个国人开发的俄罗斯方块游戏,虽然单了一炏V当Ӟ通过|址 <A ><FONT color=#5c81a7>http://eclipse-plugins.2y.net/eclipse/index.jsp</FONT></A>?<A ><FONT color=#5c81a7>http://www.eclipseplugincentral.com/</FONT></A>你可以找到很多的插gQ如果你知道什么更好的插gQ请告诉我?</P> <P>Eclipse提供了一个纯的框架和插gl构Q得开发Q何功能的插g都能成ؓ现实。本文介l了2个有的Eclipse插g的开发,可以使我们的工作环境增加了两个可q功能,同时也得你具备了基的插件开发能力,借助Eclipse的强大功能,从此你可以把你的Mx变ؓ现实。同时请保持与别人的交流Q我会很乐意了解你的新奇的插Ӟq收藏和学习M好的插gQ打造一个完全属于自q个性化的开发环境。Eclipse在不久的将来成Z个全能的PlatformQ这一点在全世界数以万计的开发h员的手中Q正一点一点变为现实?/P> <P>在这里下载代码: <A ><FONT color=#5c81a7>myplugin.rar</FONT></A>Q这里打包的是整个myplugin目Q解压羃后导入EclipseQ你可能需要重新配|类路径{工作?/P></B></B></B></B></B></B></B></B><img src ="http://m.tkk7.com/Victor/aggbug/23911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Victor/" target="_blank">Victor</a> 2005-12-14 17:39 <a href="http://m.tkk7.com/Victor/articles/23911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开?Eclipse 插ghttp://m.tkk7.com/Victor/articles/23910.htmlVictorVictorWed, 14 Dec 2005 09:38:00 GMThttp://m.tkk7.com/Victor/articles/23910.htmlhttp://m.tkk7.com/Victor/comments/23910.htmlhttp://m.tkk7.com/Victor/articles/23910.html#Feedback0http://m.tkk7.com/Victor/comments/commentRss/23910.htmlhttp://m.tkk7.com/Victor/services/trackbacks/23910.htmlU别: 初

David Gallardo, 软gN

2003 q?3 ?26 ?/P>

在本文中QDavid Gallardo 向您展示了如何?Plug-in Development Environment 的代码生成向导来创徏 Eclipse 插g。您学到如何在q行时工作台中运行和调试插gQƈ且在 Eclipse 中安装完成的插g。David q研I了与打包插件相关的问题 ?包括l护版本信息、以插g片段的Ş式更新功能,以及l合插g来创建完整的功能部g?/BLOCKQUOTE>

Z插g的体pȝ?/FONT>

Eclipse q_?IBM 向开发源码社区捐赠的开发框Ӟ它之所以出名ƈ不是因ؓ IBM 宣称投入开发的资金L ?4 千万元 ?而是因ؓ如此巨大的投入所带来的成果:一个成熟的、精心设计的以及可扩展的体系l构。Eclipse 的h值是它ؓ创徏可扩展的集成开发环境提供了一个开放源码^台。这个^台允怓Q何h构徏与环境和其它工具无缝集成的工兗?/P>

工具?Eclipse 无缝集成的关键是 插g。除了小型的q行时内怹外,Eclipse 中的所有东襉K是插件。从q个角度来讲Q所有功能部仉是以同等的方式创建的。从q个角度来讲Q所有功能部仉是以同等的方式创建的?

但是Q某些插件比其它插g更重要些。Workbench ?Workspace ?Eclipse q_的两个必备的插g ?它们提供了大多数插g使用的扩展点Q如?1 所C。插仉要扩展点才可以插入,q样它才能运行?/P>
?1. Eclipse Workbench ?WorkspaceQ必备的插g支持
Eclipse Workbench

Workbench lg包含了一些扩展点Q例如,允许您的插g扩展 Eclipse 用户界面Qɘq些用户界面带有菜单选择和工h按钮Q请求不同类型事件的通知Q以及创建新视图。Workspace lg包含了可以让您与资源Q包括项目和文gQ交互的扩展炏V?/P>

当然Q其它插件可以扩展的 Eclipse lgq只有 Workbench ?Workspace。此外,q有一?Debug lg可以让您的插件启动程序、与正在q行的程序交互,以及处理错误 ?q是构徏调试器所必需的。虽?Debug lg对于某些cd的应用程序是必需的,但大多数应用E序q不需要它?/P>

q有一?Team lg允许 Eclipse 资源与版本控制系l(VCSQ交互,但除非您正在构徏 VCS ?Eclipse 客户机,否则 Team lgQ就?Debug lg一P不会扩展或增强它的功能?/P>

最后,q有一?Help lg可以让您提供应用E序的联机文档和与上下文敏感的帮助。没有h会否认帮助文档是专业应用E序必备的部分,但它q不是插件功能的必要部分?/P>

上述每个lg提供的扩展点都记录在 Eclipse Platform Help 中,该帮助在 Platform Plug-in Developer 指南的参考部分中。乍一看,其?API 参考大全的 Workbench 部分Q一开始会令h望而却步。我们不会深入了解众多可用扩展点的详l信息,而只是粗略地看一个简单插件及其组件?/P>

回页?/FONT>


插g?/FONT>

创徏插g最单的Ҏ是?Plug-in Development EnvironmentQPDEQ。PDE ?Java Development ToolingQJDTQIDE ?Eclipse 的标准扩展。PDE 提供了一些向g帮助创徏插gQ包括我们将在这里研I的“Hello, world”示例?/P>

?Eclipse 菜单Q选择 File=>New=>OtherQ或?Ctrl-NQ,然后选择 Select 对话框左边的 Plug-in Development 向导。在 Select 对话框的双Q选择 Plug-in Project。按 Next。在下一屏上Q输入项目名Uͼ我用了 com.example.hello 。再ơ按 Next。在下一屏上Q请注意Q插件标识就与项目名U相同。用项目名UC为插件标识可以将该插件与另一个插件的名称发生冲突的机会减到最。再按一?Next。下一屏让您选择是手工创建初始插件代码,q是q行代码生成向导。保留代码生成向导的~省选项Q选择“Hello, World”,然后?NextQ如?2 所C?


?2. 选择“Hello, World”代码生成向?
新插?src="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/figure2.gif"

下一屏要求一些附加信息。请注意q一屏上的信息:它包含了插g名称、版本号、提供者名U和cd。这些是关于插g的重要信息,我们在E后研究。可以接受向导提供的~省倹{按 Next。在下一屏幕上,接受包名、类名和消息文本的缺省倹{选择“Add the action set to the resource perspective”复选框。按 Finish?/P>

如果接到通知Q向导需要启用某些其它插件才能完成,那么?OK?/P>

q一会儿Q向导将完成Q而在您的工作Z会有一个新的项目,名ؓ com.example.hello Q如?3 所C?


?3. PDE 透视图:Welcome to Hello Plug-in
PDE 透视? src=

?Package Explorer 中,工作台的左边是向导创建的一些东西的概述。大多数w不引人关注:包括目c\径中的许?.jar 文gQ这些包括插件和 Java q行时所需?Eclipse c)、一个图标文件夹Q包含了工具栏按钮的囑ŞQ,以及 build.properties 文gQ包含自动构本所使用的变量)?

q里最有意思的东西?src 文g夹,它包含了插g?plugin.xml 文g的源代码 ?plug-in.xml 是插件的清单文g。我们将先查?plugin.xml?/P>

回页?/FONT>


插g清单文g

插g清单文g plugin.xml 包含?Eclipse 插仉成到框架所使用的描qC息。缺省情况下Q当W一ơ创建插件时Q会在清单编辑器区域中打开 plugin.xml。编辑器底部的选项卡让您可以选择关于插g的不同信息集合。Welcome 选项卡显CZ消息“Welcome to Hello Plug-In”,q且要讨Z所使用的模板和关于使用 Eclipse 实现插g的提C。选择“Source”选项卡可以让您查?plugin.xml 文g的完整源代码?/P>

让我们看看插件清单文件的各个部分。首先是关于插g的常规信息,包括它的名称、版本号、实现它的类文g的名U和 .jar 文g名?


清单 1. 插g清单文g ?常规信息

<?xmlversion="1.0" encoding="UTF-8"?>
<plugin
   id="com.example.hello"
   name="Hello Plug-in"
   version="1.0.0"
   provider-name="EXAMPLE"
   class="com.example.hello.HelloPlugin">

   <runtime>
      <library name="hello.jar"/>
   </runtime>
  

接着Q列Z我们的插件所需的插Ӟ


清单 2. 插g清单文g ?必需的插?/B>

   <requires>
      <import plugin="org.eclipse.core.resources"/>
      <import plugin="org.eclipse.ui"/>
   </requires>

列出的第一个插?org.eclipse.core.resources 是工作区插gQ但实际上我们的插gq不需要它。第二个插g org.eclipse.ui 是工作台。我们需要工作台插gQ因为我们将扩展它的两个扩展点,正如后面?extension 标记所指出的?

W一?extension 标记拥有点属?org.eclipse.ui.actionSets 。操作集合是插gd到工作台用户界面的一l?基?/I>?卻I菜单、菜单项和工h。操作集合分l了基|q样用户可以更方便地理它们。例如,我们?Hello 插g的菜单和工具栏项出现在 Resource 透视图中Q因为当在运行代码生成向导时Q我们做了这L选择。如果用戯更改它,可以使用 Window=>Customize Perspective菜单选项从要?Resource 透视图中昄的项中除厠ZSample Action Set”?


?4. 定制 Resource 透视?
Resource 透视? src=

操作集合包含了两个标讎ͼ menu 标记Q描q菜单项应该出现在工作台菜单的什么位|,以及如何出现Q和 action 标记Q描q它应该做什么)?其?action 标记标识了执行操作的cR注Q这个类不是上面列出的插件类?


清单 3. 操作集合

   <extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            label="Sample Action Set"
            visible="true"
            id="com.example.hello.actionSet">
         <menu
               label="Sample &Menu"
               id="sampleMenu">
            <separator
                  name="sampleGroup">
            </separator>
         </menu>
         <action
               label="&Sample Action"
               icon="icons/sample.gif"
               class="com.example.hello.actions.SampleAction"
               tooltip="Hello, Eclipse world"
               menubarPath="sampleMenu/sampleGroup"
               toolbarPath="sampleGroup"
               id="com.example.hello.actions.SampleAction">
         </action>
      </actionSet>
   </extension>

许多菜单和操作属性的目的相当明显 ?例如Q提供工hC文本和标识工具栏项的图形。但q要注意 action 标记中的 menubarPath Q这个属性标识了 menu 标记中定义的哪个菜单调?action 标记中定义的操作。有兌个和其它工作台扩展点的详l信息,请参?Platform Plug-in Developer GuideQ尤其是“Plugging into the workbench”章节(可以?Eclipse 的帮助菜单中获取该指南)?

׃我们选择了将插gd?Resource 透视图,于是生成了第二个 extension 标记。这个标CD?Eclipse W一ơ启动ƈ装入我们的插件时Q将插gd?Resource 透视图?/P>
清单 4. extension 标记

   <extension
         point="org.eclipse.ui.perspectiveExtensions">
      <perspectiveExtension
            targetID="org.eclipse.ui.resourcePerspective">
         <actionSet
               id="com.example.hello.actionSet">
         </actionSet>
      </perspectiveExtension>
   </extension>
</plugin>

如果忽略q最后一?extensionQ用户就需要?Window=>Customize Perspective插件添加到 ResourceQ或其它Q透视图?



回页?/FONT>


插g源代?/FONT>

代码生成向导生成了两?Java 源文Ӟ打开 PDE Package Explorer 中的 src 文g夹就可以看到它们。第一个文?HelloPlugin.java 是插件类Q它l承?AbstractUIPlugin 抽象cR?HelloPlugin 负责理插g的生命周期,在更为扩展的应用E序中,它负责维护诸如对话框讄和用户首选项{内宏V?HelloPlugin 要做的事p么多Q?


清单 5. HelloPlugin

packagecom.example.hello.actions;

import org.eclipse.ui.plugin.*;
import org.eclipse.core.runtime.*;
import org.eclipse.core.resources.*;
import java.util.*;

/**
 * The main plugin class to be used in the desktop.
 */
public class HelloPlugin extends AbstractUIPlugin {
      //The shared instance.
      private static HelloPlugin plugin;
      //Resource bundle.
      private ResourceBundle resourceBundle;

      /**
       * The constructor.
       */
      public HelloPlugin(IPluginDescriptor descriptor) {
            super(descriptor);
            plugin = this;
            try {
                  resourceBundle= ResourceBundle.getBundle(
                       "com.example.hello.HelloPluginResources");
            } catch (MissingResourceException x) {
                  resourceBundle = null;
            }
      }

      /**
       * Returns the shared instance.
       */
      public static HelloPlugin getDefault() {
            return plugin;
      }

      /**
       * Returns the workspace instance.
       */
      public static IWorkspace getWorkspace() {
            return ResourcesPlugin.getWorkspace();
      }

      /**
       * Returns the string from the plugin's resource bundle,
       * or 'key' if not found.
       */
      public static String getResourceString(String key) {
            ResourceBundle bundle= HelloPlugin.getDefault().getResourceBundle();
            try {
                  return bundle.getString(key);
            } catch (MissingResourceException e) {
                  return key;
            }
      }

      /**
      * Returns the plugin's resource bundle,
      */
      public ResourceBundle getResourceBundle() {
          return resourceBundle;
      }
}

W二个源文g SampleAction.java 包含的类执行在清单文g的操作集合中指定的操作?SampleAction 实现?IWorkbenchWindowActionDelegate 接口Q它允许 Eclipse 使用插g的代理,q样不是在万不得已的情况下,Eclipse 无需装入插gQ这优化工作在装入插件时发生内存和性能斚w的问题降到最低)?IWorkbenchWindowActionDelegate 接口Ҏ使插件可以与代理q行交互Q?


清单 6. IWorkbenchWindowActionDelegate 接口Ҏ

package com.example.hello.actions;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import org.eclipse.jface.dialogs.MessageDialog;

/**
 * Our sample action implements workbench action delegate.
 * The action proxy will be created by the workbench and
 * shown in the UI. When the user tries to use the action,
 * this delegate will be created and execution will be
 * delegated to it.
 * @see IWorkbenchWindowActionDelegate
 */
public class SampleAction implements IWorkbenchWindowActionDelegate {
      private IWorkbenchWindow window;
      /**
       * The constructor.
       */
      public SampleAction() {
      }

      /**
       * The action has been activated. The argument of the
       * method represents the 'real' action sitting
       * in the workbench UI.
       * @see IWorkbenchWindowActionDelegate#run
       */
      public void run(IAction action) {
            MessageDialog.openInformation(
                  window.getShell(),
                  "Hello Plug-in",
                  "Hello, Eclipse world");
      }

      /**
       * Selection in the workbench has been changed. We
       * can change the state of the 'real' action here
       * if we want, but this can only happen after
       * the delegate has been created.
       * @see IWorkbenchWindowActionDelegate#selectionChanged
       */
      public void selectionChanged(IAction action, ISelection selection) {
      }

      /**
       * We can use this method to dispose of any system
       * resources we previously allocated.
       * @see IWorkbenchWindowActionDelegate#dispose
       */
      public void dispose() {
      }

      /**
       * We will cache window object in order to
       * be able to provide parent shell for the message dialog.
       * @see IWorkbenchWindowActionDelegate#init
       */
      public void init(IWorkbenchWindow window) {
            this.window = window;
      }
}



回页?/FONT>


q行和调试插?/FONT>

当开?Eclipse 的插件时Q必d?Eclipse q用新的插g重新启动它以便进行测试和调试Q这很笨拙。幸好,Eclipse PDE 提供了一个自托管Qself-hostedQ的开发环境,它让您无需插件安装在工作台的单独实例中即可运行?/P>

要运?Hello 插gQ选择 Run=>Run As=>Run-time Workbench来启动另一?Workbench 实例Q而该实例d了插件的菜单选项和工hQ如?5 所C?


?5. 在运行时工作Cq行?Hello 插g
Hello 插g

我们可以通过单击工具栏按钮或从“Sample Menu”菜单激zL件。Q何一U方法都会生成一个框Q其标题是“Hello Plug-in”,内容是“Hello, Eclipse world”,以及一?OK 按钮Q按该按钮可以关闭这个框?/P>

通过选择 Run=>Debug As=>Run-time WorkbenchQ按cM的方法调试插件。这ơ,当插件在W二个工作台实例中运行时Q我们可以在最初的工作C单步执行源代码,以及查变量等?

一旦插件经q测试ƈ准备发布Q我们就需要将它适当打包Q以便在 Eclipse 中安装?/P>

回页?/FONT>


打包插g

Eclipse 在启动时会查看其插g目录来确定要装入哪些插g。要安装插gQ我们需要在插g目录中创Z个子目录Qƈ程序文件和清单文g复制到那里。徏议目录名U能表示插g的标识,q且后面跟下划线和版本号Q但是这U做法不是必需的。假?Eclipse 安装?C:\eclipse 中;我们要创Z个目录:

C:\eclipse\plugins\com.example.hello_1.0.0.

按照 Java E序的标准,我们的程序文仉要归档到 .jar 文g??我们的插件清单文Ӟ您也许记得它包含q个:


   <runtime>
      <library name="hello.jar"/>
   </runtime>

要创?hello.jar 文gQ我们可以通过H出昄目名称Qƈ?Eclipse 菜单选择 File=>ExportQ以导出插g文g。选择 JAR 文g作ؓ导出方式Q按 NextQ然后浏览到我们为它创徏的目录。下一步,我们q需要将 plugin.xml 文g复制到这个目录。也可以使用 File=>Export菜单选项Q但误C选择 File System 作ؓ导出目的圎ͼ?

q就是安装插件所需的全部操作,但您需要停止ƈ重新启动 EclipseQ以便能识别q个新的插g。从帮助菜单中选择“About Eclipse Platform”,可以扑ֈ关于已安装插件的信息Q包括版本号。在出现的屏q上有一个按钮是 Plug-in DetailsQ向下滚动列表来L Hello 插g及其版本受?/P>

回页?/FONT>


更新插g版本

在目录名UC包含版本L目的是允许在同一台机器上共存某个插g的多个版本(每次只装入一个版本)。我们可以通过创徏一?Hello 插g的已更新版本来看看这是如何工作的Q例如,?plugin.xml 文g中的版本hҎ?.0.1”,然后?SampleAction.java 中的文本更改成“New and improved Hello, Eclipse world”。从 Eclipse 菜单中选择 Project=> Rebuild All。下一步,项目文件以 JAR 形式导出到新的插件目录,例如Q?com.example.hello_1.0.1 。将修订q的 plugin.xml 文g复制到同一个目录中。当停止q新启?Eclipse Ӟ只会装入已更新的插g?



回页?/FONT>


插g片段和功能部?/FONT>

Eclipse 由插件组成,但在开?Eclipse 的插件时Q还要慎重考虑另外两个U别的组??插g片段和功能部件?/P>

插g 片段Q如名称所暗示的)是完整插件的l成部分 ?目标插g。片D|供的功能与目标插件的功能合ƈ。片D可以用于将插g本地化成各种语言Q在无需形成一个全新发行版的情况下Q以增量形式功能部件添加到现有插gQ或者提供特定于q_的功能。在许多斚wQ片D与插g一栗主要的区别是片段没有插gc??片段的生命周期由其目标插件管理。此外,片段的清单文件叫?fragment.xmlQ它列出了目标插件的标识和版本号Q以及片D늚标识和版本号?

另一斚wQ插?功能部gҎ不包含编码。在 Eclipse 体系l构术语中,功能部g是将一l相x件打包到完整的品中。例如,JDT 是包含了?Java ~辑器、调试器和控制台q样的插件的功能部g。名?feature.xml 的清单文件描qC一个功能部件归档文件。在其中Q该清单文g包含了对该功能部件所包含的插件和其它资源的引用、关于如何更新该功能部g的信息、版权信息和许可证信息?

?Eclipse 中, d能部?/I>讄?Eclipse q_的外观。主功能部g旨在定诸如l予 Eclipse 其n份的闪屏和其它特征之cȝ东西。Eclipse 只允怸个主功能部g。用q种方式Q通过创徏一l插Ӟ它们打包到功能部g中,q且使这个功能部件成Z功能部gQ就可以重新创徏 Eclipse 的品牌,q将它用于创建全C不同的品。如果从 Eclipse.org 下蝲Q缺省主功能部g?eclipse.org.platform ?



回页?/FONT>


后箋步骤

在插件的介绍里我们只是稍微了解一些插件的必要用法。学习插件的更多知识的最佛_考资料是 Plug-in Developer's GuideQ可以从 Eclipse 中的帮助菜单中获得该指南。该文档包含了编E指南、Eclipse API 和插件扩展点的参考大全、Eclipse.org 上可用的~程CZ的指南,以及常见问题列表。另一个优U参考资料是 Eclipse 本n的源代码。根据您的兴,您也许想要查找一些示例,以了解不同工作台功能部gQ如视图和编辑器Q是如何扩展的,或者如何?SWTQEclipse 囑Ş APIQ。此外,下面?参考资?/FONT>可以帮助您学到更多知识?



Victor 2005-12-14 17:38 发表评论
]]> վ֩ģ壺 պƷרҹ| պƷƵ߹ۿ| 97ƵѲ| AVһAV| Ƶ| þ޾ƷAB벥| պƷƵѹۿ | ҹ˾ƷӰ߹ۿ| ߹ۿվ| ִִֻˬƵ| þþþ޹AV鶹| ȫվ| ۲ӰԺѹۿ| ޾Ʒxxx| 95ѹۿƵ| һĻߵӰ | ŷպٲ | Ʒպһ| aëƬ˾þ| ɫͼ߹ۿ| ĻmvƵ7| 鶹һ| ҹľƷ| 7x7x7x߹ۿ| ޿һ | ޹Ʒþþ | ŮŮվѿ| Ƶ| ɫƵ߹ۿ| ëƬվ| j8ֳִӲˬƵ| ҹδʮ| ҹëƬѹۿƵ| Ƭѹۿ| ߲| þþþAVרվ| 57paoһƵ| aר߹ۿ| þþƷƷɫ| ˵ĺÿѹۿƵ| |