﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-VincentChen‘s Blog-文章分类-Eclipse</title><link>http://www.blogjava.net/Vencent/category/7756.html</link><description>&lt;font color='orange'&gt;本博客仅为收集所用。在此对原作者表示感谢。&lt;/font&gt;
&lt;div class="custom"&gt;
&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6256612161572960";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel ="";
google_page_url = document.location;
google_color_border = ["FFDDAA","FFDDAA","FFDDAA","FFDDAA"];
google_color_bg = ["FFDDAA","FFDDAA","FFDDAA","FFDDAA"];
google_color_link = ["FFDDAA","0033FF","00008B","99CC33"];
google_color_url = ["999999","0033FF","00008B","FFCC00"];
google_color_text = ["0033FF","AA9999","0033FF","AA9999"];
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:24:34 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:24:34 GMT</pubDate><ttl>60</ttl><item><title>也谈Eclipse中的远程调试</title><link>http://www.blogjava.net/Vencent/articles/52833.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Wed, 14 Jun 2006 11:49:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/52833.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/52833.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/52833.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/52833.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/52833.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="text-indent: 18.75pt; line-height: 150%; text-align: center;" align="center">
				<b>
						<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">
								<br />
								<span lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</span>
				</b>
		</p>
		<p class="MsoNormal" style="text-indent: 18.75pt; line-height: 150%; text-align: left;" align="left">
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">问题的由来：平时的开发，我们基本都是在</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">Debug</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">模
式下做的，这样便于发现问题给于修正。一旦项目到了实施测阶段，程序被部署到服务器上，现场调试就会成为一个问题。因为被部署的服务器上的日志往往不能提
供足够的信息；或是有了足够的信息，可即时想得到一个状态点的信息又不是太容易（比如说几个关键变量的即时值）。于是想到，如果可以象本机调试程序一样就
好了。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="text-indent: 18.75pt; line-height: 150%; text-align: left;" align="left">
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">于是（呵呵，又是于是），</span>
				<span class="SpellE">
						<b>
								<i>
										<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">google</span>
								</i>
						</b>
				</span>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">了一下，真得还是找到了一篇文章（先谢谢了），做法是<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="text-indent: 18.75pt; line-height: 150%; text-align: left;" align="left">
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">只要在</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">TOMCAT</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">的启动文件中加入一些参数就可以在</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">ECLIPSE</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">中启动</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">REMOTE_DEBUG</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">了，具体方法如下：</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">
								<br />
						</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">在</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">%TOMCAT_HOME%\bin\<span class="SpellE">catalina.bat</span></span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">文件中加入</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">SET CATALINA_OPTS=-server -<span class="SpellE">Xdebug</span> -<span class="SpellE">Xnoagent</span> -<span class="SpellE">Djava.compiler</span>=NONE -<span class="SpellE">Xrunjdwp:transport</span>=<span class="SpellE">dt_socket,server</span>=<span class="SpellE">y,suspend</span>=<span class="SpellE">n,address</span>=9046</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">。</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">
								<br />
						</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">打开</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">ECLIPSE</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">，在</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">ECLIPSE</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">的</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">RUN</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">菜单中选择</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">DEBUG...</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">项，然后在左边的树形菜单中新增一个</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">REMOTE_DEBUG(</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">远程调试</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">)</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">，填</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;">
						</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">写最基本的几项信息就行了，这几项信息是：调试名称，工程名称，调试主机的</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">URL</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">以及</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">PORT</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">，在</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">allow terminate of remote VM</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">前打上勾</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">.</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">最主要的就是端口信息，这个端口信息来自于上面那一串参数中的</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">address</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">项，可以将</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">address</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">设置为任何未被占用的端口。</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">
								<br />
						</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">以控制台方式启动</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">TOMCAT</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">，可以在控制台看到</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">"Listening for transport <span class="SpellE">dt_socket</span> at address: 5888"</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">这样的信息，说明调试端口已经被监听。然后打开之前设置的调试并在</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">IE</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">或者</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">ECLIPSE</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">内置的浏览器中输入</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">URL</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">运行</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">WEB</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">程序，记得在运行</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">WEB</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">程序之前要设置断点。</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">
								<br />
						</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">现在就可以在</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">ECLIPSE</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">中进行</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">WEB</span>
				</b>
				<b>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;">调试了</span>
						<i>
						</i>
				</b>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">...<o:p></o:p></span>
						</i>
				</b>
		</p>
		<p class="MsoNormal" style="text-indent: 18.75pt; line-height: 150%; text-align: left;" align="left">
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">要说明的是：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="text-indent: 18.75pt; line-height: 150%; text-align: left;" align="left">
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">我并没按上文那样设置变量。我看了</span>
				<span class="SpellE">
						<b>
								<i>
										<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">catalina.bat</span>
								</i>
						</b>
				</span>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">这个批处理文件，写的很严谨，环境变量设置有它自己的规范，我不想更改。在这个文件我看到了这么一个名字</span>
				<span class="SpellE">
						<b>
								<i>
										<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">setenv.bat</span>
								</i>
						</b>
				</span>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">。对了，看到它你就知道，你可以建立这么一个文件把</span>
				<b>
						<i>
								<span style="font-size: 9pt; line-height: 150%; font-family: 新宋体;" lang="EN-US">SET CATALINA_OPTS=-server -<span class="SpellE">Xdebug</span> -<span class="SpellE">Xnoagent</span> -<span class="SpellE">Djava.compiler</span>=NONE -<span class="SpellE">Xrunjdwp:transport</span>=<span class="SpellE"><span style="color: blue;">dt_socket</span>,server</span>=<span class="SpellE">y,suspend</span>=<span class="SpellE">n,address</span>=9046</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">放进去，<span lang="EN-US">OK</span>啦。但这是只是</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">windows</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">中的作法。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="text-indent: 18.75pt; line-height: 150%; text-align: left;" align="left">
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">岔开说一句话。其实，上面的参数设置并不是都需要的，主要的就两项：</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">transport</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">和</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">address</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">，对应于</span>
				<span class="SpellE">
						<b>
								<i>
										<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">catalina.bat</span>
								</i>
						</b>
				</span>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">文件中</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">JPDA_TRANSPORT</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">和</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">JPDA_ADDRESS</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">现两个变量，你可以直接查询并修改这两个参数的值，注意</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">JPDA_TRANSPORT</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">的值一定是</span>
				<span class="SpellE">
						<b>
								<i>
										<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">dt_socket</span>
								</i>
						</b>
				</span>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">才行。不过启动方式有些变化，命令行需要这样：</span>
				<span class="SpellE">
						<b>
								<i>
										<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">catalina.bat</span>
								</i>
						</b>
				</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">
										<span class="SpellE">jpda</span> start</span>
						</i>
				</b>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: 新宋体;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</i>
				</b>
		</p>
		<p class="MsoNormal" style="text-indent: 18.75pt; line-height: 150%; text-align: left;" align="left">
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">在</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">Linux</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">中，可以直接</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">./</span>
						</i>
				</b>
				<span class="SpellE">
						<b>
								<i>
										<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">catalina.sh</span>
								</i>
						</b>
				</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">
										<span class="SpellE">jpda</span> start</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">命令直接启动调试模式，不过默认的端口是</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">8000</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;" lang="EN-US">,</span>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">你也可以在</span>
				<span class="SpellE">
						<b>
								<i>
										<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">catalina.sh</span>
								</i>
						</b>
				</span>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">查找</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">JPDA_ADDRESS="8000"</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">把端口修改想要的值。至于写配置文件</span>
				<span class="SpellE">
						<b>
								<i>
										<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">setenv.sh</span>
								</i>
						</b>
				</span>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">直接用</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">./<span class="SpellE">starup.sh</span></span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">启动的形式，我没成功，呵呵<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="text-indent: 18.75pt; line-height: 150%; text-align: left;" align="left">
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">下面这个就是</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">Eclipse</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">中的</span>
				<b>
						<i>
								<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">Debug</span>
						</i>
				</b>
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">设置窗口了，别告诉我你不会调出来，呵呵<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="line-height: 150%; text-align: left;" align="left">
				<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;" lang="EN-US">
						<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:preferrelative="t" o:spt="75" filled="f" stroked="f" path=" m@4@5 l@4@11@9@11@9@5 xe">
								<v:stroke joinstyle="miter">
								</v:stroke>
								<v:formulas>
										<v:f eqn="if lineDrawn pixelLineWidth 0 ">
										</v:f>
										<v:f eqn="sum @0 1 0 ">
										</v:f>
										<v:f eqn="sum 0 0 @1 ">
										</v:f>
										<v:f eqn="prod @2 1 2 ">
										</v:f>
										<v:f eqn="prod @3 21600 pixelWidth ">
										</v:f>
										<v:f eqn="prod @3 21600 pixelHeight ">
										</v:f>
										<v:f eqn="sum @0 0 1 ">
										</v:f>
										<v:f eqn="prod @6 1 2 ">
										</v:f>
										<v:f eqn="prod @7 21600 pixelWidth ">
										</v:f>
										<v:f eqn="sum @8 21600 0 ">
										</v:f>
										<v:f eqn="prod @7 21600 pixelHeight ">
										</v:f>
										<v:f eqn="sum @10 21600 0 ">
										</v:f>
								</v:formulas>
								<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect">
								</v:path>
								<o:lock aspectratio="t" v:ext="edit">
								</o:lock>
						</v:shapetype>
						<img id="ViewPicture1_GalleryImage" style="border: 2px solid black; width: 514px; height: 480px;" alt="remote.jpg" src="../../images/blogjava_net/ardorleo/12164/r_remote.jpg" /> <o:p></o:p></span>
		</p>
		<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">这里，我在本机也用</span>
		<b>
				<i>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">remote</span>
				</i>
		</b>
		<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">调试程序。当然，自然是有好处的了。</span>
		<b>
				<i>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">eclipse</span>
				</i>
		</b>
		<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">中调程序的都知道，在</span>
		<b>
				<i>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">eclipse</span>
				</i>
		</b>
		<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">中再启动其他服务（不一定是</span>
		<b>
				<i>
						<span style="font-size: 9pt; color: black; line-height: 150%; font-family: Verdana;" lang="EN-US">Tomcat</span>
				</i>
		</b>
		<span style="font-size: 12pt; color: black; line-height: 150%; font-family: 新宋体;">啦），会使<span lang="EN-US">eclipse</span>编辑的响应速度急剧下降，甚至假死，很是不爽！现在好了，这么一设，既有了速度，又可以设调试断点，哈哈，舒服啊。</span>
<img src ="http://www.blogjava.net/Vencent/aggbug/52833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-06-14 19:49 <a href="http://www.blogjava.net/Vencent/articles/52833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>完全调配Eclipse＋JBOSS4.0进行J2EE开发[实战]</title><link>http://www.blogjava.net/Vencent/articles/39251.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Tue, 04 Apr 2006 13:07:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/39251.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/39251.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/39251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/39251.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/39251.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="center">
				<span style="font-size: 12pt; font-family: 宋体;">
						<strong>完全调配Eclipse＋JBOSS4.0进行J2EE开发<o:p></o:p></strong>
						<br />
						<br />编写人：Q龙（邱洋）<br />联系QQ：1964477<br />电子邮件：<a href="mailto:qxk2005@gmail.com">qxk2005@gmail.com</a></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">一、安装所需软件<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 下载并且安装eclipse3.1.2，推荐使用lomboz-wtp-emf-gef-jem-eclipse-SDK-3.1.2-win32.zip这个完整的打包文件<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">http://download.zh.forge.objectweb.org/lomboz/lomboz-wtp-emf-gef-jem-eclipse-SDK-3.1.2-win32.zip<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 下载安装JBoss4.0.4RC1<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">http://jaist.dl.sourceforge.net/sourceforge/jboss/jboss-4.0.4RC1.zip<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 下载安装MyEclipse4.1GA<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 下载JBossIDE-1.5.1.GA-Bundle-win32，并且作为插件安装到eclipse目录<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">http://jaist.dl.sourceforge.net/sourceforge/jboss/JBossIDE-1.5.1.GA-Bundle-win32.zip<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">二、建立一个新的J2EE HelloWorld工程（假定上述程序都完全安装）<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 依次点击：菜单→File→New→Project 从列表中选择 EJB→EJB Project（记得是独立的EJB目录，不是MyEclipse→EJB或者其他），然后点击Next按钮<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
						<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
								<v:stroke joinstyle="miter">
								</v:stroke>
								<v:formulas>
										<v:f eqn="if lineDrawn pixelLineWidth 0">
										</v:f>
										<v:f eqn="sum @0 1 0">
										</v:f>
										<v:f eqn="sum 0 0 @1">
										</v:f>
										<v:f eqn="prod @2 1 2">
										</v:f>
										<v:f eqn="prod @3 21600 pixelWidth">
										</v:f>
										<v:f eqn="prod @3 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @0 0 1">
										</v:f>
										<v:f eqn="prod @6 1 2">
										</v:f>
										<v:f eqn="prod @7 21600 pixelWidth">
										</v:f>
										<v:f eqn="sum @8 21600 0">
										</v:f>
										<v:f eqn="prod @7 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @10 21600 0">
										</v:f>
								</v:formulas>
								<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect">
								</v:path>
								<o:lock v:ext="edit" aspectratio="t">
								</o:lock>
						</v:shapetype>
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"> 
				<span style="font-size: 12pt; font-family: 宋体;"><br /><o:p></o:p></span></p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">●
在Project Name中输入HelloWorld，在Target runtime中选择JBoss
v4.0如果没有这个选项，则点击[New]按钮建立一个，具体方法参看下列图片，中间可能涉及到让你指定xdoclet目录的情况，请到下列网址下载
xdoclet-bin-1.2.3.zip<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">http://jaist.dl.sourceforge.net/sourceforge/xdoclet/xdoclet-bin-1.2.3.zip<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<br /> 
						<br /><br /><img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/3.JPG" /> <br /><img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/4.JPG" /><br /></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"> </p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">（↑这个图片中的JRE列表中的j2sdk1.40是在eclipse中设置好的，步骤为：菜单→Window→Preferences→MyEclipse→Application Servers→JBoss4→JDK→Add，如下图所示↓）<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<br />
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/5.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 在选择成JBoss v4.0之后点击下一步，然后勾选所有可以勾选的选项<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<br />
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/6.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 将Source Folder修改为src（原来为ejbModule），然后点击Finish按钮<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<br />
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/7.JPG" /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 之后生成的目录结构如下图↓<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<br />
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/8.JPG" /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 菜单→File→New→Package，输入一个包名 cn.tkey （包的名字随意），然后点击Finish按钮<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/9.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">↓就是现在的目录结构<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/10.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 菜单→File→New→Other，然后在树形菜单中选择EJB→XDoclet Enterprise JavaBean，然后点击Next按钮<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/11.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 选中SessionBean 并且点击 Next按钮<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/12.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 在Class name中输入HelloWorldBean（注意：这个名称的后缀必须是Bean，比如xxxBean） ，然后点击 Next按钮<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/13.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">●
将EJB Name、JNDI Name、Display
Name都修改为HelloWorldEJB（默认为HelloWorld，之所以写成HelloWorldEJB是为了清楚这个类是一个EJB调用，如
果可以记清楚，可以不用修改），其他选项使用默认，然后点击Finish按钮完成添加<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/14.JPG" /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 修改生成的HelloWorldBean.java文件，将 foo 方法修改并且保存，修改为：<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<span style="">
						</span>
				</span>
		</p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
				<img id="Codehighlighter1_39_100_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_100_Open_Text.style.display='none'; Codehighlighter1_39_100_Closed_Image.style.display='inline'; Codehighlighter1_39_100_Closed_Text.style.display='inline';" src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_39_100_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_39_100_Closed_Text.style.display='none'; Codehighlighter1_39_100_Open_Image.style.display='inline'; Codehighlighter1_39_100_Open_Text.style.display='inline';" src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/ContractedBlock.gif" align="top" />
				<span style="color: rgb(0, 0, 0);">       </span>
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> String foo(String param) </span>
				<span id="Codehighlighter1_39_100_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/dot.gif" />
				</span>
				<span id="Codehighlighter1_39_100_Open_Text">
						<span style="color: rgb(0, 0, 0);">{<br /><img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/InBlock.gif" align="top" /><br /><img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/InBlock.gif" align="top" />            </span>
						<span style="color: rgb(0, 0, 255);">return</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">Hello World and welcome </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">+</span>
						<span style="color: rgb(0, 0, 0);">param;<br /><img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/InBlock.gif" align="top" /><br /><img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/ExpandedBlockEnd.gif" align="top" />    }</span>
				</span>
				<span style="color: rgb(0, 0, 0);">
						<br />
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/None.gif" align="top" />
				</span>
		</div>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● </span>
				<span style="font-size: 12pt; font-family: 宋体;">菜单</span>
				<span style="font-size: 12pt; font-family: 宋体;">→<span lang="EN-US">File→New→Other，</span></span>
				<span style="font-size: 12pt; font-family: 宋体;">然后在树形菜单中选择</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">JBoss-IDE→EJB Componets→EJB Test Client，</span>
				<span style="font-size: 12pt; font-family: 宋体;">然后点击</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Next</span>
				<span style="font-size: 12pt; font-family: 宋体;">按钮</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/15.JPG" /> <br /><o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<br />●
在Name中填入EJBTest，在JNDI
Name修改为HelloWorldEJB（这个名字我们可以依次进入%工程目录%/src/META-INF，查看jboss.xml文件中的&lt;
jndi-name&gt;HelloWorldEJB&lt;/jndi-name&gt;这一行，填写&lt;jndi-name&gt;&lt;
/jndi-name&gt;中的部分，这里就是HelloWorldEJB），在Remote
Interface中输入cn.tkey.HelloWorldEJB，在Home
Interface中输入cn.tkey.HelloWorldEJBHome，然后勾选foo(java.lang.String
param)选项，最后点击Finish按钮结束配置。<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/16.JPG" /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">●
菜单→Project→Properties，在树形菜单中选择Java Build Path，然后选择[Libraries]选项卡，点击[Add
External
JARs..]按钮，之后进入%JBOSS_HOME%/client中，选中这个下面的除了jboss-j2ee.jar之外的所有jar文件，最后点
击ok按钮完成配置<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/17.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 菜单→Project→Clean→选中Clean projects selected below，然后勾选 HelloWorld工程之后点击[ok]按钮完成重新编译<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">●
进入到windows的命令行状态，然后进入%工程目录%/build/classes，输入 jar cvf helloworld.jar
*，将生成的helloworld.jar文件拷贝到%JBOSS_HOME%/server/default/deploy目录中<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/18.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 运行Jboss4.0你将在控制台中看到下列信息，表明EJB已经被加入到JBoss中去了：<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/19.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">● 回到eclipse中，修改刚生成的EJBTest.java文件，将方法public void testFoo() 修改为：<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<span style="">
						</span>
				</span>
		</p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"> 
				<img id="Codehighlighter1_43_450_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_43_450_Closed_Text.style.display='none'; Codehighlighter1_43_450_Open_Image.style.display='inline'; Codehighlighter1_43_450_Open_Text.style.display='inline';" src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> testFoo() </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> Exception </span><span id="Codehighlighter1_43_450_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/dot.gif" /></span><span id="Codehighlighter1_43_450_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><br />       cn.tkey.HelloWorldEJB instance;<br />        java.lang.String result;<br /><br /> <br /><br />       </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> Parameters</span><span style="color: rgb(0, 128, 0);"><br /> 
								</span><span style="color: rgb(0, 0, 0);"><br />
								       java.lang.String param0 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br /><br /> <br /><br />       </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> Instance creation</span><span style="color: rgb(0, 128, 0);"><br /> 
								</span><span style="color: rgb(0, 0, 0);"><br />
								       instance </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.home.create();<br /><br /> <br /><br />       </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> Method call</span><span style="color: rgb(0, 128, 0);"><br /> 
								</span><span style="color: rgb(0, 0, 0);"><br />
								       result </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> instance.foo(param0);<br /><br />       <br /><br />       System.out.println(instance.foo(param0));<br /><br /> <br /><br />       </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> Various assertions<br /><br />       </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> assertNotNull(result);</span><span style="color: rgb(0, 128, 0);"><br /> 
								</span><span style="color: rgb(0, 0, 0);"><br />
								    }</span></span><span style="color: rgb(0, 0, 0);"><br /><br /></span></div>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<span style="font-size: 12pt; font-family: 宋体;">● </span>
				<span style="font-size: 12pt; font-family: 宋体;">开始测试</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">EJB，</span>
				<span style="font-size: 12pt; font-family: 宋体;">用右键选中我们刚才生成的</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">EJBTest.java，</span>
				<span style="font-size: 12pt; font-family: 宋体;">依次选择</span>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Run As→JUnit Test<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/20.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<span style="font-size: 12pt; font-family: 宋体;">● 最后当我们看到eclipse右下角出现如下图所示的输出的时候，说明我们的J2EE之旅开始了！而这个Hello World and welcome null 却是来自于另外一个世界的声音他就是JBoss<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<span style="font-size: 8.5pt; font-family: 'MS Sans Serif';">
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">
						<img src="file:///E:/%D0%C2%BD%A8%CE%C4%BC%FE%BC%D0%20%282%29/38871_files/21.JPG" />
						<br /> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">注解：所有用%xxx%表示的意思是xxx的根目录，比如我的jboss被安装到了c:\jboss4.0，那么%JBOSS_HOME%就代表c:\jboss4.0，因为台机器安装的jboss目录以及其他目录都不尽相同，所以就采用这种方式。<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">其
中%工程目录%表示eclipse工程的安装目录，比如在运行eclipse的时候会提示让你输入一个工作目录，然后你再建立新工程的时候就会全部在这个
目录下面建立新的子目录，比如我的eclipse工作目录为c:\workshop，我的EJB工程名为HelloWorld，那么我的%工程目录%，就
代表c:\workshop\HelloWorld<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;"> <o:p></o:p></span>
		</p>
		<span style="font-size: 12pt; font-family: 宋体;">教程中涉及到的[ok]、[Finish]，代表ok按钮，Finish按钮的意思，里面的"[]"括号没有任何意义，只起到醒目的作用</span>
<img src ="http://www.blogjava.net/Vencent/aggbug/39251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-04-04 21:07 <a href="http://www.blogjava.net/Vencent/articles/39251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我为什么要教 Eclipse</title><link>http://www.blogjava.net/Vencent/articles/35983.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Sat, 18 Mar 2006 13:25:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/35983.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/35983.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/35983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/35983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/35983.html</trackback:ping><description><![CDATA[
		<p>级别: 初级</p>
		<p>
				<a href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#author">Gary Pollice</a>, 实践教授, 伍斯特工业学院<br /></p>
		<p>2005 年  9 月  07 日</p>
		<blockquote>本文来自于 Rational Edge：在 Gary Pollice 本月的专栏中，他讨论了 Eclipse 技术的优点并解释了为什么他和伍斯特工业学院的其他教师在他们的课程中使用 Eclipse。</blockquote>
		<p>
				<img alt="插图" src="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/eclipse.jpg" align="right" border="0" hspace="5" />每个软件技术的发展都需要在软件开发工具中并行变化。作为教授未来软件开发人员的人，我经常从教学角度考虑我的学生对完成作业工具的需求。倘若科学技术快速地变化，我可以 —— 应该 —— 教给学生多少关于具体工具的内容呢？</p>
		<p>一
方面，我知道如果大学教授不在课堂上使用好的工具，那么学生也许会拿着重要的书本知识离开而仍旧处于实践的不利地位。另一方面，教授学生使用“行业力量”
工具需要许多时间。最好有个水晶球告诉我们哪个工具值得投资。记得 80 年代的 CASE
工具吗？我们花费许多时间学习如何使用，但现在还有多少仍在使用？</p>
		<p>幸运的是，近来对我来说生活简单多了。Eclipse 对于我的学生是近乎于完美的软件开发环境。它是行业力量。您不需要知道它的所有内容才能有效地使用它。它像您曾想的那样灵活。</p>
		<p>如果您不知道 Eclipse 是什么，那么我推荐您去看看 Eclipse 的网站。<a href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#notes"><sup>1</sup></a>主
页上的第一句话说出了全部：“ Eclipse 是通用的工具平台 ——
一个开放的可以为任何内容（没有特殊的）而扩展的集成开发环境。”它真的是软件工具的瑞士军刀。听起来太好都不真实了吧？我们大部分人都知道当一个工具试
图做每件事时，它会以做好很少的事而告终。但是仅 Eclipse 例外！</p>
		<p>什么使 Eclipse 对学术使用那么重要？这里是它的一些优点：</p>
		<ul>
				<li>在大部分平台上提供一致的特性集<br /><br /></li>
				<li>不仅支持 Java 或任意单一的语言<br /><br /></li>
				<li>开源且免费，但完全得到支持<br /><br /></li>
				<li>真正地可扩展并可配置<br /><br /></li>
				<li>行业力量</li>
		</ul>
		<p>我们将在下面更细致地讨论。</p>
		<p>
				<a name="IDALDW0">
						<span class="atitle">Eclipse 在多重平台上提供一致的特性集</span>
				</a>
		</p>
		<p>在
伍斯特工业学院，我们教授的内容不深入到任意具体的计算平台。我们的学生通常可以自由地选择他们使用最舒适的平台，大多数至少有一台计算机，且许多人有更
多台。整个校园范围内实验室中的机器运行着许多操作系统。这是我们想避免留一些需要具体平台，如 Microsoft® Windows，的作业的原因。</p>
		<p>当
我在软件工程课上布置大型的团队工程时，我想让学生自由地全神贯注于问题，而不是具体的平台。Eclipse
支持该目标，因为它可在所有我们使用的平台上运行：Windows、Linux 和 MacOS
X。更重要的是，它在每个平台上以同样的方式运行，所以即使我不是学生所选平台方面的专家，我也可以与学生一起工作。</p>
		<p>事实上，不论您使用什么平台，Eclipse 就像为该平台建立的应用程序一样。当您下载 Eclipse 时，您下载对应您具体平台的 Eclipse，对每个平台它都有单独的图形工具包。这提供了接近本土的外观，以及更好的性能。</p>
		<br />
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td>
										<img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" align="right" cellpadding="0" cellspacing="0">
				<tbody>
						<tr align="right">
								<td>
										<table border="0" cellpadding="0" cellspacing="0">
												<tbody>
														<tr>
																<td valign="middle">
																		<img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16" />
																		<br />
																</td>
																<td align="right" valign="top">
																		<a class="fbox" href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#main">
																				<b>回页首</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="IDAVDW0">
						<span class="atitle">Eclipse 支持超过 Java 的语言</span>
				</a>
		</p>
		<p>当
您发现 Eclipse 不仅是 Java 开发平台时，您将看到 Eclipse 的真正好处。Eclipse
的基本原理具体化到技术的体系结构中：提供一个给与开发人员一个一致的方式来扩展系统功能的小核心。每个扩展，或插件为 Eclipse
配置提供具体的功能并且提供其他插件能够使用的<i>扩展点</i>。<a href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#notes"><sup>2</sup></a></p>
		<p>插件体系结构使 Eclipse 有可能支持许多语言和范型。插件的实例是：</p>
		<ul>
				<li>Eclipse C 开发工具（C Development Tool，CDT）工程（<a href="http://www.eclipse.org/cdt/" target="_blank">http://www.eclipse.org/cdt/</a>）。此核心工程，由 Eclipse Foundation 所支持，<a href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#notes"><sup>3</sup></a> 提供了高质量的 C 和 C++ 支持。可交付的工程包括对编辑、调试、makefile 生成器、语法分析、搜索和内容辅助的支持。<br /><br /></li>
				<li>同样由 Eclipse Foundation 发起的，COBOL 插件（<a href="http://www.eclipse.org/cobol/" target="_blank">http://www.eclipse.org/cobol/</a>）提供类似于 CDT 的功能。 <br /><br /></li>
				<li>EPIC（<a href="http://e-p-i-c.sourceforge.net/" target="_blank">http://e-p-i-c.sourceforge.net/</a>）向 Eclipse 提供 Perl 开发环境。<br /><br /></li>
				<li>Pydev（<a href="http://sourceforge.net/projects/pydev/" target="_blank">http://sourceforge.net/projects/pydev/</a>）是其中一个支持 Python 语言的插件。</li>
		</ul>
		<p>最近当我察看最喜爱的 Eclipse 插件目录（<a href="http://www.eclipse-plugins.info/eclipse/index.jsp" target="_blank">http://www.eclipse-plugins.info/eclipse/index.jsp</a>）
时，我看到在语言分类中目前有五十一个插件。无论您使用什么语言，碰巧的是会有一个 Eclipse 插件使您在 Eclipse
中用该语言开发程序，Haskell、ML、Prolog 和 GOO 都得到支持。不仔细分析图 1 中显示的 Eclipse
实例，您可能不能说出我是否在使用 Java 、C++、Ruby 或任意一个其他被支持的语言。</p>
		<p>这种外观上的一致性给作为老师的我带来了
重大的好处 —— 并且也可以为作为实践工程师或管理人员的您带来好处。一旦您了解如何通过不同的 Eclipse
视图进行定位，您就可以轻易地从一种语言或平台迁移到另一种并且知道工作起来是一样的。我祝贺 Eclipse
的开发团队，他们建立了一组标准，其他开发人员可以 —— 且确实 ——
要依照该标准来实际上创建任意类型的插件。数量较少的没有依照标准指导方针的插件通常是质量不合格的。</p>
		<p>教我的学生如何使用 Eclipse 通常需要一到两节课。这对于他们所获得的收益来说不是很大的代价 —— 且我从收到一致格式的作业中得到好处。当我能够不出任何问题地加载并运行他们的工程时，评分就更简单了。</p>
		<img alt="图 1：典型的 Eclipse 视图" src="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/fig1pollice.jpg" border="0" height="463" width="578" />
		<p>
				<b>图 1：典型的 Eclipse 视图</b>
		</p>
		<br />
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td>
										<img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" align="right" cellpadding="0" cellspacing="0">
				<tbody>
						<tr align="right">
								<td>
										<table border="0" cellpadding="0" cellspacing="0">
												<tbody>
														<tr>
																<td valign="middle">
																		<img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16" />
																		<br />
																</td>
																<td align="right" valign="top">
																		<a class="fbox" href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#main">
																				<b>回页首</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="IDA2FW0">
						<span class="atitle">Eclipse 是开源且免费的，但得到全面支持</span>
				</a>
		</p>
		<p>开
源的出现已经证明免费的软件不一定必然是低质量的软件。然而，企业，如
RedHat，也认识到，向使用该软件的人提供支持是重要的。事实上，Eclipse 拥有一个非常活跃的专区愿意帮助解决任何问题。另外，由于
Eclipse 是许多商业软件产品的基础，包括 IBM Rational 工具，许多厂商提供额外的支持。</p>
		<p>如一个电视广告中说的，“免
费”是很高的价钱，并且这对学术界尤其正确。IBM、Microsoft
和其他公司拥有极好的计划，帮助教育工作者和学生以非常低的价格或免费获得软件。没有他们的帮助，大学教育的费用会比目前更高。Eclipse
平台和它的许多免费插件使学生很容易地下载他们所需要的东西。另外，通过尝试新的语言和工具，大量的免费插件提供学生一种低风险的方式来扩展视野。这对我
来说也非常好，因为我在不断地寻找很棒的新事物来展示给学生。我不愿意为一个课程指定一本 100
美元的书籍，当我让学生代替使用不增加总体课程成本的免费的软件下载时，我的良心上好过些。</p>
		<p>我的两个学生刚完成他们的专业资格考试工程
（major qualifying project，MQP），WPI 的毕业要求。他们的工程是为 Eclipse
建立一个对象平台，可以使您与您创建的类对象交互，且不必书写完整的程序。他们做出了惊人的工作，但没有 Eclipse
专区的支持，他们决不可能实现他们所做的。只要他们遇到困难，他们就向适当的新闻组发送消息并接收到提示回答。这帮助他们不仅完成了工作，而且还成为专注
的职业开发人员的一部分，在进入他们的职业生涯之前，那种支持将是无价的。<a href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#notes"><sup>4</sup></a></p>
		<br />
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td>
										<img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" align="right" cellpadding="0" cellspacing="0">
				<tbody>
						<tr align="right">
								<td>
										<table border="0" cellpadding="0" cellspacing="0">
												<tbody>
														<tr>
																<td valign="middle">
																		<img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16" />
																		<br />
																</td>
																<td align="right" valign="top">
																		<a class="fbox" href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#main">
																				<b>回页首</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="IDAKGW0">
						<span class="atitle">Eclipse 是真正地可扩展及可配置的</span>
				</a>
		</p>
		<p>在
这些年间，我用过许多号称可扩展且可配置的工具。然而，当我买了它们之后，我发现配置不像听起来那样简单。我的第一次经历是在 1974
年，我需要适应一个数据点计算机，而销售员告诉我可以用他们的新系统做到。我订了一个带有巨大的 5MB
磁盘的系统并等待。当它出现时，我问他，“好了，我现在如何做工作？”回答是，“您可以做，但我们没有对应它的软件。您需要自己编写。”在得克萨斯州的圣
安东尼奥花了两周的时间以后，了解操作系统和汇编语言，我能够按自己想要的扩展软件。但我得到了经验 —— “可扩展的”是在旁观者的眼中的。</p>
		<p>然而，Eclipse <i>是</i>真
正可扩展的。使用为该目的而设计良好的软件是多么高兴的事。现在，我正在写一个插件，它将比我在 1974
年时的简单汇编语言程序需要花费更多的时间，而我可以做如此复杂的事情。另外，由于 Eclipse
社区可以提供帮助，我期望工作可以更令人愉快且最终产品不容易有缺陷。</p>
		<p>Eclipse 插件页面（参见前面的脚注）列出了 825
个提供产品，它是平台可扩展性的证据。对于大部分的 Eclipse 软件，安装插件是一件简单的事。装有最新的 Eclipse
版本后，您就可以简单地在 Eclipse 中指向特定的 Web 站点并单击按钮。图 2 显示了加载 AspectJ
开发工具插件的向导。如果您想要的插件不支持更新站点，您可以简单地下载并将插件解包到适当的目录下 —— 这也是 Eclipse
交付使用的方式。要安装 Eclipse，您只要将其拆包。只要您的系统中有了一个 Java JRE，您就可以准备行动了。</p>
		<p>不是所有的
Eclipse 插件都免费。许多商业工具也是 Eclipse 的插件或与 Eclipse 绑定。例如，最新版本的 IBM Rational
工具处于 Eclipse 之上，包括为 Eclipse 提供许多扩展的 IBM
Websphere。一旦您安装了这些工具，您可以在它们之上建立扩展以及其他 Eclipse 插件。此种灵活性应该给采用这些基于 Eclipse
的工具的企业带来很多好处。</p>
		<img alt="图 2：安装 AspectJ 开发工具插件的向导" src="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/fig2pollice.jpg" border="0" height="479" width="576" />
		<p>
				<b>图 2：安装 AspectJ 开发工具插件的向导</b>
		</p>
		<p>Eclipse 也是高度可配置的。其体系结构允许每个插件提供具有功能的可配置选项。甚至在使用 Eclipse 许多年之后，我确定我仍旧没有发现所有可能的配置功能 —— 但我已经找到足够让我觉得该环境很舒适的配置功能了。</p>
		<p>通
过 Preferences 窗口配置 Eclipse，如图 3 所示。如您所见到的，我在改变一些 Java
编译设置。您可以以不同的方式解释许多类型的 Java 违规，并且 Preferences 窗口中的 Compiler
窗格让您决定这些是否为错误、警告或可接受的。最新的 Java 编辑器，一个叠合的编辑器，让您选择是否关闭代码或甚至只察看您现在正处理的方法。</p>
		<p>我已经发现建立编码式样非常简单，用 Eclipse 参数选择进行设定，并与其他人分享该式样。利用简单的按键顺序组合 —— 如 Windows 中的 SHIFT-CTL-F —— 代码会自动地根据您的首选式样格式化。</p>
		<img alt="图 3：Eclipse Preferences 窗口" src="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/fig3pollice.jpg" border="0" height="468" width="578" />
		<p>
				<b>图 3：Eclipse Preferences 窗口</b>
		</p>
		<p>Eclipse 可配置性是 Emacs 可配置性的再现。如果您是一个 Emacs 用户，您很可能添加自己的宏指令和简化操作来为您的式样进行定制。Eclipse 继承了该传统。</p>
		<br />
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td>
										<img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" align="right" cellpadding="0" cellspacing="0">
				<tbody>
						<tr align="right">
								<td>
										<table border="0" cellpadding="0" cellspacing="0">
												<tbody>
														<tr>
																<td valign="middle">
																		<img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16" />
																		<br />
																</td>
																<td align="right" valign="top">
																		<a class="fbox" href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#main">
																				<b>回页首</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="IDAMHW0">
						<span class="atitle">Eclipse 是行业力量</span>
				</a>
		</p>
		<p>IBM<a href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#notes"><sup>5</sup></a>最
初将 Eclipse 作为私有的平台进行开发，但在 2004 年它帮助组成了非盈利的 Eclipse Foundation
以俯瞰技术的更远发展。现在，基金会理事会批准新的子项目并且基金会吸收了商业组织、学术和研究机构、标准团体等等，以确保 Eclipse
处于软件工具行业的最前沿。这意味着您可以依赖 Eclipse 作为可预见的未来中使用的可行的行业力量工具。</p>
		<p>当我花时间向我的学生介绍
Eclipse 时，我知道时间花得很值得。Eclipse
是他们可以带到工作中的东西，因为如此多的企业在使用它。如果他们的企业还没有使用，那么它是他们可以引入的东西。尤其是它拥有他们生产高质量软件所需要
的特性。我常常向我的学生讲述人、过程和工具的道理，并且 Eclipse 确实说明了好工具的益处。</p>
		<p>在我的软件工程课上，学生在最小程度上也要接触：</p>
		<ul>
				<li>基本的 Eclipse Java 开发环境。<br /><br /></li>
				<li>JUnit 单元测试插件。<br /><br /></li>
				<li>用于版本控制的 CVS 或 Subversion 插件。</li>
		</ul>
		<p>一旦他们掌握了这三种技术，他们就有了一个好的基础软件开发工具包，并且很容易通过其他的插件添加新增的功能。</p>
		<br />
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td>
										<img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" align="right" cellpadding="0" cellspacing="0">
				<tbody>
						<tr align="right">
								<td>
										<table border="0" cellpadding="0" cellspacing="0">
												<tbody>
														<tr>
																<td valign="middle">
																		<img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16" />
																		<br />
																</td>
																<td align="right" valign="top">
																		<a class="fbox" href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#main">
																				<b>回页首</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="IDAJAK1">
						<span class="atitle">总结</span>
				</a>
		</p>
		<p>不
是所有的学生都使用 Eclipse。一些人仍旧使用文本编辑器，如 Textpad®，和命令行程序运行。然而，我的那些接触 Eclipse
的学生中的大多数都带着对好的开发工具的功能的更好的理解离开了，并且增加了他们能够在更大型软件开发项目中有效工作的信心。</p>
		<p>这里是两个不同的学生做出的关于在我最近的软件工程项目中使用 Eclipse 的经历的评述：</p>
		<blockquote>
				<b>学生 1</b>：
我曾经认为像 Eclipse 这样的工具为你做了太多的事并使你成为懒惰的程序员。在像 Eclipse
这样惊人的工具带走了琐碎的编码工作时我们完成了多么多的工作，当我看到这时，很难看出任何专业人员如何避免使用像 Eclipse
这样的工具。一致的格式、直观的调试、内嵌的 CVS 和 JUnit 支持、类和包的一览和层次，以及用于它们所有的图形用户界面，使
Eclipse 成为非常友好的助手。</blockquote>
		<blockquote>
				<b>学生 2</b>：学习使用像 Eclipse 这样的高级图形用户界面来开发软件也是极好的，由于它去掉了许多重复琐碎的工作，使我有更多的时间考虑实际的代码和重要的算法。</blockquote>
		<p>当然，在学生使用任何产品时，他们都会遇到问题。一些人发现了当使用可视化编辑器时使 Eclipse 崩溃的方法。一些人发现 Eclipse 很慢并带有他们不需要的特性而显得“臃肿”<a href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#notes"><sup>6</sup></a> —— 但许多人一旦实际调试其他人的代码时就改变了观点。他们的大多数经历是积极且非常真实的。</p>
		<p>恰好那些没有结束热爱 Eclipse 的学生接触到了真实的软件，并且他们了解了我希望他们在毕业时达到的质量级别。他们见到如何设计并实现健壮的产品，并且他们发现工具是多么有价值。如果您没有试过 Eclipse，我推荐您试一试。您会很高兴使用的。</p>
		<br />
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td>
										<img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" align="right" cellpadding="0" cellspacing="0">
				<tbody>
						<tr align="right">
								<td>
										<table border="0" cellpadding="0" cellspacing="0">
												<tbody>
														<tr>
																<td valign="middle">
																		<img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16" />
																		<br />
																</td>
																<td align="right" valign="top">
																		<a class="fbox" href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#main">
																				<b>回页首</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="IDAABK1">
						<span class="atitle">更多的读物</span>
				</a>
		</p>
		<p>下面是一些我觉得有帮助的 Eclipse 资源。</p>
		<ul>
				<li>Eclipse 网站（<a href="http://www.eclipse.org/" target="_blank">http://www.eclipse.org</a>）有关于产品每个部分的文章。它们是入门和寻找详细技术信息的好去处。<br /><br /></li>
				<li>Eclipse ECESIS 工程页面（在 <a href="http://www.eclipse.org/ecesis/" target="_blank">http://www.eclipse.org/ecesis/</a>）提供一个很棒的，关于如何使用 Eclipse 和书写插件的录像教程。<br /><br /></li>
				<li>如果您对 Eclipse 很陌生，我推荐 Addison-Wesley 出版的，由 D'Anjou <i>等人</i>所著的  <i>The Java Developer's Guide to Eclipse, 2e</i>。这是一本提供关于大部分主题的有用信息的大而完全的书籍。<br /><br /></li>
				<li>如果您要建立自己的插件，您或许应该看看 Beck 和 Gamma 所写的  <i>Contributing to Eclipse</i>，以及 Clayberg 和 Rubel 所写的  <i>Building Commercial-Quality Plug-Ins</i>。两本书都是由 Addison-Wesley 出版的。</li>
		</ul>
		<a name="notes">
		</a>
		<br />
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td>
										<img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" align="right" cellpadding="0" cellspacing="0">
				<tbody>
						<tr align="right">
								<td>
										<table border="0" cellpadding="0" cellspacing="0">
												<tbody>
														<tr>
																<td valign="middle">
																		<img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16" />
																		<br />
																</td>
																<td align="right" valign="top">
																		<a class="fbox" href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#main">
																				<b>回页首</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="IDALCK1">
						<span class="atitle">注释</span>
				</a>
		</p>
		<p>
				<sup>1</sup>从 <a href="http://www.eclipse.org/" target="_blank">http://www.eclipse.org</a> 开始。</p>
		<p>
				<sup>2</sup>要了解更多关于插件体系结构的内容，请参见 <a href="http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html" target="_blank">http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html</a>。</p>
		<p>
				<sup>3</sup>Eclipse Foundation 是非营利的企业，目标是促进 Eclipse 平台：<a href="http://www.eclipse.org/org/index.html" target="_blank">http://www.eclipse.org/org/index.html</a>。 </p>
		<p>
				<sup>4</sup>Eclipse 对象工作台的主页是 <a href="http://sourceforge.net/projects/ebob/" target="_blank">http://sourceforge.net/projects/ebob/</a>。 </p>
		<p>
				<sup>5</sup>参见 <a href="http://www.eweek.com/article2/0,1759,1750358,00.asp" target="_blank">http://www.eweek.com/article2/0,1759,1750358,00.asp</a></p>
		<p>
				<sup>6</sup>我们发现仍在开发中的 Eclipse 3.1 比 Eclipse 3.0 慢得多。由于我们不需要新版本支持的所有特性，所以班里的大多数使用 Eclipse。</p>
		<br />
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td>
										<img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" align="right" cellpadding="0" cellspacing="0">
				<tbody>
						<tr align="right">
								<td>
										<table border="0" cellpadding="0" cellspacing="0">
												<tbody>
														<tr>
																<td valign="middle">
																		<img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16" />
																		<br />
																</td>
																<td align="right" valign="top">
																		<a class="fbox" href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#main">
																				<b>回页首</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="resources">
						<span class="atitle">参考资料 </span>
				</a>
		</p>
		<ul>
				<li>您可以参阅本文在 developerWorks 全球站点上的 <a href="http://www-128.ibm.com/developerworks/rational/library/jun05/pollice/index.html" target="_blank">英文原文</a>。<br /></li>
		</ul>
		<br />
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td>
										<img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%" />
								</td>
						</tr>
				</tbody>
		</table>
		<table class="no-print" align="right" cellpadding="0" cellspacing="0">
				<tbody>
						<tr align="right">
								<td>
										<table border="0" cellpadding="0" cellspacing="0">
												<tbody>
														<tr>
																<td valign="middle">
																		<img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16" />
																		<br />
																</td>
																<td align="right" valign="top">
																		<a class="fbox" href="http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/aug05/pollice/#main">
																				<b>回页首</b>
																		</a>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
		<p>
				<a name="author">
						<span class="atitle">关于作者</span>
				</a>
		</p>
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr>
								<td colspan="2">
										<img src="http://www.ibm.com/i/c.gif" alt="" height="5" width="100%" />
								</td>
						</tr>
						<tr align="left" valign="top">
								<td>
										<p>
												<img alt="作者照片" src="http://www.ibm.com/developerworks/rational/library/content/Authors/M-R/pollice.jpg" align="left" height="80" width="64" />
										</p>
								</td>
								<td>
										<p>Gary
Pollice
是马塞诸塞州伍斯特市，伍斯特工业学院的教授实践的教授。他教授软件工程、设计、测试和其他计算机科学课程，并指导学生项目。在进入学术界之前，他花了超
过 35 年的时间开发各种类型的软件，从业务应用程序到编译程序和工具。他的最后一份业内工作是由 IBM Rational Software
提供的，在那里他被称为“RUP 怪人”，他还是原 Rational Suite 队伍中的成员。他是 2004 年 Addison-Wesley
发表的文章 <i>Software Development for Small Teams: A RUP-Centric Approach,</i> 的主要作者。他拥有数学的学士学位和计算机科学的硕士学位。</p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/Vencent/aggbug/35983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-03-18 21:25 <a href="http://www.blogjava.net/Vencent/articles/35983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 Eclipse 平台进行调试</title><link>http://www.blogjava.net/Vencent/articles/32764.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Mon, 27 Feb 2006 15:40:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/32764.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/32764.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/32764.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/32764.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/32764.html</trackback:ping><description><![CDATA[<span class="postbody">本文概述了怎样使用 Eclipse 平台的内置调试功能来调试您的软件项目。
<br>
调试是程序员无法回避的工作。调试方法有许多种，但归根结底，就是找到引发错误的代码。举例来说，在 Linux
应用程序中，分段故障被认为是最常见的错误之一。当程序尝试访问未分配给它的内存并因为分段违例而终止时，将产生这种错误。要修正这种错误，您需要找到引
发该行为的那行代码。一旦找到有问题的代码行，这对于知道引发错误的上下文及其相关的值、变量和方法也是有所帮助的。使用调试器将使查找这些信息变得相当
简单。
<br>

<br>
Eclipse 调试器及 Debug 视图
<br>Eclipse 平台的特色在于内置了 Java
调试器，该调试器提供所有标准调试功能，包括进行单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。此外，您还可以调试在远程机器上运行的
应用程序。Eclipse 平台主要是一个 Java 开发环境，但其体系结构同时也向其它编程语言开放。如以下您将看到的，同一个 Eclipse
的 Debug 视图也可用于 C 和 C++ 编程语言。
<br>

<br>
Eclipse 平台工作台（Eclipse Platform Workbench）及其工具是基于 Java 开发工具（JDT）组件所构建的。这些组件向 Eclipse 提供以下功能：
<br>

<br>
项目管理工具
<br>
透视图和视图
<br>
构建器、编辑器、搜索和构建功能
<br>
调试器
<br>Eclipse 调试器本身是作为 Eclipse 二进制文件中包含的标准插件而存在的。Eclipse 还有一个特别的 Debug
视图，允许您在工作台中管理程序的调试和运行。它为调试中的每个目标显示其暂挂线程的堆栈帧。程序中的各个线程以作为树的节点出现，而 Debug
视图则显示运行中的各目标的进程。如果暂挂一个线程，则其堆栈帧显示为子元素。
<br>

<br>在您开始使用 Eclipse 调试器之前，假定您已经安装了适当的 Java SDK/JRE（我推荐您使用 Java VM 1.4）和
Eclipse 平台 SDK 2.0/2.1，且两者都工作正常。一般来说，先使用 Eclipse
样本来测试一下调试选项是一个好主意。如果您要开发和调试 C/C++ 项目，您还需要得到并安装 C/C++ 开发工具（C/C++
Development Tool，CDT）。有关 Java SDK/JRE、Eclipse 平台和样本以及 CDT
的链接，请参阅本文后面的参考资料。图 1 显示了 Debug 用户界面的常规视图。
<br>
图 1. Eclipse Debug 视图用户界面的常规视图
<br>

<br>

<br>
<img src="http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/debug.jpg" border="0">
<br>
调试 Java
<br>在您能调试您的项目之前，需要先完整地编译和运行代码。您首先需要为您的应用程序创建运行配置并确认其正常启动。之后，您需要使用 Run
&gt; Debug... 菜单，以同样的方式设置调试配置。您还需要选择作为主 Java 类的由调试器使用的类（也请参阅图
2）。对一个项目，您希望有几种调试配置就可以有几种。当调试器启动后（通过 Run &gt;
Debug...），会在一个新窗口打开它，您可以准备开始调试。
<br>

<br>
图 2. 在调试配置中设置项目的主 Java 类
<br>
<img src="http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/debug-config.jpg" border="0">
<br>
以下是最常见的 Eclipse 调试操作的示例指示信息：
<br>

<br>
设置断点
<br>当您启动应用程序以进行调试时，Eclipse 自动切换到 Debug
透视图。无庸置疑，最常见的调试过程就是设置断点，以允许检查在条件语句和循环中的变量和值。要在 Java 透视图的 Package
Explorer
视图中设置断点，双击所选的源代码文件，在编辑器中打开它。遍历全部代码，将光标放置在含有可疑代码的那一行的标记栏上（在编辑器区域的左侧）。双击以设
置断点（也请参阅图 3）。
<br>

<br>
图 3. 在编辑器左侧边缘可看到两个断点标记
<br>
<img src="http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/breakpoints2.jpg" border="0">
<br>
现在通过 Run &gt; Debug... 菜单启动调试会话。有一点很重要，不要把数条语句放在同一行，因为您不能在同一行的多条语句上单步跳过或设置行断点（也请参阅图 4）。
<br>

<br>
图 4. 视图通过左侧边缘的箭头指出当前正在执行的行
<br>

<br>
<img src="http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/pointer.jpg" border="0">
<br>
条件断点
<br>一旦您找到出错的地方，您会想要了解在崩溃前程序在干些什么。完成该工作的一种方法是单步执行程序中的每条语句，一次一句，直到到达出问题的地
方。有时候更好的方法是仅运行某段代码并在出问题的地方终止其执行，这样就可以检查该位置上的数据。要实现这一点，可能要声明每当表达式的值更改时就被触
发的条件断点（请参阅图 5）。此外，在输入条件表达式时还可以使用代码辅助。
<br>

<br>
图 5. 设置条件断点触发器
<br>

<br>
<img src="http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/conditional.jpg" border="0">
<br>
对表达式求值
<br>
要在 Debug 透视图的编辑器中求表达式的值，选中设置有断点的一整行，并在上下文菜单中选择 Inspect 选项（请参阅图 6）。表达式是在当前堆栈帧的上下文中求值的，其结果显示在 Display 窗口的 Expressions 视图中。
<br>

<br>
图 6. 用 Inspect 选项求表达式的值
<br>

<br>
<img src="http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/debug-menu1.jpg" border="0">
<br>
查看变量
<br>Variables 视图（在 Display 窗口中）显示了选中的堆栈帧中的变量值（请参阅图 7）。要查看所请求的变量，只需展开
Variables 视图中的树直到您看到所请求的元素为止。您也可以在 Debug 视图中单步执行代码的同时，在 Variables
视图中查看变量。
<br>

<br>
图 7. 在 Display 窗口中查看变量
<br>

<br>
<img src="http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/variables.jpg" border="0">
<br>当调试器在断点上停止时，您可以通过在 Run &gt; Debug... 菜单上选择 Step Over
选项来继续调试器会话（请参阅图
8）。这将单步跳过突出显示的代码行并执行同一个方法中的下一行（或者它在调用当前方法的方法中继续）。作为最后一步的结果而发生更改的变量用颜色突出显
示（缺省值是红色），所用颜色可在“Changed Variable Value Color”首选项（由 Debug Variable
Views 指定）中指定。
<br>

<br>
图 8. Run... 菜单中的调试器命令
<br>

<br>
<img src="http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/debug-menu.jpg" border="0">要在 Debug 视图中暂挂线程的执行，选择一个运行中的线程并单击 Debug 视图工具栏中的 Suspend 按钮。会显示该线程的当前调用堆栈，并且在 Debug 透视图的编辑器中突出显示当前执行的行。
<br>

<br>
暂挂线程时，将光标放置到 Java 编辑器中的变量上，该变量的值显示在一个小悬浮窗口中。同样，该线程的顶部堆栈帧被自动选中，该堆栈帧中的可视变量显示在 Variables 视图中。可以通过在 Variables 视图中单击变量名来检查相应的变量。
<br>

<br>
热交换错误修正：实时代码修正
<br>如果您运行的是 JVM 1.4（Java 虚拟机，Java Virtual Machine），Eclipse 2.0.2 和 2.1
提供一个叫做热交换错误修正（Hotswap Bug Fixing）的新功能（无法用于 JVM 1.3 或更低版本 － 也请参阅图
9）。它允许在调试器会话过程中更改源代码，这要比“退出应用程序，更改源代码，重新编译，再启动另一个调试会话”的一系列步骤好多了。要使用该功能，只
需在编辑器中更改代码并恢复调试。由于 JVM 1.4 与 Java 平台调试器体系结构（Java Platform Debugger
Architecture，JPDA）兼容，所以能使用该功能。JPDA
实现了在运行中的应用程序中用经过修改的代码进行替换的能力。当然，当启动您的应用程序或找到出错点需要花费很长时间的时候，该功能极其有用。
<br>

<br>
图 9. 热交换错误修正功能不能在 JVM 1.3 及更低版本中使用
<br>

<br>
<img src="http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/hot-code.jpg" border="0">
<br>
如果您完成调试时程序还没有被完整地执行过，请在 Debug 视图中的上下文菜单中选择 Terminate 选项。一个常见的错误是您在调试器会话中使用了 Debug 或 Run 而不是 Resume。这样将会启动另一个调试器会话，而不是继续当前的会话。
<br>

<br>
远程调试
<br>Eclipse 调试器提供了一个有趣的选项，可用于调试远程应用程序。它可以连接到一个运行 Java 应用程序的远程 VM
上，并将其连接到内部调试器上。处理远程调试会话非常类似于本地调试。不过，远程调试配置要求对 Run &gt; Debug...
窗口进行不同的设置。您首先要选择左侧视图中的 Remote Java Application 项，单击 New
按钮。这样就创建了一个新的远程启动配置，并显示三个选项卡：Connect、Source 和 Common。
<br>

<br>在 Connect 选项卡的 Project 域中，选择用作启动首选项的项目（用于查找源代码）。在 Connect 选项卡的 Host
域中，输入运行 Java 程序的远程主机的 IP 地址或域名。在 Connect 选项卡的 Port 域中，输入远程 VM
接受连接的端口。一般来说，该端口是在远程 VM 启动时指定的。当您想让调试器确定 Terminate 命令在远程会话中是否可用，可以选择
Allow termination of remote VM 选项。如果您希望能终止所连接的 VM，则选择该选项。现在当您选择 Debug
选项时，调试器将尝试按指定的地址和端口连接远程 VM，并在 Debug 视图中显示结果。
<br>

<br>
如果启动器无法连接至指定位置上的 VM，将显示错误消息。一般来说，远程调试功能的可用性完全取决于远程主机上运行的 Java VM（虚拟机，Virtual Machine）。图 10 显示了远程调试会话的连接属性的设置。
<br>

<br>
图 10. 设置远程调试会话的连接属性
<br>

<br>
<img src="http://www-900.ibm.com/developerWorks/cn/linux/opensource/os-ecbug/remote-debug.jpg" border="0">
<br>
调试其它语言
<br>Java 是 Eclipse 平台的主语言。然而，Eclipse
平台同时也是一个可支持许多其它语言的可扩展平台，而其中最重要的就是支持 C/C++（因为其流行性）。Eclipse 通过用 C/C++
开发工具（CDT）支持 C/C++。请参阅参考资料以获取相关链接。CDT 通过调试 C/C++ 代码的功能扩展了标准的 Eclipse
Debug 视图，同时 CDT Debug 视图允许您在工作台中管理 C/C++ 项目的调试。CDT
不包含其内部调试器，但它向必须可在本地使用的 GNU GDB 调试器提供了一个前端。
<br>

<br>下载并安装了 CDT 之后，只需切换到 Debug 视图，您就可以开始调试当前的 C/C++
项目了（请参阅参考资料，以获取一篇介绍如何安装 CDT
的文章的链接）。这样您可以设置（并在执行过程中任何时候更改）代码中的断点，并且跟踪变量和寄存器。Eclipse
调试器显示您调试中各个目标的暂挂线程的堆栈帧。程序中的各个线程作为树的节点出现。它显示了运行中各目标的进程。请记住当 GNU GDB
调试一个带有调试符号链接的程序时，它最有效。这是在编译过程中由命令行参数 -g 来实现的。需要更多的信息请使用 -ggdb
开关，该参数包含有特定于 GNU GDB 的调试符号。
<br>

<br>如果您要调试 servlet，使用 Sysdeo Eclipse Tomcat Launcher。该插件使您能够管理 Tomcat
4.x/3.3 servlet 容器（通过创建和导入一个 Tomcat WAR 项目）。它同时在一个内部 Java Eclipse
调试器中注册一个 Tomcat 进程，这样您就能方便地调试 Tomcat 应用程序了。还有其它几个 Eclipse 插件，使我们能够对
servlet 使用内部 Eclipse 调试器，比如 Cactus 的 Eclipse 插件，Resin 插件和 X-Parrots
ServletExec 插件。在下面的参考资料中可获得这些插件的链接。
<br>

<br>
结束语
<br>Eclipse 平台提供了内置的 Java
调试器，该调试器具有标准调试功能，包括进行单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。它还可以用于调试在远程机器上运行的应用程
序。Eclipse 平台主要是一个 Java 开发环境，但是同一个 Eclipse 的 Debug 视图也可用于 C 和 C++ 编程语言。</span><img src ="http://www.blogjava.net/Vencent/aggbug/32764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-27 23:40 <a href="http://www.blogjava.net/Vencent/articles/32764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF</title><link>http://www.blogjava.net/Vencent/articles/31836.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Tue, 21 Feb 2006 10:15:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/31836.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/31836.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/31836.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/31836.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/31836.html</trackback:ping><description><![CDATA[<img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/moz-screenshot.jpg" alt=""><img src="http://www.blogjava.net/images/blogjava_net/vencent/7008/GEF.PNG" alt="GEF.PNG" border="0" height="434" width="586"><br><br><img src ="http://www.blogjava.net/Vencent/aggbug/31836.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-21 18:15 <a href="http://www.blogjava.net/Vencent/articles/31836.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发 Eclipse 插件</title><link>http://www.blogjava.net/Vencent/articles/30877.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Wed, 15 Feb 2006 14:38:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/30877.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/30877.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/30877.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/30877.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/30877.html</trackback:ping><description><![CDATA[<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr valign="top"><td width="100%"><p><font size="5"><font size="6"></font></font>如何创建、调试和安装插件</p><img class="display-img" alt="" src="http://www.ibm.com/i/c.gif" height="6" width="1"></td>
<td class="no-print" width="192"><br></td></tr></tbody></table>



<table border="0" cellpadding="0" cellspacing="0" height="11255" width="814"><tbody><tr valign="top">
<td width="100%">
<table class="no-print" align="right" border="0" cellpadding="0" cellspacing="0" width="160">
<tbody>
<tr>
<td width="10"><img alt="" src="http://www.ibm.com/i/c.gif" height="1" width="10"></td>
<td><br></td></tr></tbody></table>
<p>级别: 初级</p>
<p><a href="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/index.html#author"><font color="#996699">David Gallardo</font></a>, 软件顾问<br></p>
<p>2003 年 3 月 26 日</p>
<blockquote>在本文中，David Gallardo 向您展示了如何使用 Plug-in Development
Environment 的代码生成向导来创建 Eclipse 插件。您将学到如何在运行时工作台中运行和调试插件，并且在 Eclipse
中安装完成的插件。David 还研究了与打包插件相关的问题 ― 包括维护版本信息、以插件片段的形式更新功能，以及组合插件来创建完整的功能部件。</blockquote>
<p><a name="1"><span class="atitle"><font face="Arial" size="4">基于插件的体系结构</font></span></a></p>
<p>Eclipse 平台是 IBM 向开发源码社区捐赠的开发框架，它之所以出名并不是因为 IBM 宣称投入开发的资金总数 ― 4 千万美元
― 而是因为如此巨大的投入所带来的成果：一个成熟的、精心设计的以及可扩展的体系结构。Eclipse
的价值是它为创建可扩展的集成开发环境提供了一个开放源码平台。这个平台允许任何人构建与环境和其它工具无缝集成的工具。</p>
<p>工具与 Eclipse 无缝集成的关键是 <i>插件</i>。除了小型的运行时内核之外，Eclipse 中的所有东西都是插件。从这个角度来讲，所有功能部件都是以同等的方式创建的。从这个角度来讲，所有功能部件都是以同等的方式创建的。 </p>
<p>但是，某些插件比其它插件更重要些。Workbench 和 Workspace 是 Eclipse 平台的两个必备的插件 ― 它们提供了大多数插件使用的扩展点，如图 1 所示。插件需要扩展点才可以插入，这样它才能运行。</p><br><a name="figure1"><b>图 1. Eclipse Workbench 和 Workspace：必备的插件支持 </b></a><br><img alt="Eclipse Workbench" src="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/figure1.gif" height="260" width="369"> <br>
<p>Workbench 组件包含了一些扩展点，例如，允许您的插件扩展 Eclipse 用户界面，使这些用户界面带有菜单选择和工具栏按钮；请求不同类型事件的通知；以及创建新视图。Workspace 组件包含了可以让您与资源（包括项目和文件）交互的扩展点。</p>
<p>当然，其它插件可以扩展的 Eclipse 组件并非只有 Workbench 和 Workspace。此外，还有一个 Debug
组件可以让您的插件启动程序、与正在运行的程序交互，以及处理错误 ― 这是构建调试器所必需的。虽然 Debug
组件对于某些类型的应用程序是必需的，但大多数应用程序并不需要它。</p>
<p>还有一个 Team 组件允许 Eclipse 资源与版本控制系统（VCS）交互，但除非您正在构建 VCS 的 Eclipse 客户机，否则 Team 组件，就象 Debug 组件一样，不会扩展或增强它的功能。</p>
<p>最后，还有一个 Help 组件可以让您提供应用程序的联机文档和与上下文敏感的帮助。没有人会否认帮助文档是专业应用程序必备的部分，但它并不是插件功能的必要部分。</p>
<p>上述每个组件提供的扩展点都记录在 Eclipse Platform Help 中，该帮助在 Platform Plug-in
Developer 指南的参考部分中。乍一看，尤其是 API 参考大全的 Workbench
部分，一开始会令人望而却步。我们不会深入了解众多可用扩展点的详细信息，而只是粗略地看一个简单插件及其组件。</p><br>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%"></td></tr></tbody></table>
<table class="no-print" align="right" cellpadding="0" cellspacing="0">
<tbody>
<tr align="right">
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="center"><img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16"><br></td>
<td align="right" valign="top"><a class="fbox" href="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/index.html#main"><b><font color="#996699">回页首</font></b></a></td></tr></tbody></table></td></tr></tbody></table><br><br>
<p><a name="2"><span class="atitle"><font face="Arial" size="4">插件简介</font></span></a></p>
<p>创建插件最简单的方法是使用 Plug-in Development Environment（PDE）。PDE 和 Java
Development Tooling（JDT）IDE 是 Eclipse 的标准扩展。PDE
提供了一些向导以帮助创建插件，包括我们将在这里研究的“Hello, world”示例。</p>
<p>从 Eclipse 菜单，选择 <b>File=&gt;New=&gt;Other</b>（或按 Ctrl-N），然后选择 Select 对话框左边的 Plug-in Development 向导。在 Select 对话框的右边，选择 Plug-in Project。按 Next。在下一屏上，输入项目名称；我使用了 <code>com.example.hello</code>
。再次按
Next。在下一屏上，请注意，插件标识就与项目名称相同。使用项目名称作为插件标识可以将该插件与另一个插件的名称发生冲突的机会减到最小。再按一次
Next。下一屏让您选择是手工创建初始插件代码，还是运行代码生成向导。保留代码生成向导的缺省选项，选择“Hello, World”，然后按
Next，如图 2 所示。 </p><br><a name="figure2"><b>图 2. 选择“Hello, World”代码生成向导 </b></a><br><img alt="新插件" src="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/figure2.gif" height="500" width="525"> <br>
<p>下一屏要求一些附加信息。请注意这一屏上的信息：它包含了插件名称、版本号、提供者名称和类名。这些是关于插件的重要信息，我们将在稍后研究。可以
接受向导提供的缺省值。按 Next。在下一屏幕上，接受包名、类名和消息文本的缺省值。选择“Add the action set to the
resource perspective”复选框。按 Finish。</p>
<p>如果接到通知：向导需要启用某些其它插件才能完成，那么按 OK。</p>
<p>过一会儿，向导将完成，而在您的工作区中将会有一个新的项目，名为 <code>com.example.hello</code> ，如图 3 所示。 </p><br><a name="figure3"><b>图 3. PDE 透视图：Welcome to Hello Plug-in </b></a><br><img alt="PDE 透视图" src="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/figure3.gif" height="450" width="600"> <br>
<p>在 Package Explorer 中，工作台的左边是向导创建的一些东西的概述。大多数项都不引人关注：包括项目类路径中的许多 <code>.jar</code> 文件（这些包括插件和 Java 运行时所需的 Eclipse 类）、一个图标文件夹（包含了工具栏按钮的图形），以及 <code>build.properties</code> 文件（包含自动构建脚本所使用的变量）。 </p>
<p>这里最有意思的东西是 src 文件夹，它包含了插件和 plugin.xml 文件的源代码 ― plug-in.xml 是插件的清单文件。我们将先查看 plugin.xml。</p><br>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%"></td></tr></tbody></table>
<table class="no-print" align="right" cellpadding="0" cellspacing="0">
<tbody>
<tr align="right">
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="center"><img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16"><br></td>
<td align="right" valign="top"><a class="fbox" href="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/index.html#main"><b><font color="#996699">回页首</font></b></a></td></tr></tbody></table></td></tr></tbody></table><br><br>
<p><a name="3"><span class="atitle"><font face="Arial" size="4">插件清单文件</font></span></a></p>
<p>插件清单文件 plugin.xml 包含了 Eclipse
将插件集成到框架所使用的描述信息。缺省情况下，当第一次创建插件时，会在清单编辑器区域中打开
plugin.xml。编辑器底部的选项卡让您可以选择关于插件的不同信息集合。Welcome 选项卡显示了消息“Welcome to Hello
Plug-In”，并且简要讨论了所使用的模板和关于使用 Eclipse 实现插件的提示。选择“Source”选项卡可以让您查看
plugin.xml 文件的完整源代码。</p>
<p>让我们看看插件清单文件的各个部分。首先是关于插件的常规信息，包括它的名称、版本号、实现它的类文件的名称和 <code>.jar</code> 文件名。 </p><br><a name="code1"><b>清单 1. 插件清单文件 ― 常规信息</b></a><br>
<table bgcolor="#eeeeee" border="1" cellpadding="5" cellspacing="0" width="100%">
<tbody>
<tr>
<td><pre><code class="section"><br><font face="Lucida Console">&lt;?xmlversion="1.0" encoding="UTF-8"?&gt;<br>&lt;plugin<br>   id="com.example.hello"<br>   name="Hello Plug-in"<br>   version="1.0.0"<br>   provider-name="EXAMPLE"<br>   class="com.example.hello.HelloPlugin"&gt;<br><br>   &lt;runtime&gt;<br>      &lt;library name="hello.jar"/&gt;<br>   &lt;/runtime&gt;<br>  </font></code></pre></td></tr></tbody></table><br>
<p>接着，列出了我们的插件所需的插件：</p><br><a name="code2"><b>清单 2. 插件清单文件 ― 必需的插件</b></a><br>
<table bgcolor="#eeeeee" border="1" cellpadding="5" cellspacing="0" width="100%">
<tbody>
<tr>
<td><pre><code class="section"><br><font face="Lucida Console">   &lt;requires&gt;<br>      &lt;import plugin="org.eclipse.core.resources"/&gt;<br>      &lt;import plugin="org.eclipse.ui"/&gt;<br>   &lt;/requires&gt;<br></font></code></pre></td></tr></tbody></table><br>
<p>列出的第一个插件 <code>org.eclipse.core.resources</code> 是工作区插件，但实际上我们的插件并不需要它。第二个插件 <code>org.eclipse.ui</code> 是工作台。我们需要工作台插件，因为我们将扩展它的两个扩展点，正如后面的 extension 标记所指出的。 </p>
<p>第一个 extension 标记拥有点属性 <code>org.eclipse.ui.actionSets</code> 。操作集合是插件添加到工作台用户界面的一组 <i>基值</i>― 即，菜单、菜单项和工具栏。操作集合分组了基值，这样用户可以更方便地管理它们。例如，我们的 Hello 插件的菜单和工具栏项将出现在 Resource 透视图中，因为当在运行代码生成向导时，我们做了这样的选择。如果用户要更改它，可以使用 <b>Window=&gt;Customize Perspective</b>菜单选项从要在 Resource 透视图中显示的项中除去“Sample Action Set”。 </p><br><a name="figure4"><b>图 4. 定制 Resource 透视图 </b></a><br><img alt="Resource 透视图" src="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/figure4.gif" height="453" width="600"> <br>
<p>操作集合包含了两个标记： <i>menu 标记</i>（描述菜单项应该出现在工作台菜单的什么位置，以及如何出现）和 <i>action 标记</i>（描述它应该做什么）― 尤其是 action 标记标识了执行操作的类。注：这个类不是上面列出的插件类。 </p><br><a name="code3"><b>清单 3. 操作集合</b></a><br>
<table bgcolor="#eeeeee" border="1" cellpadding="5" cellspacing="0" width="100%">
<tbody>
<tr>
<td><pre><code class="section"><br><font face="Lucida Console">   &lt;extension<br>         point="org.eclipse.ui.actionSets"&gt;<br>      &lt;actionSet<br>            label="Sample Action Set"<br>            visible="true"<br>            id="com.example.hello.actionSet"&gt;<br>         &lt;menu<br>               label="Sample &amp;Menu"<br>               id="sampleMenu"&gt;<br>            &lt;separator<br>                  name="sampleGroup"&gt;<br>            &lt;/separator&gt;<br>         &lt;/menu&gt;<br>         &lt;action<br>               label="&amp;Sample Action"<br>               icon="icons/sample.gif"<br>               class="com.example.hello.actions.SampleAction"<br>               tooltip="Hello, Eclipse world"<br>               menubarPath="sampleMenu/sampleGroup"<br>               toolbarPath="sampleGroup"<br>               id="com.example.hello.actions.SampleAction"&gt;<br>         &lt;/action&gt;<br>      &lt;/actionSet&gt;<br>   &lt;/extension&gt;<br></font></code></pre></td></tr></tbody></table><br>
<p>许多菜单和操作属性的目的相当明显 ― 例如，提供工具提示文本和标识工具栏项的图形。但还要注意 action 标记中的 <code>menubarPath</code> ：这个属性标识了 menu 标记中定义的哪个菜单项调用 action 标记中定义的操作。有关这个和其它工作台扩展点的详细信息，请参考 <i>Platform Plug-in Developer Guide</i>，尤其是“Plugging into the workbench”章节（可以从 Eclipse 的帮助菜单中获取该指南）。 </p>
<p>由于我们选择了将插件添加到 Resource 透视图，于是生成了第二个 extension 标记。这个标记会导致当 Eclipse 第一次启动并装入我们的插件时，将插件添加到 Resource 透视图。</p><br><a name="code4"><b>清单 4. extension 标记</b></a><br>
<table bgcolor="#eeeeee" border="1" cellpadding="5" cellspacing="0" width="100%">
<tbody>
<tr>
<td><pre><code class="section"><br><font face="Lucida Console">   &lt;extension<br>         point="org.eclipse.ui.perspectiveExtensions"&gt;<br>      &lt;perspectiveExtension<br>            targetID="org.eclipse.ui.resourcePerspective"&gt;<br>         &lt;actionSet<br>               id="com.example.hello.actionSet"&gt;<br>         &lt;/actionSet&gt;<br>      &lt;/perspectiveExtension&gt;<br>   &lt;/extension&gt;<br>&lt;/plugin&gt;<br></font></code></pre></td></tr></tbody></table><br>
<p>如果忽略这最后一个 extension，用户就需要使用 <b>Window=&gt;Customize Perspective</b>将插件添加到 Resource（或其它）透视图。 </p><br>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%"></td></tr></tbody></table>
<table class="no-print" align="right" cellpadding="0" cellspacing="0">
<tbody>
<tr align="right">
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="center"><img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16"><br></td>
<td align="right" valign="top"><a class="fbox" href="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/index.html#main"><b><font color="#996699">回页首</font></b></a></td></tr></tbody></table></td></tr></tbody></table><br><br>
<p><a name="4"><span class="atitle"><font face="Arial" size="4">插件源代码</font></span></a></p>
<p>代码生成向导生成了两个 Java 源文件，打开 PDE Package Explorer 中的 src 文件夹就可以看到它们。第一个文件 <code>HelloPlugin.java</code> 是插件类，它继承了 <code>AbstractUIPlugin</code> 抽象类。 <code>HelloPlugin</code> 负责管理插件的生命周期，在更为扩展的应用程序中，它负责维护诸如对话框设置和用户首选项等内容。 <code>HelloPlugin</code> 要做的事就这么多： </p><br><a name="code5"><b>清单 5. HelloPlugin</b></a><br>
<table bgcolor="#eeeeee" border="1" cellpadding="5" cellspacing="0" width="100%">
<tbody>
<tr>
<td><pre><code class="section"><br><font face="Lucida Console">packagecom.example.hello.actions;<br><br>import org.eclipse.ui.plugin.*;<br>import org.eclipse.core.runtime.*;<br>import org.eclipse.core.resources.*;<br>import java.util.*;<br><br>/**<br> * The main plugin class to be used in the desktop.<br> */<br>public class HelloPlugin extends AbstractUIPlugin {<br>      //The shared instance.<br>      private static HelloPlugin plugin;<br>      //Resource bundle.<br>      private ResourceBundle resourceBundle;<br><br>      /**<br>       * The constructor.<br>       */<br>      public HelloPlugin(IPluginDescriptor descriptor) {<br>            super(descriptor);<br>            plugin = this;<br>            try {<br>                  resourceBundle= ResourceBundle.getBundle(<br>                       "com.example.hello.HelloPluginResources");<br>            } catch (MissingResourceException x) {<br>                  resourceBundle = null;<br>            }<br>      }<br><br>      /**<br>       * Returns the shared instance.<br>       */<br>      public static HelloPlugin getDefault() {<br>            return plugin;<br>      }<br><br>      /**<br>       * Returns the workspace instance.<br>       */<br>      public static IWorkspace getWorkspace() {<br>            return ResourcesPlugin.getWorkspace();<br>      }<br><br>      /**<br>       * Returns the string from the plugin's resource bundle,<br>       * or 'key' if not found.<br>       */<br>      public static String getResourceString(String key) {<br>            ResourceBundle bundle= HelloPlugin.getDefault().getResourceBundle();<br>            try {<br>                  return bundle.getString(key);<br>            } catch (MissingResourceException e) {<br>                  return key;<br>            }<br>      }<br><br>      /**<br>      * Returns the plugin's resource bundle,<br>      */<br>      public ResourceBundle getResourceBundle() {<br>          return resourceBundle;<br>      }<br>}<br></font></code></pre></td></tr></tbody></table><br>
<p>第二个源文件 <code>SampleAction.java</code> 包含的类将执行在清单文件的操作集合中指定的操作。 <code>SampleAction</code> 实现了 <code>IWorkbenchWindowActionDelegate</code> 接口，它允许 Eclipse 使用插件的代理，这样不是在万不得已的情况下，Eclipse 就无需装入插件（这项优化工作使在装入插件时发生内存和性能方面的问题降到最低）。 <code>IWorkbenchWindowActionDelegate</code> 接口方法使插件可以与代理进行交互： </p><br><a name="code6"><b>清单 6. IWorkbenchWindowActionDelegate 接口方法</b></a><br>
<table bgcolor="#eeeeee" border="1" cellpadding="5" cellspacing="0" width="100%">
<tbody>
<tr>
<td><pre><code class="section"><br><font face="Lucida Console">package com.example.hello.actions;<br><br>import org.eclipse.jface.action.IAction;<br>import org.eclipse.jface.viewers.ISelection;<br>import org.eclipse.ui.IWorkbenchWindow;<br>import org.eclipse.ui.IWorkbenchWindowActionDelegate;<br>import org.eclipse.jface.dialogs.MessageDialog;<br><br>/**<br> * Our sample action implements workbench action delegate.<br> * The action proxy will be created by the workbench and<br> * shown in the UI. When the user tries to use the action,<br> * this delegate will be created and execution will be<br> * delegated to it.<br> * @see IWorkbenchWindowActionDelegate<br> */<br>public class SampleAction implements IWorkbenchWindowActionDelegate {<br>      private IWorkbenchWindow window;<br>      /**<br>       * The constructor.<br>       */<br>      public SampleAction() {<br>      }<br><br>      /**<br>       * The action has been activated. The argument of the<br>       * method represents the 'real' action sitting<br>       * in the workbench UI.<br>       * @see IWorkbenchWindowActionDelegate#run<br>       */<br>      public void run(IAction action) {<br>            MessageDialog.openInformation(<br>                  window.getShell(),<br>                  "Hello Plug-in",<br>                  "Hello, Eclipse world");<br>      }<br><br>      /**<br>       * Selection in the workbench has been changed. We<br>       * can change the state of the 'real' action here<br>       * if we want, but this can only happen after<br>       * the delegate has been created.<br>       * @see IWorkbenchWindowActionDelegate#selectionChanged<br>       */<br>      public void selectionChanged(IAction action, ISelection selection) {<br>      }<br><br>      /**<br>       * We can use this method to dispose of any system<br>       * resources we previously allocated.<br>       * @see IWorkbenchWindowActionDelegate#dispose<br>       */<br>      public void dispose() {<br>      }<br><br>      /**<br>       * We will cache window object in order to<br>       * be able to provide parent shell for the message dialog.<br>       * @see IWorkbenchWindowActionDelegate#init<br>       */<br>      public void init(IWorkbenchWindow window) {<br>            this.window = window;<br>      }<br>}<br></font></code></pre></td></tr></tbody></table><br><br>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><font face="Lucida Console"><img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%"></font></td></tr></tbody></table>
<table class="no-print" align="right" cellpadding="0" cellspacing="0">
<tbody>
<tr align="right">
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="center"><font face="Lucida Console"><img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16"><br></font></td>
<td align="right" valign="top"><a class="fbox" href="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/index.html#main"><b><font color="#996699">回页首</font></b></a></td></tr></tbody></table></td></tr></tbody></table><br><br>
<p><a name="5"><span class="atitle"><font face="Arial" size="4">运行和调试插件</font></span></a></p>
<p>当开发 Eclipse 的插件时，必须停止 Eclipse 并用新的插件重新启动它以便进行测试和调试，这很笨拙。幸好，Eclipse PDE 提供了一个自托管（self-hosted）的开发环境，它让您无需将插件安装在工作台的单独实例中即可运行。</p>
<p>要运行 Hello 插件，选择 <b>Run=&gt;Run As=&gt;Run-time Workbench</b>来启动另一个 Workbench 实例，而该实例添加了插件的菜单选项和工具栏，如图 5 所示。 </p><br><a name="figure5"><b>图 5. 在运行时工作台中运行的 Hello 插件 </b></a><br><img alt="Hello 插件" src="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/figure5.gif" height="448" width="600"> <br>
<p>我们可以通过单击工具栏按钮或从“Sample Menu”菜单激活插件。任何一种方法都会生成一个框，其标题是“Hello Plug-in”，内容是“Hello, Eclipse world”，以及一个 OK 按钮，按该按钮可以关闭这个框。</p>
<p>通过选择 <b>Run=&gt;Debug As=&gt;Run-time Workbench</b>，按类似的方法调试插件。这次，当插件在第二个工作台实例中运行时，我们可以在最初的工作台中单步执行源代码，以及检查变量等。 </p>
<p>一旦插件经过测试并准备发布，我们就需要将它适当打包，以便在 Eclipse 中安装。</p><br>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%"></td></tr></tbody></table>
<table class="no-print" align="right" cellpadding="0" cellspacing="0">
<tbody>
<tr align="right">
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="center"><img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16"><br></td>
<td align="right" valign="top"><a class="fbox" href="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/index.html#main"><b><font color="#996699">回页首</font></b></a></td></tr></tbody></table></td></tr></tbody></table><br><br>
<p><a name="6"><span class="atitle"><font face="Arial" size="4">打包插件</font></span></a></p>
<p>Eclipse
在启动时会查看其插件目录来确定要装入哪些插件。要安装插件，我们需要在插件目录中创建一个子目录，并将程序文件和清单文件复制到那里。建议目录名称能表
示插件的标识，并且后面跟下划线和版本号，但是这种做法不是必需的。假设 Eclipse 安装在 C:\eclipse 中；我们要创建一个目录：</p>
<p><code>C:\eclipse\plugins\com.example.hello_1.0.0. </code></p>
<p>按照 Java 程序的标准，我们的程序文件需要归档到 <code>.jar</code> 文件中 — 我们的插件清单文件，您也许记得它包含这个项： </p>
<table bgcolor="#eeeeee" border="1" cellpadding="5" cellspacing="0" width="100%">
<tbody>
<tr>
<td><pre><code class="section"><br><font face="Lucida Console">   &lt;runtime&gt;<br>      &lt;library name="hello.jar"/&gt;<br>   &lt;/runtime&gt;<br></font></code></pre></td></tr></tbody></table><br>
<p>要创建 <code>hello.jar</code> 文件，我们可以通过突出显示项目名称，并从 Eclipse 菜单选择 <b>File=&gt;Export</b>，以导出插件文件。选择 JAR 文件作为导出方式，按 Next，然后浏览到我们为它创建的目录。下一步，我们还需要将 plugin.xml 文件复制到这个目录。也可以使用 <b>File=&gt;Export</b>菜单选项（但请要记住选择 File System 作为导出目的地）。 </p>
<p>这就是安装插件所需的全部操作，但您将需要停止并重新启动 Eclipse，以便能识别这个新的插件。从帮助菜单中选择“About
Eclipse Platform”，可以找到关于已安装插件的信息，包括版本号。在出现的屏幕上有一个按钮是 Plug-in
Details；向下滚动列表来寻找 Hello 插件及其版本号。</p><br>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%"></td></tr></tbody></table>
<table class="no-print" align="right" cellpadding="0" cellspacing="0">
<tbody>
<tr align="right">
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="center"><img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16"><br></td>
<td align="right" valign="top"><a class="fbox" href="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/index.html#main"><b><font color="#996699">回页首</font></b></a></td></tr></tbody></table></td></tr></tbody></table><br><br>
<p><a name="7"><span class="atitle"><font face="Arial" size="4">更新插件版本</font></span></a></p>
<p>在目录名称中包含版本号的目的是允许在同一台机器上共存某个插件的多个版本（每次只装入一个版本）。我们可以通过创建一个 Hello 插件的已更新版本来看看这是如何工作的：例如，将 plugin.xml 文件中的版本号更改成“1.0.1”，然后将 <code>SampleAction.java</code> 中的文本更改成“New and improved Hello, Eclipse world”。从 Eclipse 菜单中选择 <b>Project=&gt; Rebuild All</b>。下一步，将项目文件以 JAR 形式导出到新的插件目录，例如， <code>com.example.hello_1.0.1</code> 。将修订过的 plugin.xml 文件复制到同一个目录中。当停止并重新启动 Eclipse 时，只会装入已更新的插件。 </p><br>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%"></td></tr></tbody></table>
<table class="no-print" align="right" cellpadding="0" cellspacing="0">
<tbody>
<tr align="right">
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="center"><img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16"><br></td>
<td align="right" valign="top"><a class="fbox" href="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/index.html#main"><b><font color="#996699">回页首</font></b></a></td></tr></tbody></table></td></tr></tbody></table><br><br>
<p><a name="8"><span class="atitle"><font face="Arial" size="4">插件片段和功能部件</font></span></a></p>
<p>Eclipse 由插件组成，但在开发 Eclipse 的插件时，还要慎重考虑另外两个级别的组件 ― 插件片段和功能部件。</p>
<p>插件 <i>片段</i>（如名称所暗示的）是完整插件的组成部分 ― <i>目标</i>插件。片段提供的功能与目标插件的功能合并。片段可以用
于将插件本地化成各种语言；在无需形成一个全新发行版的情况下，以增量形式将功能部件添加到现有插件，或者提供特定于平台的功能。在许多方面，片段与插件
一样。主要的区别就是片段没有插件类 ― 片段的生命周期由其目标插件管理。此外，片段的清单文件叫作
fragment.xml，它列出了目标插件的标识和版本号，以及片段的标识和版本号。 </p>
<p>另一方面，插件 <i>功能部件</i>根本不包含编码。在 Eclipse
体系结构术语中，功能部件是将一组相关插件打包到完整的产品中。例如，JDT 是包含了象 Java
编辑器、调试器和控制台这样的插件的功能部件。名为 feature.xml
的清单文件描述了一个功能部件归档文件。在其中，该清单文件包含了对该功能部件所包含的插件和其它资源的引用、关于如何更新该功能部件的信息、版权信息和
许可证信息。 </p>
<p>在 Eclipse 中， <i>主功能部件</i>设置了 Eclipse 平台的外观。主功能部件旨在确定诸如给予 Eclipse
其身份的闪屏和其它特征之类的东西。Eclipse
只允许一个主功能部件。用这种方式，通过创建一组插件，将它们打包到功能部件中，并且使这个功能部件成为主功能部件，就可以重新创建 Eclipse
的品牌，并将它用于创建全新且不同的产品。如果从 Eclipse.org 下载，缺省主功能部件是 <code>eclipse.org.platform</code> 。 </p><br>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%"></td></tr></tbody></table>
<table class="no-print" align="right" cellpadding="0" cellspacing="0">
<tbody>
<tr align="right">
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="center"><img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16"><br></td>
<td align="right" valign="top"><a class="fbox" href="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/index.html#main"><b><font color="#996699">回页首</font></b></a></td></tr></tbody></table></td></tr></tbody></table><br><br>
<p><a name="9"><span class="atitle"><font face="Arial" size="4">后续步骤</font></span></a></p>
<p>在插件的介绍里我们只是稍微了解一些插件的必要用法。学习插件的更多知识的最佳参考资料是 <i>Plug-in Developer's Guide</i>，
可以从 Eclipse 中的帮助菜单中获得该指南。该文档包含了编程指南、Eclipse API 和插件扩展点的参考大全、Eclipse.org
上可用的编程示例的指南，以及常见问题列表。另一个优秀参考资料是 Eclipse
本身的源代码。根据您的兴趣，您也许想要查找一些示例，以了解不同工作台功能部件（如视图和编辑器）是如何扩展的，或者如何使用
SWT（Eclipse 图形 API）。此外，下面的 <a href="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/index.html#resources"><font color="#996699">参考资料</font></a>可以帮助您学到更多知识。 </p><br>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td><img alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" height="1" width="100%"></td></tr></tbody></table>
<table class="no-print" align="right" cellpadding="0" cellspacing="0">
<tbody>
<tr align="right">
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="center"><img alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" height="16" width="16"><br></td>
<td align="right" valign="top"><a class="fbox" href="http://www-128.ibm.com/developerworks/cn/java/os-ecplug/index.html#main"><b><font color="#996699">回页首</font></b></a></td></tr></tbody></table></td></tr></tbody></table><br><br>
<p><a name="resources"><span class="atitle"><font face="Arial" size="4">参考资料 </font></span></a></p>
<ul><li>您可以参阅本文在 developerWorks 全球站点上的 <a href="http://www.ibm.com/developerworks/library/os-ecplug/index.html"><font color="#5c81a7">英文原文</font></a>. <br><br>
</li><li>可以从 <a href="http://www.eclipse.org/"><font color="#5c81a7">Eclipse 项目网站</font></a>获得 Eclipse 的文档、文章以及下载 Eclipse。 <br><br><br>
</li><li>浏览完整的 <a href="http://eclipse-plugins.2y.net/eclipse/index.jsp"><font color="#5c81a7">Eclipse 插件列表</font></a>。 <br><br><br>
</li><li>还可以获得更多的 <a href="http://www.improve-technologies.com/pages/Java/IDE/Eclipse/Plug-ins/"><font color="#5c81a7">插件信息（法语）</font></a>。 <br><br><br>
</li><li>可以从以下 <i>developerWorks</i>文章中学到更多 Eclipse 知识： 
<ul><li>David Gallardo 的另一篇文章“ <a href="http://www.ibm.com/developerworks/opensource/library/os-ecov/"><font color="#5c81a7">Getting started with the Eclipse Platform</font></a>”（ <i>developerWorks</i>，2002 年 11 月） <br>
</li><li>“ <a href="http://www.ibm.com/developerworks/opensource/library/os-swing/"><font color="#5c81a7">Plug a Swing-based development tool into Eclipse</font></a>”（ <i>developerWorks</i>，2002 年 10 月） <br>
</li><li>“ <a href="http://www.ibm.com/developerworks/opensource/library/os-i18n/"><font color="#5c81a7">Internationalizing your Eclipse plug-in</font></a>”（ <i>developerWorks</i>，2002 年 6 月） <br>
</li><li>“ <a href="http://www.ibm.com/developerworks/opensource/library/os-i18n2/"><font color="#5c81a7">Testing your internationalized Eclipse plug-in</font></a>”（ <i>developerWorks</i>，2002 年 7 月） <br>
</li><li>“ <a href="http://www.ibm.com/developerworks/library/x-wxxm13/"><font color="#5c81a7">Working XML: Use Eclipse to build a user interface for XM</font></a>”（ <i>developerWorks</i>，2002 年 10 月） <br>
</li><li>“ <a href="http://www.ibm.com/developerworks/linux/library/l-erick.html"><font color="#5c81a7">采访 Marc Erikson：Eclipse 代码捐赠</font></a>”（ <i>developerWorks</i>，2001 年 11 月） <br>
</li><li>“ <a href="http://www.ibm.com/developerworks/opensource/library/os-plat/"><font color="#5c81a7">Working the Eclipse Platform</font></a>”（ <i>developerWorks</i>，2001 年 11 月） <br>
</li><li>“ <a href="http://www.ibm.com/developerworks/library/i-wsad/"><font color="#5c81a7">Getting to know WebSphere Studio Application Developer</font></a>”（ <i>developerWorks</i>，2001 年 11 月） <br>
</li><li>“ <a href="http://www.ibm.com/developerworks/library/i-oopsla/"><font color="#5c81a7">Help for reusing your assets</font></a>”（ <i>developerWorks</i>，2001 年 11 月） <br>
</li><li>“ <a href="http://www.ibm.com/developerworks/library/j-nativegui/"><font color="#5c81a7">Create native, cross-platform GUI applications</font></a>”（ <i>developerWorks</i>，2002 年 4 月） <br></li></ul><br>
</li><li>有关插件开发的更多详细信息，请参阅 <a href="http://www.eclipse.org/articles"><font color="#5c81a7">Eclipse.org 站点上的文章</font></a>。 <br><br><br>
</li><li>请在 <i>developerWorks</i>上的 <a href="http://www-124.ibm.com/developerworks/oss/"><font color="#5c81a7">开放源码项目专区</font></a>和 <a href="http://www.ibm.com/developerworks/java"><font color="#5c81a7">Java 技术专区</font></a>中查找您需要的参考资料。 <br></li></ul></td></tr></tbody></table><img src ="http://www.blogjava.net/Vencent/aggbug/30877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-15 22:38 <a href="http://www.blogjava.net/Vencent/articles/30877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>