﻿<?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-zjibo</title><link>http://www.blogjava.net/zjibo/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 14:35:59 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 14:35:59 GMT</pubDate><ttl>60</ttl><item><title>RMI读书笔记(1)</title><link>http://www.blogjava.net/zjibo/archive/2009/05/19/271593.html</link><dc:creator>迟来的兵</dc:creator><author>迟来的兵</author><pubDate>Tue, 19 May 2009 13:37:00 GMT</pubDate><guid>http://www.blogjava.net/zjibo/archive/2009/05/19/271593.html</guid><wfw:comment>http://www.blogjava.net/zjibo/comments/271593.html</wfw:comment><comments>http://www.blogjava.net/zjibo/archive/2009/05/19/271593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zjibo/comments/commentRss/271593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zjibo/services/trackbacks/271593.html</trackback:ping><description><![CDATA[<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">书目</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">精通RMI——Java与EJB企业级应用开发</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">Java&#8482; RemoteMethodInvocation Specification</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">Java tutorial- RMI</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">基础知识</span></p>
<p>2.1 <span style="font-family: 宋体">网络通信协议</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">网络通信层是分布式计算环境中使用客户/服务器结构的一个核心技术，而网络编程中大体有两种通信模式，无连接和面向连接的协议。</span></p>
<p style="margin-left: 36pt; text-indent: -36pt; tab-stops: list 36.0pt"><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>UDP</p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">UDP (universal datagram protocol)</span><span style="font-size: 10pt; font-family: 宋体">是一种用于无连接通信的标准化协议，其建立在IP协议之上，而IP协议是internet使用的基本数据传输协议。UDP协议的主要作用是将网络数据流量压缩成数据报文的形式。一个典型的数据报文就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息，剩余字节则用来包含具体的传输数据。UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失，协议本身并不能做出任何检测或提示。因此，通常人们把UDP协议称为不可靠的传输协议。一般用来传输少量数据，它资源消耗小，处理速度快。</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体"><span style="font: 7pt 'Times New Roman'">&nbsp;</span>TCP</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">TCP</span><span style="font-size: 10pt; font-family: 宋体">（transport control protocol）传输控制协议，标准化的面向连接的通信协议。在使用TCP协议中发送者和接收者必须在通信之前建立连接，连接建立之后被看成是一个数据流，发送者将数据发到该数据流上，接收者从该数据流上读取数据。如果接收者也同时是发送者则连接是双向的。通信完成后任何一方都可以关闭连接，之后的读写操作都会失败。TCP协议提供了可靠的面向对象的数据流传输服务的规则和约定。简单的说在TCP模式中，对方发一个数据包给你，你要发一个确认数据包给对方。Java提供的类库都将TCP/IP协议的使用借助套接字（Socket）进行了抽象。套接字包含了建立与远程主机的连接，与主机进行通信以及关闭连接所需要的所有操作，而这些操作实际上还是由TCP/IP来执行的。</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">编组</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">在应用复杂尤其是面向对象的时候，一方面会遇到处理数据或者对象的结构的问题。另一方面还会遇到面向流的用来发送字节或字符块的网络连接问题。此时需要将对象转换成连接可以处理的格式，从而使自定义的对象可以通过连接管道。</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">编组（marshalling）是一个将负责对象转换成字节流的过程，然后在使用反过程----反编组将字节流转换成对象。Java中编组的实现方式是序列化（serialization）。<br />
</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体"><img height="110" alt="" src="http://www.blogjava.net/images/blogjava_net/zjibo/flow.JPG" width="512" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;代理</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">代理是一个实现给定接口的对象，但是不直接执行一些代码计算结果，而是代表其他一些对象执行实际计算的对象。<br />
</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="186" alt="" src="http://www.blogjava.net/images/blogjava_net/zjibo/delegate.JPG" width="357" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;代理可以代表其他的库或者某种类似的可以代替它执行网络通信的东西。这就是RMI工作的原理，代理在RMI也即存根（Stub）。</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">引用位于服务器中的对象的代理是如何构造的？客户端不能有一个真的Java引用，因为Java引用只在对象位于同一个JVM时才能正常工作。构造的基本思想是为服务器对象分配一个唯一的标识序号，该序号由代理保存，此外还有对象所在的主机名。</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体"><img height="421" alt="" src="http://www.blogjava.net/images/blogjava_net/zjibo/rmiDelegate.JPG" width="278" border="0" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;客户如何请求代理</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">在获取代理时我们需要一个间接层把所有细节抽象，通过使用名字去获得对应对象的思想就是命名。命名的一个主要作用是通过使用对象的名字，简化获得对象的任务。</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">对于RMI来说，最通用的命名实现时RMI注册，它具有bind和lookup操作，对于命名服务来说，客户端其实存在一个它的代理。</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体">命名使用示例图<br />
</span></p>
<p style="text-indent: 20pt"><span style="font-size: 10pt; font-family: 宋体"><img height="384" alt="" src="http://www.blogjava.net/images/blogjava_net/zjibo/P5100039.JPG" width="497" border="0" /></span></p>
<img src ="http://www.blogjava.net/zjibo/aggbug/271593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zjibo/" target="_blank">迟来的兵</a> 2009-05-19 21:37 <a href="http://www.blogjava.net/zjibo/archive/2009/05/19/271593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>String要点</title><link>http://www.blogjava.net/zjibo/archive/2008/12/06/244794.html</link><dc:creator>迟来的兵</dc:creator><author>迟来的兵</author><pubDate>Sat, 06 Dec 2008 11:39:00 GMT</pubDate><guid>http://www.blogjava.net/zjibo/archive/2008/12/06/244794.html</guid><wfw:comment>http://www.blogjava.net/zjibo/comments/244794.html</wfw:comment><comments>http://www.blogjava.net/zjibo/archive/2008/12/06/244794.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zjibo/comments/commentRss/244794.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zjibo/services/trackbacks/244794.html</trackback:ping><description><![CDATA[<blockquote>
<pre>一.String对象的比较，+操作和intern方法</pre>
<pre>这里从一个问题入手来看看。<br />
<br />
package testPackage;</pre>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_12_416_Open_Image" onclick="this.style.display='none'; Codehighlighter1_12_416_Open_Text.style.display='none'; Codehighlighter1_12_416_Closed_Image.style.display='inline'; Codehighlighter1_12_416_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_12_416_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_12_416_Closed_Text.style.display='none'; Codehighlighter1_12_416_Open_Image.style.display='inline'; Codehighlighter1_12_416_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test&nbsp;</span><span id="Codehighlighter1_12_416_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_12_416_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_55_413_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_413_Open_Text.style.display='none'; Codehighlighter1_55_413_Closed_Image.style.display='inline'; Codehighlighter1_55_413_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_55_413_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_55_413_Closed_Text.style.display='none'; Codehighlighter1_55_413_Open_Image.style.display='inline'; Codehighlighter1_55_413_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_55_413_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_55_413_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hello&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Hello</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;lo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">lo</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print((hello&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Hello</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print((Other.hello&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;hello)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print((other.Other.hello&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;hello)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print((hello&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">Hel</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">lo</span><span style="color: #000000">"</span><span style="color: #000000">))&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print((hello&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">Hel</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;lo))&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(hello&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">Hel</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;lo).intern());<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
</pre>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_13_49_Open_Image" onclick="this.style.display='none'; Codehighlighter1_13_49_Open_Text.style.display='none'; Codehighlighter1_13_49_Closed_Image.style.display='inline'; Codehighlighter1_13_49_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_13_49_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_13_49_Closed_Text.style.display='none'; Codehighlighter1_13_49_Open_Image.style.display='inline'; Codehighlighter1_13_49_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Other&nbsp;</span><span id="Codehighlighter1_13_49_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_13_49_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;hello&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Hello</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
<br />
package other;<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_20_56_Open_Image" onclick="this.style.display='none'; Codehighlighter1_20_56_Open_Text.style.display='none'; Codehighlighter1_20_56_Closed_Image.style.display='inline'; Codehighlighter1_20_56_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_20_56_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_20_56_Closed_Text.style.display='none'; Codehighlighter1_20_56_Open_Image.style.display='inline'; Codehighlighter1_20_56_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Other&nbsp;</span><span id="Codehighlighter1_20_56_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_20_56_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;hello&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Hello</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
正确答案：true true true true false true</pre>
<pre>主要要点有：<br />
1.所有内容相同的String指向同一个内存块。但String对象不能是通过new操作创建出来。主要原因是JVM对String做了优化，String加载之后会持有一个常量池，<br />
只要在常量池中找到内容相同的String就会把其引用返回。而new操作是直接在内存中分配新空间。<br />
<br />
<br />
<br />
2.Java中有两种绑定，静态和动态。如果+操作的两边是常量表达式那么会在采用静态绑定，也就是说编译之后值已经定下来了。而如果有一边是通过new操作创建出<br />
来的那么会采用动态绑定，只有在运行的时候才知道其具体的值。<br />
3.String的intern方法会到常量池里面找是否有相同内容的String，如果有则返回其引用。如果没有则把这个String对象添加到常量池之中并放回其引用。额外说<br />
下，intern在英文中有保留区的意思，这样好理解其作用。intern方法还是native的。</pre>
<pre>二.String中的正则表达式使用</pre>
<pre><br />
String中有些方法是需要正则表达式作为参数的。这个时候就要主要不要传错参数。最典型的例子就是replaceAll(String regex, String replacement)。第一个<br />
参数是需要正则表达式的，而第二参数是普通的字符串。</pre>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;ss&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">???</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ss.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">?</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">运行到这里会抛出PatternSyntaxException，因为&#8220;?&#8221;在正则表达式里面是特殊符号，需要转义。</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ss.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">[?]</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">正确，我个人比较倾向于这种写法。</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ss.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">\\?</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">正确，对&#8220;?&#8221;做转义。</span></div>
<br />
因此在使用split，replaceAll，replaceFirst等方法时要特别注意是不是需要转义.<br />
</pre>
</blockquote>
<img src ="http://www.blogjava.net/zjibo/aggbug/244794.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-12-06 19:39 <a href="http://www.blogjava.net/zjibo/archive/2008/12/06/244794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Puzzle</title><link>http://www.blogjava.net/zjibo/archive/2008/04/21/194592.html</link><dc:creator>迟来的兵</dc:creator><author>迟来的兵</author><pubDate>Mon, 21 Apr 2008 11:24:00 GMT</pubDate><guid>http://www.blogjava.net/zjibo/archive/2008/04/21/194592.html</guid><wfw:comment>http://www.blogjava.net/zjibo/comments/194592.html</wfw:comment><comments>http://www.blogjava.net/zjibo/archive/2008/04/21/194592.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zjibo/comments/commentRss/194592.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zjibo/services/trackbacks/194592.html</trackback:ping><description><![CDATA[<div>1.优先使用primitive type</div>
<div>2.不要使用Boolean作为返回值。</div>
<div>3.在初始化所有变量之后再创建类的实例。</div>
<div>4. 用URI代替URL，使用URI的create方法代替new。</div>
<div>5. 注意使用inputsream的skip方法，此方法会返回实际跳过的长度，最好自己监听返回值。</div>
<div>6. ？：运算符会返回最大范围的类型，如：true？new Intege(2): new Float(1.0);将会返回2.0.</div>
<div>7. 尽量使用double，而不是float。</div>
<img src ="http://www.blogjava.net/zjibo/aggbug/194592.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-21 19:24 <a href="http://www.blogjava.net/zjibo/archive/2008/04/21/194592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><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><item><title>使用maven创建新项目出现Unable to determine the release version错误 </title><link>http://www.blogjava.net/zjibo/archive/2008/02/21/181127.html</link><dc:creator>迟来的兵</dc:creator><author>迟来的兵</author><pubDate>Thu, 21 Feb 2008 09:39:00 GMT</pubDate><guid>http://www.blogjava.net/zjibo/archive/2008/02/21/181127.html</guid><wfw:comment>http://www.blogjava.net/zjibo/comments/181127.html</wfw:comment><comments>http://www.blogjava.net/zjibo/archive/2008/02/21/181127.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zjibo/comments/commentRss/181127.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zjibo/services/trackbacks/181127.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt">&nbsp;&nbsp;当使用mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app来创建一个新项目时，有时候会出现以下错误：<br />
</span>
<p style="font-size: 12pt"><span style="font-size: 12pt">[INFO] Scanning for projects...<br />
[INFO] Searching repository for plugin with prefix: 'archetype'.<br />
[INFO]<br />
----------------------------------------------------------------------------<br />
[INFO] Building Maven Default Project<br />
[INFO]&nbsp;&nbsp;&nbsp; task-segment: [archetype:create] (aggregator-style)<br />
[INFO]<br />
----------------------------------------------------------------------------<br />
。。。。。。。<br />
[INFO] Velocimacro : initialization complete.<br />
[INFO] Velocity successfully started.<br />
[INFO] [archetype:create]<br />
[INFO] Defaulting package to group ID: com.mycompany.app<br />
[INFO]<br />
------------------------------------------------------------------------<br />
[ERROR] BUILD ERROR<br />
[INFO]<br />
------------------------------------------------------------------------<br />
[INFO] Failed to resolve artifact.</span></p>
<p><span style="color: red"><span style="font-size: 12pt">GroupId: org.apache.maven.archetypes<br />
ArtifactId: maven-archetype-quickstart<br />
Version: RELEASE</span></span></p>
<p><span style="color: red"><span style="font-size: 12pt">Reason: Unable to determine the release version</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 12pt">Try downloading the file manually from the project website.</span></span></p>
<p><span style="color: #0000ff"><span style="font-size: 12pt">Then, install it using the command:<br />
&nbsp;&nbsp;&nbsp; mvn install:install-file -DgroupId=org.apache.maven.archetypes<br />
-DartifactId=maven-arch<br />
etype-quickstart \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Dversion=RELEASE -Dpackaging=jar -Dfile=/path/to/file</span></span></p>
<p><span style="font-size: 12pt">&nbsp; org.apache.maven.archetypes:maven-archetype-quickstart:jar:RELEASE</span></p>
<p><span style="font-size: 12pt">&nbsp;[INFO]<br />
------------------------------------------------------------------------<br />
[INFO] For more information, run Maven with the -e switch<br />
[INFO]<br />
------------------------------------------------------------------------<br />
[INFO] Total time: 1 second<br />
[INFO] Finished at: Tue Apr 17 07:08:50 MDT 2007<br />
[INFO] Final Memory: 4M/8M<br />
[INFO]<br />
------------------------------------------------------------------------</span></p>
<span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请注意红色部分为错误产生的根本原因，&nbsp; <span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于</span>maven<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还处于开发过程中，开发方极有可能已经更新某个</span>plug-in<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的版本，但本地</span>plug-in <span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>metadata<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有版本的信息或者没有最新版本的信息，致使</span>maven</span><span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span style="font-size: 12pt">无法下载正确的版本。同时请注意蓝色部分，这是提示的解决办法。具体步骤如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.打开网址：</span><a href="http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/"><span style="font-size: 12pt">http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/</span></a><br />
<span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;2.选择最新版本并且下载最新的&#8220;</span><a href="http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0-alpha-4/maven-archetype-quickstart-1.0-alpha-4.jar"><span style="font-size: 12pt">maven-archetype-quickstart-1.0-alpha-4.jar</span></a><span style="font-size: 12pt"> &#8221;文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.安装这个archetype到maven本地仓库。使用命令如下：mvn install:install-file -DgroupId=org.apache.maven.archtypes -Dar<br />
tifactId=maven-archetype-quickstart -Dversion=1.0-alpha-4 -Dpackaging=jar -Dfile=c:\7000\maven\maven-archetype-quickstart-1.0-alpha-4.jar。注意-Dfile是刚下载的文件的路径。<br />
&nbsp;&nbsp;&nbsp;&nbsp;现在在cmd中执行mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app就可以创建新项目了。<br />
</span></span><script type="text/javascript">
//<![cdata[ Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90);
//]]&gt;
</script>
 <img src ="http://www.blogjava.net/zjibo/aggbug/181127.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-02-21 17:39 <a href="http://www.blogjava.net/zjibo/archive/2008/02/21/181127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mvn site 命令找不到site plugins</title><link>http://www.blogjava.net/zjibo/archive/2008/02/21/181117.html</link><dc:creator>迟来的兵</dc:creator><author>迟来的兵</author><pubDate>Thu, 21 Feb 2008 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/zjibo/archive/2008/02/21/181117.html</guid><wfw:comment>http://www.blogjava.net/zjibo/comments/181117.html</wfw:comment><comments>http://www.blogjava.net/zjibo/archive/2008/02/21/181117.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/zjibo/comments/commentRss/181117.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zjibo/services/trackbacks/181117.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt">使用mvn site命令能很方便的帮助开发人员生产站点，但有时使用这个命令会出现以下错误：<br />
C:\7000\maven&gt;mvn site<br />
[INFO] Scanning for projects...<br />
[INFO] ------------------------------------------------------------------------<br />
[INFO] Building Maven Default Project<br />
[INFO]&nbsp;&nbsp;&nbsp; task-segment: [site]<br />
[INFO] ------------------------------------------------------------------------<br />
[INFO] ------------------------------------------------------------------------<br />
[ERROR] BUILD ERROR<br />
[INFO] ------------------------------------------------------------------------<br />
[INFO] The plugin 'org.apache.maven.plugins:maven-site-plugin' does not exist or<br />
&nbsp;no valid version could be found<br />
[INFO] ------------------------------------------------------------------------<br />
[INFO] For more information, run Maven with the -e switch<br />
[INFO] ------------------------------------------------------------------------<br />
[INFO] Total time: &lt; 1 second<br />
[INFO] Finished at: Thu Feb 21 16:30:21 CST 2008<br />
[INFO] Final Memory: 1M/2M<br />
[INFO] ------------------------------------------------------------------------<br />
产生原因：<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于</span>maven<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还处于开发过程中，开发方极有可能已经更新某个</span>plug-in<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的版本，但本地</span>plug-in <span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>metadata<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有版本的信息或者没有最新版本的信息，致使</span>maven<span lang="ZH-CN" style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">无法下载正确的版本。</span><br />
解决办法如下：<br />
1.在<a href="http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/plugins/maven-site-plugin/">http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/plugins/maven-site-plugin/</a>下载最新的maven-metadate.xml,保存路径为&#8220;本地仓库\org\apache\maven\plugins\maven-site-plugin"。<br />
2.删除原有的maven-metadata-central.xml并且重命名刚下载的maven-metadate.xml为maven-metadata-central.xml。<br />
3.再次使用mvn site，你会发现maven会到远程仓库下载最新的site plug-in和相关jars包。</span>
 <img src ="http://www.blogjava.net/zjibo/aggbug/181117.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-02-21 17:36 <a href="http://www.blogjava.net/zjibo/archive/2008/02/21/181117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>