﻿<?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-迟来的兵-随笔分类-Eclipse plug-in开发</title><link>http://www.blogjava.net/zjibo/category/30717.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 10 Apr 2008 10:05:23 GMT</lastBuildDate><pubDate>Thu, 10 Apr 2008 10:05:23 GMT</pubDate><ttl>60</ttl><item><title>EclEmma源代码研究积累</title><link>http://www.blogjava.net/zjibo/archive/2008/04/10/191925.html</link><dc:creator>迟来的兵</dc:creator><author>迟来的兵</author><pubDate>Thu, 10 Apr 2008 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/zjibo/archive/2008/04/10/191925.html</guid><wfw:comment>http://www.blogjava.net/zjibo/comments/191925.html</wfw:comment><comments>http://www.blogjava.net/zjibo/archive/2008/04/10/191925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zjibo/comments/commentRss/191925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zjibo/services/trackbacks/191925.html</trackback:ping><description><![CDATA[1. <span style="font-family: 宋体">用</span>interface<span style="font-family: 宋体">来定义系统对外提供的服务，有抽象类来做扩展。尽量用</span>interface<span style="font-family: 宋体">作为参数类型。</span>
<p>2. ThreadLocal<span style="font-family: 宋体">类，定义了一个变量的本地副本，与原有变量隔离，作用类似</span>static<span style="font-family: 宋体">变量，只是不共享。可用</span>set<span style="font-family: 宋体">添加变量，</span>get<span style="font-family: 宋体">去获取变量。变量类型不限制。</span></p>
<p>3. Eclipse plug in<span style="font-family: 宋体">开发中可以实现</span>IRuntimeClasspathProvider<span style="font-family: 宋体">接口。</span><span style="font-family: 宋体">可以提供用</span>launch configuration<span style="font-family: 宋体">去获得</span>unresolved<span style="font-family: 宋体">和</span>resolved classpath<span style="font-family: 宋体">。开发人员可以在</span>resolveClasspath<span style="font-family: 宋体">方法中加入自定义的</span>classpath<span style="font-family: 宋体">。实现类需要注册在</span>extension point<span style="font-family: 宋体">中。</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">/**</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">Computes</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">and</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">returns</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">an</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">unresolved</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">classpath</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">for</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">the</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">given</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">launch</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">configuration.</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">Variable</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">and</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">container</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">entries</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">are</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">not</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">resolved.</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><strong><span style="font-size: 10pt; color: #7f9fbf; font-family: 'Courier New'">@param</span></strong><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">configuration</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">launch</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">configuration</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><strong><span style="font-size: 10pt; color: #7f9fbf; font-family: 'Courier New'">@return</span></strong><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">unresolved</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">path</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><strong><span style="font-size: 10pt; color: #7f9fbf; font-family: 'Courier New'">@exception</span></strong><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">CoreException</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">if</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">unable</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">to</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">compute</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">a</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">path</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*/</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">public</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> IRuntimeClasspathEntry[] computeUnresolvedClasspath(ILaunchConfiguration configuration) </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">throws</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> CoreException;</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">/**</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">Returns</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">the</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">resolved</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">path</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">corresponding</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">to</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">the</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">given</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">path,</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">in</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">the</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">context</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">of</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">the</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">given</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">launch</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">configuration.</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">Variable</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">and</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">container</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">entries</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">are</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">resolved.</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">The</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">returned</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">(resolved)</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">path</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">need</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">not</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">have</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">the</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">same</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">number</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">of</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">entries</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">as</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">the</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">given</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">(unresolved)</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">path.</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><strong><span style="font-size: 10pt; color: #7f9fbf; font-family: 'Courier New'">@param</span></strong><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">entries</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">entries</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">to</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">resolve</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><strong><span style="font-size: 10pt; color: #7f9fbf; font-family: 'Courier New'">@param</span></strong><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">configuration</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">launch</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">configuration</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">context</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">to</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">resolve</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">in</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><strong><span style="font-size: 10pt; color: #7f9fbf; font-family: 'Courier New'">@return</span></strong><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">resolved</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">path</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*</span><strong><span style="font-size: 10pt; color: #7f9fbf; font-family: 'Courier New'">@exception</span></strong><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">CoreException</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">if</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">unable</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">to</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">resolve</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">a</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">path</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">*/</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">public</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> IRuntimeClasspathEntry[] resolveClasspath(IRuntimeClasspathEntry[] entries, ILaunchConfiguration configuration) </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">throws</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> CoreException;</span></p>
<p style="background: white"><span style="font-size: 10pt; color: black; font-family: 'Trebuchet MS'">A provider extension is defined in </span><code><span style="font-size: 10pt; color: black">plugin.xml</span></code><span style="font-size: 10pt; color: black; font-family: 'Trebuchet MS'">. Following is an example definition of a runtime classpath provider extension. </span></p>
<pre style="background: white"><span style="color: black">&nbsp;&lt;extension point="org.eclipse.jdt.launching.classpathProviders"&gt;</span></pre>
<pre style="background: white"><span style="color: black">&nbsp;&nbsp; &lt;classpathProvider </span></pre>
<pre style="background: white"><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id="com.example.ExampleClasspathProvider"</span></pre>
<pre style="background: white"><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="com.example.ExampleClasspathProviderImpl"</span></pre>
<pre style="background: white"><span style="color: black">&nbsp;&nbsp; &lt;/classpathProvider&gt;</span></pre>
<pre style="background: white"><span style="color: black"> &lt;/extension&gt;</span></pre>
<p>4. plug in <span style="font-family: 宋体">开发中可以用</span>JavaRuntime <span style="font-family: 宋体">去得到运行环境的信息。</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
IRuntimeClasspathProvider provider = JavaRuntime</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">.<em><span style="background: silver">getClasspathProvider</span></em>(configuration);</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 宋体">其中</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">configuration</span><span style="font-size: 10pt; color: black; font-family: 宋体">是</span><span style="font-size: 10pt; background: silver; color: black; font-family: 'Courier New'">ILaunchConfiguration</span><span style="font-size: 10pt; color: black; font-family: 宋体">类型的。</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">4. </span><span style="font-size: 10pt; color: black; font-family: 宋体">在</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">Eclipse plug in</span><span style="font-size: 10pt; color: black; font-family: 宋体">开发中获取文件。两种解决办法：</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">1.</span><span style="font-size: 10pt; color: black; font-family: 宋体">从</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">plug in</span><span style="font-size: 10pt; color: black; font-family: 宋体">实例中读取文件的</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">URL</span><span style="font-size: 10pt; color: black; font-family: 宋体">，然后用</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">FileLocator</span><span style="font-size: 10pt; color: black; font-family: 宋体">把这个</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">URL</span><span style="font-size: 10pt; color: black; font-family: 宋体">转化成文件路径；</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">2.</span><span style="font-size: 10pt; color: black; font-family: 宋体">直接利用</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">FileLocator</span><span style="font-size: 10pt; color: black; font-family: 宋体">的</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">find</span><span style="font-size: 10pt; color: black; font-family: 宋体">方法。</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 宋体">方法</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">1</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">//filepath </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体">是需要定位的文件</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String filepath = </span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"/bin/resources/test.jar"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">;</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">//instance </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体">是当前</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">plug in</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 宋体">的实例</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL url = </span><em><span style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'">instance</span></em><span style="font-size: 10pt; color: black; font-family: 'Courier New'">.getBundle().getEntry(filepath);</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String path = </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">null</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">;</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">try</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> {</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path = FileLocator.<em>resolve</em>(url).getPath();</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">catch</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> (IOException e) {</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">// </span><strong><span style="font-size: 10pt; color: #7f9fbf; font-family: 'Courier New'">TODO</span></strong><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'"> Auto-generated catch block</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; background: silver; color: #7f0055; font-family: 'Courier New'">return</span></strong><strong><span style="font-size: 10pt; background: silver; color: #7f0055; font-family: 'Courier New'">new</span></strong><span style="font-size: 10pt; background: silver; color: black; font-family: 'Courier New'"> Path(path);</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 宋体">方法</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">2</span></p>
<p style="margin-left: 4.5pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><span style="font-size: 9pt; color: #4444cc; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">String filepath = </span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"/bin/resources/test.jar"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">;</span></p>
<p style="margin-left: 4.5pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; URL url = FileLocator.find(</span><em><span style="font-size: 10pt; color: #0000c0; font-family: 'Courier New'">instance</span></em><span style="font-size: 10pt; color: black; font-family: 'Courier New'">.getBundle(),new Path(filepath),null);</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">try</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> {</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path = FileLocator.<em>resolve</em>(url).getPath();</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">catch</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> (IOException e) {</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">// </span><strong><span style="font-size: 10pt; color: #7f9fbf; font-family: 'Courier New'">TODO</span></strong><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'"> Auto-generated catch block</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p>5. <span style="font-family: 宋体">可以利用</span>JarOutputStream<span style="font-family: 宋体">来写</span>jar<span style="font-family: 宋体">包。必须为</span>JarOutputStream <span style="font-family: 宋体">实例创建至少一个</span><span style="font-size: 10pt; background: silver; color: black; font-family: 'Courier New'">Entry</span><span style="font-size: 10pt; color: black; font-family: 宋体">，可以调用</span><span style="font-size: 10pt; background: silver; color: black; font-family: 'Courier New'">putNextEntry</span><span style="font-size: 10pt; color: black; font-family: 宋体">方法。</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Manifest mf = new Manifest();</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JarOutputStream jar = </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">new</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> JarOutputStream(</span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">new</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> FileOutputStream(</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"MainTest.jar"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">)</span><span style="font-size: 10pt; color: black; font-family: 宋体">，</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">mf);</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Properties properties = </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">new</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> Properties();</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jar.<span style="background: silver">putNextEntry</span>(</span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">new</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> ZipEntry(</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"MainTest.property"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">));</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; properties.store(jar, </span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"this is a test"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jar.close();</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">6. </span><span style="font-size: 10pt; color: black; font-family: 宋体">得到</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">IJavaModle</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IJavaModel model = JavaCore.<em>create</em>(<span style="background: silver">ResourcesPlugin</span>.<em>getWorkspace</em>()</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getRoot());</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IJavaProject[] projects = model.getJavaProjects();</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="background: silver">IPackageFragmentRoot</span>[] roots = projects[i]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getPackageFragmentRoots();</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;</span><span style="font-size: 10pt; color: black; font-family: 宋体">然后可以依次得到对应</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">elements</span></p>
  <img src ="http://www.blogjava.net/zjibo/aggbug/191925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zjibo/" target="_blank">迟来的兵</a> 2008-04-10 17:12 <a href="http://www.blogjava.net/zjibo/archive/2008/04/10/191925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>