﻿<?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-听风的歌</title><link>http://www.blogjava.net/x-29/</link><description>欣赏永运比跟风好</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 08:57:18 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 08:57:18 GMT</pubDate><ttl>60</ttl><item><title>◎Baby’s First Language</title><link>http://www.blogjava.net/x-29/archive/2009/07/27/288651.html</link><dc:creator>听风的歌</dc:creator><author>听风的歌</author><pubDate>Mon, 27 Jul 2009 14:46:00 GMT</pubDate><guid>http://www.blogjava.net/x-29/archive/2009/07/27/288651.html</guid><wfw:comment>http://www.blogjava.net/x-29/comments/288651.html</wfw:comment><comments>http://www.blogjava.net/x-29/archive/2009/07/27/288651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/x-29/comments/commentRss/288651.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/x-29/services/trackbacks/288651.html</trackback:ping><description><![CDATA[<a href="http://blaugh.com/2006/12/05/babys-first-language" rel="bookmark"><img class="comic" title="Baby's First Language" alt="Baby's First Language" src="http://blaugh.com/cartoons/061204_big_daddy_java.gif" height="250" width="447" /></a>
<img src ="http://www.blogjava.net/x-29/aggbug/288651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/x-29/" target="_blank">听风的歌</a> 2009-07-27 22:46 <a href="http://www.blogjava.net/x-29/archive/2009/07/27/288651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>◎本地计算机上的OracleOraHome92TNSListener服务启动后又停止了</title><link>http://www.blogjava.net/x-29/archive/2008/11/07/239167.html</link><dc:creator>听风的歌</dc:creator><author>听风的歌</author><pubDate>Fri, 07 Nov 2008 02:09:00 GMT</pubDate><guid>http://www.blogjava.net/x-29/archive/2008/11/07/239167.html</guid><wfw:comment>http://www.blogjava.net/x-29/comments/239167.html</wfw:comment><comments>http://www.blogjava.net/x-29/archive/2008/11/07/239167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/x-29/comments/commentRss/239167.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/x-29/services/trackbacks/239167.html</trackback:ping><description><![CDATA[<p>今天在服务里启动OracleOraHome92TNSListener服务时出现&#8220;</p>
本地计算机上的OracleOraHome92TNSListener服务启动后又停止了，一些服务自动停止，如果它们没有什么可做的，例如"性能日志和警报服务"。<br />
<br />
因为前两天更改了计算机名，于是打Net Manager重新设定之后，就OK啦。<br />
<br />
<img height="497" alt="" src="http://www.blogjava.net/images/blogjava_net/x-29/1.JPG" width="669" border="0" /><br />
<br />
<img src ="http://www.blogjava.net/x-29/aggbug/239167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/x-29/" target="_blank">听风的歌</a> 2008-11-07 10:09 <a href="http://www.blogjava.net/x-29/archive/2008/11/07/239167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>◎Oracle 10g轻量级客户端安装记</title><link>http://www.blogjava.net/x-29/archive/2007/11/14/160479.html</link><dc:creator>听风的歌</dc:creator><author>听风的歌</author><pubDate>Wed, 14 Nov 2007 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/x-29/archive/2007/11/14/160479.html</guid><wfw:comment>http://www.blogjava.net/x-29/comments/160479.html</wfw:comment><comments>http://www.blogjava.net/x-29/archive/2007/11/14/160479.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/x-29/comments/commentRss/160479.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/x-29/services/trackbacks/160479.html</trackback:ping><description><![CDATA[1、从<a href="http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html">http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html</a>下载下列几个压宿文件<br />
instantclient-basic-win32-10.1.0.2.zip 　　 这是最核心的包<br />
instantclient-jdbc-win32-10.1.0.2.zip 　　&nbsp;&nbsp; 包含JDBC Driver的包<br />
instantclient-sqlplus-win32-10.1.0.2.zip 　　最简单的SQLPLUS包<br />
下载之后，解压到一个单独的目录里，如：D:\dev\oraclient<br />
<br />
2、配置tnsnames.ora，如果本机上没有安装oracle，可以从安装了oracle的机上拷贝一个(tnsnames.ora文件在%ORACLE_HOME%\network\admin下)放在上面的目录D:\dev\oraclient下。<br />
oracledata =<br />
&nbsp; (DESCRIPTION =<br />
&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.58)(PORT = 1521))<br />
&nbsp;&nbsp;&nbsp; )<br />
&nbsp;&nbsp;&nbsp; (CONNECT_DATA =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = oracledata)<br />
&nbsp;&nbsp;&nbsp; )<br />
&nbsp; )<br />
<br />
3、添加一个环境变量，名为TNS_ADMIN，值为tnsnames.ora文件所在路径（如：D:\dev\oraclient)，这是为了能够找到上面说的tnsnames.ora。如果本机上安装了ORACLE，并且设置了ORACLE_HOME环境变量，那么会自动在%ORACLE_HOME%/network/admin/位置查找tnsnames.ora文件。<br />
<br />
4、设置ORACLE的语言，添加注册表项：&#8220;NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK&#8221;，位于 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE。如果本机没有安装ORACLE，在H_L_M\SOFTWARE\下是没有"ORACLE"这一项的，需要手动创建，然后再在ORACLE项下创建键NLS_LANG，键值为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK<br />
<br />
5、下载并安装PL.SQL.Developer配置应用<br />
&nbsp; 配置tools-&gt;preferences-&gt;connection<br />
&nbsp; Oracle Home=D:\dev\oracleclient<br />
&nbsp; OCI library=D:\dev\oracleclient\oci.dll<br />
<br />
6、再次打开plsql则会在database中有oracledata 选项输入用户名密码就可以登陆。<br />
<br />
<br />
<img src ="http://www.blogjava.net/x-29/aggbug/160479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/x-29/" target="_blank">听风的歌</a> 2007-11-14 12:00 <a href="http://www.blogjava.net/x-29/archive/2007/11/14/160479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>◎XFire 使用记</title><link>http://www.blogjava.net/x-29/archive/2007/06/19/125058.html</link><dc:creator>听风的歌</dc:creator><author>听风的歌</author><pubDate>Tue, 19 Jun 2007 02:26:00 GMT</pubDate><guid>http://www.blogjava.net/x-29/archive/2007/06/19/125058.html</guid><wfw:comment>http://www.blogjava.net/x-29/comments/125058.html</wfw:comment><comments>http://www.blogjava.net/x-29/archive/2007/06/19/125058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/x-29/comments/commentRss/125058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/x-29/services/trackbacks/125058.html</trackback:ping><description><![CDATA[<p>XFire开发Web服务的基本步骤<br>1) 检验JAVA类的方法和构造函数是否是公共的,一定要是公开的。<br>2) 将XFire Servlet相关的入口添加到web.xml中。<br></p>
<div style="BORDER-RIGHT: #ffffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ffffff 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ffffff 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #ffffff 1px solid; BACKGROUND-COLOR: #ffffff"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">XFireServlet</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">org.codehaus.xfire.transport.http.XFireConfigurableServlet</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-mapping</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">XFireServlet</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">url-pattern</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/services/*</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">url-pattern</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-mapping</span><span style="COLOR: #0000ff">&gt;</span></div>
<p>3) 创建services.xml并把它放到WEB-INF/classes/META-INF/xfire目录下，这是默认的做法;也可以将services.xml的路径配置到web.xml文件中。</p>
<div style="BORDER-RIGHT: #ffffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ffffff 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ffffff 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #ffffff 1px solid; BACKGROUND-COLOR: #ffffff"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">XFire</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">display-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">XFire&nbsp;Servlet</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">display-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.codehaus.xfire.transport.http.XFireConfigurableServlet<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;servlet&nbsp;will&nbsp;by&nbsp;default&nbsp;look&nbsp;for&nbsp;the&nbsp;configuration&nbsp;on<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;classpath&nbsp;in&nbsp;"META-INF/xfire/services.xml".&nbsp;You&nbsp;can<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;override&nbsp;it&nbsp;with&nbsp;this&nbsp;parameter.&nbsp;Seperate&nbsp;multiple&nbsp;configuration&nbsp;files&nbsp;with&nbsp;a&nbsp;comma.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;默认会在classpath的META-INF/xfire/下查找services.xml文件，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以覆盖这个参数，指定多个配置文件</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">init-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">config</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">services.xml</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">init-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span></div>
<p>4) 将XFire和其它第三方库添加到Web应用的WEB-INF/lib目录下。</p>
<p><br>FAQ<br>1) Weblogic8.1中应用XFire，启动wls时，出现java.lang.NoSuchMethodError的解决办法。<br>&nbsp;&nbsp; 首先，将XFire提供的QName JAR（qname.jar)放进WEB-INF/lib目录下。然后，将weblogic.xml文件放到WEB-INF下。<br>weblogic.xml的内容为：</p>
<div style="BORDER-RIGHT: #ffffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ffffff 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ffffff 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #ffffff 1px solid; BACKGROUND-COLOR: #ffffff"><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE&nbsp;weblogic-web-app&nbsp;PUBLIC<br>&nbsp;&nbsp;"-//BEA&nbsp;Systems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;8.1//EN"<br>&nbsp;&nbsp;"http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">weblogic-web-app</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">container-descriptor</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prefer-web-inf-classes</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">true</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prefer-web-inf-classes</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">container-descriptor</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">weblogic-web-app</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span></div>
<p>具体的详细解说，请看XFire的User's Guide.</p>
<p><br>技巧<br>1. 如果Web Services的方法的参数是Collections，那就需要建一个Mapping文件，而且Mapping文件的命名为className.aegis.xml，并且与class放在同一个package下。<br>如：<br>public interface IConstraceSerice {<br>&nbsp;&nbsp; boolean editConstraceInfo(List aList);<br>}<br>Mapping文件如下：IConstraceService.aegis.xml<br>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br>&lt;mappings&gt;<br>&nbsp;&nbsp; &lt;mapping&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;method name="editConstraceInfo"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter index="0" componentType="java.lang.String"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/method&gt;<br>&nbsp;&nbsp; &lt;/mapping&gt;<br>&lt;/mappings&gt;</p>
<p>&lt;parameter index="0" componentType="java.lang.String"/&gt;表示第一个参数，里面实际值的类型,这里实际值的类型是java.lang.String.<br>如果是一个JavaBean,如com.test.TestBean,那以就要写成&lt;parameter index="0" compentType="com.test.TestBean"/&gt;</p>
<p>2. 如果返回类型是List或Map，并且里面存放的是自定义类的话，则需要增加一个对于服务接口的配置文件。该文件的命名规则是　接口文件名.aegis.xml。例如接口是UserService.java的话，则此配置文件命名为UserService.aegis.xml。注意此配置文件须与接口放在同一目录下面。<br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&nbsp; <br>&nbsp;&lt;mappings&gt;&nbsp; <br>&nbsp;&nbsp; &lt;mapping &gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;method name="getUsers"&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;return-type componentType="com.test.domain.User"/&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/method&gt;&nbsp; <br>&nbsp;&nbsp; &lt;/mapping&gt;&nbsp; <br>&nbsp;&lt;/mappings&gt; <br>getUsers方法返回类型是List，里面装的User对象。对于这种类型的方法，在配置文件中描述了它的返回值类型。</p>
<p>如果返回的类型是Map的话，做法和List一样。但定义的类型，是Map中的Value部分，并且这样的话，Map中Value所存放的对象就必须全部是同一种类啦。</p>
<p>下面给出一个详细的例子：<br>1）服务接口:<br>public interface MyService2<br>{<br>&nbsp;&nbsp;&nbsp; boolean getInfo();<br>&nbsp;&nbsp;&nbsp; Collection getCollection(); //method 1<br>&nbsp;&nbsp;&nbsp; Collection getCollection(int id); //method 2<br>&nbsp;&nbsp;&nbsp; Collection getCollection(String id); //method 3<br>&nbsp;&nbsp;&nbsp; Collection getCollectionForValues(String id, Collection c); //method 4<br>&nbsp;&nbsp;&nbsp; Collection getCollectionForValues(int value, Collection c); //method 5<br>}<br>2) Mapping文件内容:<br>&lt;mappings&gt;<br>&nbsp;&nbsp;&nbsp; &lt;mapping&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- mapping 1 --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;method name="getCollection"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;return-type componentType="java.lang.Double"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/method&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- mapping 2 --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;method name="getCollection"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;return-type componentType="java.lang.Float"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter index="0" class="int"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/method&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- mapping 3 --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;method name="getCollectionForValues"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;return-type componentType="java.math.BigDecimal"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/method&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- mapping 4 --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;method name="getCollectionForValues"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter index="0" class="java.lang.String"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter index="1" componentType="java.util.Date"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/method&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- mapping 5 --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;method name="getCollectionForValues"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;return-type componentType="java.util.Calendar"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter index="0" class="int"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter index="1" componentType="java.lang.Bit"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/method&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/mapping&gt;<br>&lt;/mappings&gt;</p>
<p><br>3. 如果一个方法的返回类型是一个JavaBean,而这个JavaBean当中又存在Collections,那么就需要定义一个与JavaBean相关的Mapping文件,文件名要与JavaBean名相同,如:User.aegis.xmll,并且与JavaBean放在同一个目录.</p>
<p>例子:<br>1) 服务接口<br>public interface IYMServiceFacade {<br>&nbsp;&nbsp; User getUser();<br>}</p>
<p>2) JavaBean<br>public class User {<br>&nbsp;&nbsp; private Strirng userName;<br>&nbsp;&nbsp; // 这里是一个Collection<br>&nbsp;&nbsp; private Set rooms;</p>
<p>&nbsp;&nbsp; .....<br>&nbsp;&nbsp; .....<br>}</p>
<p>3) Mapping文件(User.aegis.xml)<br>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br>&lt;mappings&gt;<br>&nbsp;&nbsp;&nbsp; &lt;mapping&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="rooms" componentType="com.powerunion.ymservice.dto.Room"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/mapping&gt;<br>&lt;/mappings&gt;</p>
<p>介绍:&lt;property name="rooms" componentType="com.powerunion.ymservice.dto.Room"/&gt;<br>其中的name属性就是JavaBean里面定义的rooms,componentType上面的相同,表示Collections里真正存储的类型.</p>
<p><br>注：如果服务接口的参数或者返因类型是基本类型（int, float, double等)就不需要创建Mapping文件。<br>详细的信息见XFire的User's Guide.</p>
<p><br>4.如果Web Services和客户端运行在同一个JVM上，可以选择使用本地传输，可以大幅提升性能。如：以下指定服务端URL的这行。<br>String serviceUrl = "<a href="http://localhost:8080/YM/services/ContractService">http://localhost:8080/YM/services/ContractService</a>";<br>替换为<br>String serviceUrl = "xfire.local://ContractService";</p>
<p><br>5. 用ant task 生成xfire 客户端代码 <br>&nbsp;&nbsp; <br>用xfire不管是配置web service，还是生成客户代码都很方便． <br>生成客户代码只要在用ant生成就可以了！</p>
<p>build.xml </p>
<p><br>代码<br>&lt;?xml version="1.0"?&gt;&nbsp; <br>&nbsp; <br>&lt;project default="genfiles" basedir="."&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;property name="lib" value="WebRoot/WEB-INF/lib" /&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;path id="myclasspath"&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${lib}"&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.jar" /&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;pathelement location="${genfiles}" /&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;/path&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;property name="code_path" value="src" /&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;property name="wsdl_path" value="Echo1Service.xml" /&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;property name="code_package" value="com.client" /&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;target name="genfiles"&nbsp; description="Generate the files"&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="myclasspath" /&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsgen outputDirectory="${code_path}" wsdl="${wsdl_path}" package="${code_package}" binding="xmlbeans" /&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;/target&gt;&nbsp; <br>&lt;/project&gt;&nbsp; <br>&nbsp;<br></p>
<img src ="http://www.blogjava.net/x-29/aggbug/125058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/x-29/" target="_blank">听风的歌</a> 2007-06-19 10:26 <a href="http://www.blogjava.net/x-29/archive/2007/06/19/125058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>◎XFire on WAS5.1</title><link>http://www.blogjava.net/x-29/archive/2007/05/28/120401.html</link><dc:creator>听风的歌</dc:creator><author>听风的歌</author><pubDate>Mon, 28 May 2007 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/x-29/archive/2007/05/28/120401.html</guid><wfw:comment>http://www.blogjava.net/x-29/comments/120401.html</wfw:comment><comments>http://www.blogjava.net/x-29/archive/2007/05/28/120401.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/x-29/comments/commentRss/120401.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/x-29/services/trackbacks/120401.html</trackback:ping><description><![CDATA[1、在WAS5.1上创建一个共享库<br>2、将jaxen.jar、jdom-1.0.jar、qname.jar、stax-api-1.0.1.jar、wsdl5j-1.6.1.jar放置于共享库里。<br>3、在应用程序里引用这个共享库，并将应用程序的class loader policy 设置为parent_last.<br>
<img src ="http://www.blogjava.net/x-29/aggbug/120401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/x-29/" target="_blank">听风的歌</a> 2007-05-28 10:07 <a href="http://www.blogjava.net/x-29/archive/2007/05/28/120401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>◎一段关于工厂方法模式和抽象工厂模式的精彩回复[zz]</title><link>http://www.blogjava.net/x-29/archive/2007/05/15/117527.html</link><dc:creator>听风的歌</dc:creator><author>听风的歌</author><pubDate>Tue, 15 May 2007 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/x-29/archive/2007/05/15/117527.html</guid><description><![CDATA[<p>来自javayeye的帖子，http://www.javaeye.com/topic/18648?page=1，运用设计模式很重要一点：模式应该带来清晰并且易于理解的结构，而非<strong>大堆大堆的麻烦。</strong>如果是你发现变麻烦了，那是你的方法错了。设计模式的异同不是通过结构，而是通过意图和场景来理解，当然，如果真能达到应用中重神而非形的境界，就玄而又玄了。</p>
<p><br></p>
<p>工厂模式是最重要的模式，因为大多数模式都需要用到工厂模式。如果不能正确的运用工厂模式，那么可以说无法成为合格的架构师。 <br>多数设计模式的内容讲解的都是如何设计接口。 <br>接口如何产生呢？如果在客户代码（类库的使用者称之为客户）中直接使用具体类，那么就失去了接口的意义。因为接口的使用目的，就是要降低客户对具体类的依赖程度。如果在客户代码中直接使用接口，那么就造成了客户对具体类名称的依赖。（客户最终需要以某种方式指明所需要的具体类，如配置文件或代码，但是只需要指出一次，所以说降低对具体类的依赖程度）。要使客户代码不依赖具体类，唯一的方法，就是让客户代码不依赖具体类的部分不知道具体类的名称。知道具体类名称的部分，仅仅是配置部分。（配置文件或者配置代码）。 <br>依赖不可能完全消除，除非二者毫无联系。但是可以将这种依赖的程度降到最低。 <br>既然不能直接创建具体类，那么就需要通过一个创建者类来创建接口的实现类。这样就产生了工厂类。 <br><strong>那么现在已经知道工厂类存在的理由，抽象创建接口的过程。</strong><br>这样，就可以使用简单工厂。 <br>简单工厂，一般是两级结构。工厂类创建接口。 <br>随着接口创建复杂性的增强，可能在接口创建的过程中，一个创建者类，无法承担创建所有的接口类的职责。 <br>可能会有这样的情况，我们定义了一个接口，有6个实现类分别是123456号。但是，这六个实现类不可能用一个工厂创建出来，因为123号是 windows下的实现，而456号是linux上的实现。（假设我们使用的语言不是广大人民群众热爱的java语言），那么这个时候，我还需要客户方用相同的方式来创建这个借口，而不是在代码中到处写 <br></p>
<div class=code_title>代码</div>
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: rgb(0,0,255)">if</span> <span style="COLOR: rgb(0,0,0)">&nbsp;(操作系统</span> <span style="COLOR: rgb(0,0,0)">==</span> <span style="COLOR: rgb(0,0,0)">"</span> <span style="COLOR: rgb(0,0,0)">windows</span> <span style="COLOR: rgb(0,0,0)">"</span> <span style="COLOR: rgb(0,0,0)">){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: rgb(0,0,255)">else</span> <span style="COLOR: rgb(0,0,0)">{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </div>
<script><![cdata[ender_code();]]&gt;</script><br>那样就太麻烦了。设计模式就是为了减少麻烦，而不是什么别的废话，比如什么太极八卦、天人合一、面向xx之类的。因为怕麻烦，<strong>所以搞出设计模式这个咚咚减少麻烦。如果你发现用了设计模式更麻烦了，那么肯定是你用错了。 </strong><br>这个时候为了省事，我就把工厂也抽象成一个接口（因为我有两个相似的工厂，如果只有一个，我还废话什么呢），这样就成了工厂方法。 <br>当然，既然工厂方法成了一个接口，那么当然也需要用一个工厂来创建它。这个时候，创建是三级结构，简单工厂（此时是工厂的工厂）创建工厂接口（本来是个类，现在因为进一步的抽象，成为接口了），工厂接口创建产品。 <br>过了一段时间，随着我们的工厂业务不断发展，我们有了很多产品。 <br>比如，我们有锤子和钉子两种产品。这两种产品都有windows品牌和linux品牌的。我们给锤子和钉子各自定义了一个创建的接口。 <br>
<div class=code_title>代码</div>
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">interface</span><span style="COLOR: rgb(0,0,0)">&nbsp;锤子工厂{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;造锤子（）；&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">interface</span><span style="COLOR: rgb(0,0,0)">&nbsp;钉子工厂{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;造钉子();&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></div>
<script><![cdata[ender_code();]]&gt;</script><br>可是，我们发现某些用户，用windows的锤子去敲linux的钉子，从而把程序敲出了bug。这当然是我们的错误，因为我们违反了一条金科玉律： <br><strong>要想使你的程序稳定运行，你假设用户是猪。</strong><br>所以，我们把锤子和钉子的工厂合并，让一个工厂只能造出配套的锤子和钉子，这样猪就没有犯错误的机会了。 <br>于是我们搞出一个抽象工厂： <br>
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,255)">interface</span><span style="COLOR: rgb(0,0,0)">&nbsp;铁匠铺{<br>造锤子（）；<br>造钉子();<br>}&nbsp;</span></div>
<br>当然，这个铁匠铺是个接口，所以同样需要用一个工厂来创建它。所以，这个时候，工厂还是三级结构。 <br>我们的工厂，业务很多，而且产品一般都是配套使用的（这样可以多骗点钱），所以，我们大多数情况下，都是使用抽象工厂和简单工厂。简单工厂用来创建工厂，抽象工厂创建产品。 <br><strong>工厂的作用，就是创建接口。</strong><br>其实我们不知道什么是设计模式，我们只是怕麻烦。什么是麻烦呢？ <br>我们觉得把同样的代码写两遍就非常麻烦。所以，我们宁可多写几句，也要解决麻烦。猪不怕麻烦，可以日复一日的重复相同的事情，可是我们不是猪。<br>
<img src ="http://www.blogjava.net/x-29/aggbug/117527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/x-29/" target="_blank">听风的歌</a> 2007-05-15 10:23 <a href="http://www.blogjava.net/x-29/archive/2007/05/15/117527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>◎Design Pattern: Abstract Factory 模式</title><link>http://www.blogjava.net/x-29/archive/2007/04/19/111950.html</link><dc:creator>听风的歌</dc:creator><author>听风的歌</author><pubDate>Thu, 19 Apr 2007 07:24:00 GMT</pubDate><guid>http://www.blogjava.net/x-29/archive/2007/04/19/111950.html</guid><wfw:comment>http://www.blogjava.net/x-29/comments/111950.html</wfw:comment><comments>http://www.blogjava.net/x-29/archive/2007/04/19/111950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/x-29/comments/commentRss/111950.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/x-29/services/trackbacks/111950.html</trackback:ping><description><![CDATA[我们平日走在步人街上都能看到很多专卖店，服装、珠宝等等；<br />
拿服装专卖店来说，一个专卖店里面肯定有好几个品牌的服装，比如Giordano、Baleno，这些品牌都是不同公司生产的。<br />
没人见个专卖店自己生产服装的吧，专卖店需要某个品牌的服装时，就去联系相应的厂家供货即可，具体的生产是由厂家去完成。<br />
抽象工厂模式也是如此，抽象工厂提供多个抽象方法，由具体的子工厂去实现。<br />
现在我想开一家服装店，经营上衣和短裤，至于具体什么品牌的等选门面在装修之时再定。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #ffffff"><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;ISpecialityShop&nbsp;{<br />
&nbsp;&nbsp;&nbsp;Shirt&nbsp;createShirt();<br />
&nbsp;&nbsp;&nbsp;Pants&nbsp;createPants();<br />
}</span></div>
<p>好了，现在门面选好且已装修完毕，具体经营什么品牌也早想好，就佐丹奴和班尼路吧。<br />
开始联系厂家，厂家要能生产Shirt和Pants，而且要有生产Giordano、Baleno这两个品牌。</p>
<p>我们都知道服装都有一些共同的特征，每件衣服都有所属的品牌、每条短裤都有一个尺码。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #ffffff"><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;Shirt&nbsp;{<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;品牌</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;String&nbsp;getBrand();<br />
}<br />
<br />
</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;Pants&nbsp;{<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;尺寸</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;getSize();&nbsp;<br />
}<br />
</span></div>
<p>佐丹奴的衣服自然会印上Giordano字样的标志</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #ffffff"><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;GiordanoTShirt&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Shirt&nbsp;{<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getBrand()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Giordano</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;GiordanoPants&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Pants&nbsp;{<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;getSize()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">31</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<p>班尼路的也不例外，加上自己的品牌标志<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #ffffff"><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BalenoTShirt&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Shirt&nbsp;{<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getBrand()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Baleno</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BalenoPants&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Pants&nbsp;{<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;getSize()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">29</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<p><br />
运气不错，很快就找到了厂家。<br />
<br />
// 生产Giordano上衣和短裤的工厂</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #ffffff"><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;GiordanoFactory&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;ISpecialityShop&nbsp;{<br />
&nbsp;&nbsp;&nbsp;Shirt&nbsp;createShirt()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GiordanoTShirt();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;Pants&nbsp;createPants()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GiordanoPants();<br />
&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
// 生产Baleno上衣和短裤的工厂<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #ffffff"><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BalenoFactory&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;ISpecialityShop&nbsp;{<br />
&nbsp;&nbsp;&nbsp;Shirt&nbsp;createShirt()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BalenoTShirt();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;Pants&nbsp;createPants()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BanlenoPants();<br />
&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<p><br />
厂家开始供货，开业大吉，哈哈。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #ffffff"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestAbstractFactory&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;TestCase&nbsp;{<br />
&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;{<br />
&nbsp;&nbsp;TestRunner.run(TestAbstractFactory.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
&nbsp;}<br />
<br />
&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;testFac()&nbsp;{<br />
&nbsp;&nbsp;setShop(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GiordanoFactory());<br />
&nbsp;&nbsp;IShirt&nbsp;shirt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;shopFactory.createShirt();<br />
&nbsp;&nbsp;shirt.getBrand();<br />
&nbsp;&nbsp;IPants&nbsp;pants&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;shopFactory.createPants();<br />
&nbsp;&nbsp;pants.getSize();<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;setShop(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BalenoFactory());<br />
&nbsp;&nbsp;shirt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;shopFactory.createShirt();<br />
&nbsp;&nbsp;shirt.getBrand();<br />
&nbsp;&nbsp;pants&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;shopFactory.createPants();<br />
&nbsp;&nbsp;pants.getSize();<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setShop(ISpecialityShop&nbsp;factory)&nbsp;{<br />
&nbsp;&nbsp;shopFactory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory;<br />
&nbsp;}<br />
<br />
&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setUp()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
<br />
&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;tearDown()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;shopFactory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;&nbsp;<br />
&nbsp;}<br />
&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;ISpecialityShop&nbsp;shopFactory;<br />
}</span></div>
<p><br />
以后想多经营几个品牌，只需直接去找了厂家供货即可。</p>
<p><br />
最后，为了充分理解抽象工厂模式，画出它的UML图是很有必要的。<br />
<br />
<img style="width: 599px; height: 266px" height="266" alt="" src="http://www.blogjava.net/images/blogjava_net/x-29/AbstractFactory.jpg" width="599" border="0" /><br />
<br />
<br />
</p>
<img src ="http://www.blogjava.net/x-29/aggbug/111950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/x-29/" target="_blank">听风的歌</a> 2007-04-19 15:24 <a href="http://www.blogjava.net/x-29/archive/2007/04/19/111950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>◎Ant的使用 - 常用任务标签(一)</title><link>http://www.blogjava.net/x-29/archive/2007/04/10/109656.html</link><dc:creator>听风的歌</dc:creator><author>听风的歌</author><pubDate>Tue, 10 Apr 2007 07:41:00 GMT</pubDate><guid>http://www.blogjava.net/x-29/archive/2007/04/10/109656.html</guid><wfw:comment>http://www.blogjava.net/x-29/comments/109656.html</wfw:comment><comments>http://www.blogjava.net/x-29/archive/2007/04/10/109656.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/x-29/comments/commentRss/109656.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/x-29/services/trackbacks/109656.html</trackback:ping><description><![CDATA[<p>建立一个基本的程序通常有几个常用的任务，像是设置通用属性、创建或删除目录、编译程序、打包、拷贝文件等等。<br>这些任务，我们都可以在build.xml中编写相应的任务目标[target]<br><br>■ 属性设定：&lt;property&gt;<br><br>如果一个固定的值（如：目录D:\dev\lib)，在多个target中被应用到，这时我们就通过&lt;property&gt;对它设定，应用到它的地方都使用设定的&lt;property&gt;代替，如果日后有发生变化，也只需要改动&lt;property&gt;的设定即可</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #ffffff"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="defProperty"</span><span style="COLOR: #ff0000">&nbsp;description</span><span style="COLOR: #0000ff">="设定属性"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="tomcat.home"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="C:/jakarta-tomcat"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="app.home"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;value</span><span style="COLOR: #0000ff">="."</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="src.home"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="${app.home}/src"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="lib.home"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="${app.home}/WEB-INF/lib"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="classes.home"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="${app.home}/WEB-INF/classes"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span></div>
<p>每个property都有一个name(名称)和一个value(值)，要引用某个property可以使用${property-name}，像上面的${app.home}。<br>这些属性的值也可以在执行的时候指定，如：ant -Dapp.home="d:\dev\book"，如果执行时没有指定，那么就会使用value上定义的值。</p>
<br>■ 创建目录：&lt;mkdir&gt;<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="createDir"</span><span style="COLOR: #ff0000">&nbsp;description</span><span style="COLOR: #0000ff">="创建必要的目录"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">mkdir&nbsp;</span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="test/classes"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">mkdir&nbsp;</span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${DIST.DIR}"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span></div>
如果父目录不存在，也会被同时创建；如test不存在，会先创建test目录，然后在其下创建classes目录。可以看到我们这里使用了一个属性DIST.DIR代替一个具体的目录。<br><br>■ 创建目录和文件：&lt;delete&gt;<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="delDirAndFile"</span><span style="COLOR: #ff0000">&nbsp;description</span><span style="COLOR: #0000ff">="删除目录和文件"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;删除目录&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">delete&nbsp;</span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${classes.dir}"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;删除指定的文件&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">delete&nbsp;</span><span style="COLOR: #ff0000">file</span><span style="COLOR: #0000ff">="${jar.file}"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;删除指定目录的一组文件&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">delete</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset&nbsp;</span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${classes.dir}"</span><span style="COLOR: #ff0000">&nbsp;includes</span><span style="COLOR: #0000ff">="**/*.class"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">delete</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;删除指定目录及子目录，同时也删除它自己&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">delete&nbsp;</span><span style="COLOR: #ff0000">includeEmptyDirs</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset&nbsp;</span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="build"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">delete</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>■ 拷贝文件和目录：&lt;copy&gt;<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #ffffff"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="copyFileAndDir"</span><span style="COLOR: #ff0000">&nbsp;description</span><span style="COLOR: #0000ff">="拷贝文件和目录"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;拷贝单个文件&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">copy&nbsp;</span><span style="COLOR: #ff0000">file</span><span style="COLOR: #0000ff">="error.log"</span><span style="COLOR: #ff0000">&nbsp;tofile</span><span style="COLOR: #0000ff">="debug.log"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;拷贝单个文件到指定目录&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">copy&nbsp;</span><span style="COLOR: #ff0000">file</span><span style="COLOR: #0000ff">="error.log"</span><span style="COLOR: #ff0000">&nbsp;todir</span><span style="COLOR: #0000ff">="${LOG.DIR}"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;拷贝多个文件到指定目录&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">copy&nbsp;</span><span style="COLOR: #ff0000">todir</span><span style="COLOR: #0000ff">="${LOG.DIR}"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset&nbsp;</span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="log"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="**/*.log"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">exclude&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="**/error.log"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">fileset</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">copy</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;同上&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;copy&nbsp;todir="${LOG.DIR}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;fileset&nbsp;dir="log"&nbsp;excludes="**/*.txt"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/copy&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;拷贝一个目录到另一个目录&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">copy&nbsp;</span><span style="COLOR: #ff0000">todir</span><span style="COLOR: #0000ff">="newbin"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset&nbsp;</span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="bin"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">copy</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>■ 移动或重命名文件、目录：&lt;move&gt;<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #ffffff"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="moveFileAndDir"</span><span style="COLOR: #ff0000">&nbsp;description</span><span style="COLOR: #0000ff">="移动或重命名文件和目录"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;移动或重命名一个文件&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">move&nbsp;</span><span style="COLOR: #ff0000">file</span><span style="COLOR: #0000ff">="error.log"</span><span style="COLOR: #ff0000">&nbsp;tofile</span><span style="COLOR: #0000ff">="debug.log"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;移动或重命名一个文件到另一个目录下&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">move&nbsp;</span><span style="COLOR: #ff0000">file</span><span style="COLOR: #0000ff">="error.log"</span><span style="COLOR: #ff0000">&nbsp;todir</span><span style="COLOR: #0000ff">="new/log"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;将目录移到另一个目录下&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">move&nbsp;</span><span style="COLOR: #ff0000">todir</span><span style="COLOR: #0000ff">="new/log"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset&nbsp;</span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="log"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">move</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;一组文件移到另一个目录下&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">move&nbsp;</span><span style="COLOR: #ff0000">todir</span><span style="COLOR: #0000ff">="new/log"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset&nbsp;</span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="log"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="**/*.log"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">exclude&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="**/error.log"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">fileset</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">move</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;<br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span></div>
<img src ="http://www.blogjava.net/x-29/aggbug/109656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/x-29/" target="_blank">听风的歌</a> 2007-04-10 15:41 <a href="http://www.blogjava.net/x-29/archive/2007/04/10/109656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>◎Ant的使用 - buildfile</title><link>http://www.blogjava.net/x-29/archive/2007/04/09/109466.html</link><dc:creator>听风的歌</dc:creator><author>听风的歌</author><pubDate>Mon, 09 Apr 2007 09:30:00 GMT</pubDate><guid>http://www.blogjava.net/x-29/archive/2007/04/09/109466.html</guid><wfw:comment>http://www.blogjava.net/x-29/comments/109466.html</wfw:comment><comments>http://www.blogjava.net/x-29/archive/2007/04/09/109466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/x-29/comments/commentRss/109466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/x-29/services/trackbacks/109466.html</trackback:ping><description><![CDATA[前面简单的介绍了Ant<br><a href="http://www.blogjava.net/x-29/archive/2007/04/09/109426.html">http://www.blogjava.net/x-29/archive/2007/04/09/109426.html</a><br><br>现在来看一下，如何编写Ant的buildfile.<br><br>buildfile是一个xml文档，默认命名为build.xml，在Ant的buildfile中，我们可以设定属性[property]、任务[task]，每个buildfile中可以设定多个任务[task]，这些任务可以是编译源码、生成Doc文档、程序测试等；通常会将这些任务组织为一个目标[target]。<br><br>看一个简单的build.xml，大概了解一下<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #ffffff"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">project&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="addressbook"</span><span style="COLOR: #ff0000">&nbsp;default</span><span style="COLOR: #0000ff">="compile"</span><span style="COLOR: #ff0000">&nbsp;basedir</span><span style="COLOR: #0000ff">="."</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;=====================&nbsp;Property&nbsp;Definitions&nbsp;===========================&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="tomcat.home"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="C:/jakarta-tomcat"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="app.home"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value</span><span style="COLOR: #0000ff">="."</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp; <span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="src.home"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value</span><span style="COLOR: #0000ff">="${app.home}/src"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="lib.home"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value</span><span style="COLOR: #0000ff">="${app.home}/WEB-INF/lib"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="classes.home"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value</span><span style="COLOR: #0000ff">="${app.home}/WEB-INF/classes"</span><span style="COLOR: #0000ff">/&gt;<br></span><br></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;====================&nbsp;"compile"&nbsp;Target&nbsp;=============================&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="compile"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">javac&nbsp;</span><span style="COLOR: #ff0000">srcdir</span><span style="COLOR: #0000ff">="${src.home}"</span><span style="COLOR: #ff0000">&nbsp;destdir</span><span style="COLOR: #0000ff">="${classes.home}"</span><span style="COLOR: #ff0000">&nbsp;debug</span><span style="COLOR: #0000ff">="yes"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpath&nbsp;</span><span style="COLOR: #ff0000">refid</span><span style="COLOR: #0000ff">="compile.classpath"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">javac</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">project</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>可以看到build.xml中，project作为根元素(每个buildfile中都会有一个project)，然后是定义了两个属性以及一个target。<br><br>project元素和target元素的属性，可以看下面的表。<br><br>
<table style="WIDTH: 610px; BORDER-COLLAPSE: collapse; HEIGHT: 309px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>标签</td>
            <td>属性</td>
            <td>描述</td>
            <td>必需的</td>
        </tr>
        <tr>
            <td rowSpan=3>project</td>
            <td>name</td>
            <td>项目名称</td>
            <td>No</td>
        </tr>
        <tr>
            <td>default</td>
            <td>没有指定target时，缺省使用的target</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td>basedir</td>
            <td>作为计算其它路径的基路径。该属性可以被basedir property覆盖，当覆盖时，该属性被忽略。如果属性和basedir property都没有设定，就使用buildfile文件的父目录</td>
            <td>No</td>
        </tr>
        <tr>
            <td rowSpan=5>target</td>
            <td>name</td>
            <td>target的名字</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td>depends</td>
            <td>用逗号隔开的target名字列表，设定些属性，就意味着本target将依赖于depends设定的target</td>
            <td>No</td>
        </tr>
        <tr>
            <td>if</td>
            <td>执行target所需设定的属性名</td>
            <td>No</td>
        </tr>
        <tr>
            <td>unless</td>
            <td>执行target所需要清除设定的属性名</td>
            <td>No</td>
        </tr>
        <tr>
            <td>description</td>
            <td>关于target的描述</td>
            <td>No</td>
        </tr>
    </tbody>
</table>
<br>在使用<br>
<div style="BORDER-RIGHT: #ffffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ffffff 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ffffff 1px solid; WIDTH: 98%; COLOR: #ffffff; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #ffffff 1px solid; BACKGROUND-COLOR: #000000"><span style="COLOR: #ffffff">D:\&gt;Ant</span></div>
执行时，会先进入到"complie"目标(上面的Ant没有指定target，所以会使用project的default值)，编译源码(javac task)<br><br><span style="COLOR: #0000ff">提示：我们可以在ant后面指定想要执行的target，缺省情况下会使用默认的(即:project元素default属性设定的target)。</span>&nbsp;<br><br>通常，要运行一个程序，首先得要编译它的源码，生成可执行文件，然后才运行这个可执行文件。&nbsp;可以看到这是由两个任务组成，而且运行可执行文件任务依赖编译源码任务。Ant的buildfile中可以定义多个target，同时一个target的执行可以依赖于另一个target，表描这种依赖关系可以通过target元素的depends属性，depends可以设定多个target(以逗号间隔)，如：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #ffffff"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="run"</span><span style="COLOR: #ff0000">&nbsp;depends</span><span style="COLOR: #0000ff">="mkdir,complie"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;运行程序<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span></div>
"run"目标依赖"mkdir"和"complie"目标，也就是运行程序之前，要先建立相关文档目录，编译源码生成可执行文件。<br>depends属性设定的依赖是按左到右的顺序执行，执行命令<em>Ant run</em>，会先执行"mkdir"目标，执行完后，再到"complie"，最后才执行"run"目标。<br><br>&lt;property&gt;元素，主要是设置一些常用的属性，每个属性都会有一个名称(name)，以后再做详解。<br><br>有关Ant的buildfile，就说到这，下篇说说Ant的常用任务[task]标签<br><br><br>
<img src ="http://www.blogjava.net/x-29/aggbug/109466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/x-29/" target="_blank">听风的歌</a> 2007-04-09 17:30 <a href="http://www.blogjava.net/x-29/archive/2007/04/09/109466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>◎Ant的使用 - 简单介绍</title><link>http://www.blogjava.net/x-29/archive/2007/04/09/109426.html</link><dc:creator>听风的歌</dc:creator><author>听风的歌</author><pubDate>Mon, 09 Apr 2007 07:39:00 GMT</pubDate><guid>http://www.blogjava.net/x-29/archive/2007/04/09/109426.html</guid><wfw:comment>http://www.blogjava.net/x-29/comments/109426.html</wfw:comment><comments>http://www.blogjava.net/x-29/archive/2007/04/09/109426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/x-29/comments/commentRss/109426.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/x-29/services/trackbacks/109426.html</trackback:ping><description><![CDATA[<p>Ant是什么？ Ant的全名是"<strong>Another Neat Tool"</strong>，它是一个基于java的生成工具。<br><br>在使用Ant之前，我们要先到<a href="http://ant.apache.org/">Ant官方网站</a>将其下载下来，进行相关的设置。<br><br>下面说一下怎么设置Ant，下载Ant之后，解压到相关的目录，如：D:\dev\apache-ant-1.6.1<br></p>
<p>
<ul>
    <li>新增环境变量：JAVA_HOME，内容为JAVA的安装路径；如：D:\dev\j2sdk1.4.2
    <li>新增环境变量：ANT_HOME，内容为Ant的安装目录，如上：D:\dev\apache-ant-1.6.1
    <li>在PATH环境变量中加入Ant的bin目录：%\ANT_HOME%\bin </li>
</ul>
<p>&nbsp;</p>
正确的安装Ant和设置好环境变量后，就可以开始运行ant了。<br>运行Ant很简单，只要输入ant就可以了<br>
<div style="BORDER-RIGHT: #ffffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ffffff 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ffffff 1px solid; WIDTH: 98%; COLOR: #ffffff; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #ffffff 1px solid; BACKGROUND-COLOR: #333300"><span style="COLOR: #ffffff">D:\</span><span style="COLOR: #ffffff">&gt;</span><span style="COLOR: #ffffff">ant<br>Buildfile:&nbsp;build.xml&nbsp;does&nbsp;not&nbsp;exist</span><span style="COLOR: #ffffff">!</span><span style="COLOR: #ffffff"><br>Build&nbsp;failed<br>D:\</span><span style="COLOR: #ffffff">&gt;</span></div>
没有指定任何参数时，Ant会在当前目录下寻找build.xml文件。如果找到了就用该文件作为buildfile。<br><br>如果，使用Ant的-find选择，就会在当前目录的上级目录查找build.xml文件，一直到达文件系统的根。<br>
<div style="BORDER-RIGHT: #ffffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ffffff 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ffffff 1px solid; WIDTH: 98%; COLOR: #ffffff; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #ffffff 1px solid; BACKGROUND-COLOR: #333300"><span style="COLOR: #ffffff">D:\</span><span style="COLOR: #ffffff">&gt;</span><span style="COLOR: #ffffff">ant -find</span></div>
<br>上面说得的都是默认的buildfile，要想使用指定的buildfile，可以使用-buildfile file参数，这里file就是指定的要查找的buildfile。<br>
<div style="BORDER-RIGHT: #ffffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ffffff 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ffffff 1px solid; WIDTH: 98%; COLOR: #ffffff; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #ffffff 1px solid; BACKGROUND-COLOR: #333300"><span style="COLOR: #ffffff">D:\</span><span style="COLOR: #ffffff">&gt;</span><span style="COLOR: #ffffff">ant -buildfile hibernate-build.xml</span></div>
<br>也可以在Ant命令之后指定执行一个或者多个target，缺省情况下，Ant使用&lt;project&gt;标签中default属性所指定的target。<br>
<div style="BORDER-RIGHT: #ffffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ffffff 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ffffff 1px solid; WIDTH: 98%; COLOR: #ffffff; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #ffffff 1px solid; BACKGROUND-COLOR: #333300"><span style="COLOR: #ffffff">D:\</span><span style="COLOR: #ffffff">&gt;</span><span style="COLOR: #ffffff">ant -buildfile hibernate-build.xml compile</span></div>
"complie"就是一个target<br><br><br><strong>下面来看一些具体的例子<br></strong><em>D:\&gt;Ant</em><br>使用当前目录下的build.xml运行ant，执行缺省的target（也就是&lt;project&gt;标答中default属性所设写的target)<br><br><em>D:\&gt;Ant -buildfile hibernate-build.xml<br></em>使用当前目录下的hibernate-build.xml运行ant，执行缺省的target。<br><br><em>D:\&gt;And -buildfile hibernate-build.xml compile<br></em>使用当前目录下的hibernate-build.xml运行ant，并执行名为"complie"的target。 <br><br><br>
<img src ="http://www.blogjava.net/x-29/aggbug/109426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/x-29/" target="_blank">听风的歌</a> 2007-04-09 15:39 <a href="http://www.blogjava.net/x-29/archive/2007/04/09/109426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>