2006-8-21知識總結
l Ant構件工具
1、配置path:
path等於apache-ant-1.6.5中bin文件所在目錄下。如 C:/apache-ant-1.6.5/bin
2、配置JAVA_HOME
因爲ant.bat批處理程序中已經有JAVA_HOME的配置,但是路徑不一定對,所以配置JAVA_HOME的配置要看具體情況,可以不配置,未免出錯要求配置。
JAVA_HOME等於在java/jdk/lib 目錄下,主要是在ant運行時去調用java中(如tools.jar包中類)的類去實現。如可設置爲:C:/Program Files/Java/jdk1.5.0_01或者C:/Program Files/Java/jdk1.5.0_01/lib (可能是因爲系統將自動去尋找jdk1.5.0_01下的lib文件下的java類包)
3.批處理中的部分命令:如@echo off他下面的命令不顯示, echo命令打印並執行命令.
4.配置build.xml
其中常用的格式爲:
<?xml version="1.0" encoding="gb2312" ?> <!--資源文件-->
<”default”屬性值指明該工程運行的項目,該屬性可以不指定>
<project name="Lesson1" default="run" >
<property file="build.properties"/> <!--建目錄-->
<target name="init">
<mkdir dir="class" />
</target>
<!-- 編譯文件,srcdir設置源文件目錄,destdir設置生成.class目標文件目錄-->
<target name="compile" depends="init" >
<javac srcdir="${dir.src}" destdir="${dir.class}" />
</target>
<!--運行文件,depends設置本操作依靠於compile操作,即運行到本操作時將根據depends屬性跳轉到先去執行comlile操作,等complie完成後才執行本操作,把complie作爲本操作運行的前提,classpath屬性設置運行文件所在目錄>
<target name="run" depends="compile" >
<java classname="Hello" classpath="${dir.class}" />
</target>
<!--刪除文件-->
<target name="delete" depends="run">
<delete includeEmptyDirs="true">
<fileset dir="${dir.class}" includes="*/**"/>
</delete>
</target>
</project>
其中的每個目標操作其實都對應着一個java類,所以ant的可擴展性很強,可以自己編寫一個類讓ant去調用從而實現自己想讓實現的功能。其中的類明那些變量應該用build.properties文件配置,這樣可擴展性強。其他屬性請參考ant幫助。
5、補充:Properties的實現與作用:
a. 實現:可在當前目錄下創建一個build.properties的文件(擴展名爲 .properties),在此文件中添加值(如:dir.class = class).然後在當前build.xml文件中創建一<property></property>標籤對,在其中設置file屬性,值設置爲目錄下的build.properties(如不同一目錄下將在前添加相對路徑)。
b. 作用:當在大量處理相同路徑下的文件時,可通過改動build.properties中的值從而改變所有在 build.xml中的所有相關的項。
例如:
built.porperties中對應值爲:
dir.src = src
dir.class = class (其中,src代表源文件夾、class代表目標文件夾)
built.xml文件對應代碼如下:
<project name = "testAnt" default = "run">
<property file = "build.properties" /> <!-- properties在built.xml中的引用 -->
<target name = "make">
<mkdir dir = "class"></mkdir>
</target>
<target name = "complie">
<固定格式:${},在{}中添加built.porperties中的值>
<javac srcdir = "${dir.src}" destdir = "${dir.class}" />
</target>
<target name = "run" depends = "complie">
<java classname = "Hello" classpath = "class" />
</target>
</project>
6、include和exclude 的運用:
例如:
<classpath>
<pathelement path="${classpath}"/>
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
<pathelement location="classes"/>
<dirset dir="${build.dir}">
<include name="apps/**/classes"/>
<exclude name="apps/**/*Test*"/>
</dirset>
<filelist refid="third-party_jars"/>
</classpath>
說明:
a. name="**/*.jar" 表示:
當前目錄下以及所有“子子孫孫”目錄下以“.jar”爲擴展名的所有文件。其中“** ”當前目錄下以及所有“子子孫孫”目錄下的文件,“*.jar”表示所有以“.jar”爲擴展名的文件,
b. name="apps/**/*Test*”表示:
apps所有“子子孫孫”目錄下的文件名中包含“Test”的的所有文件。其中“**”表示apps的所有“子子孫孫”目錄下的文件。
l 專家模式:誰最瞭解,持有數據,就讓誰處理該事件,這就叫專家模式。
例如:
a. 電視和關電視的人?
——由於是電視清楚關電視的操作,瞭解關電視的過程,因此電視去關而不是人去關,人只是發出了一個關電視的動作,具體怎麼進行關電視的操作而是有電視去實施的。
b. 票據和售貨員?
——由於票據持有所有有關數據,因此在統計總額時是又票據去進行數據處理,而不是人,人只是可能發出統計的命令。
c. 門與關門的人?
——由於門自己最清楚自己的構造,怎麼樣才能關上門,因此是又門去處理關門這一事件,而不是人,人只可能發出關門的命令,而具體怎麼關是有門去實施。
l 類複製的應用(克隆):
用於保證程序的穩定性,例如如果在多線程中2個線程同時超做一個對象的時候爲了保證結果的穩定,所以可以考慮複製對象,當然也可以用syschronized保證線程同步。
例如:
class Student
{
private String name;
private int age;
private Thread t;
protect Object clone() throws CloneNotSupportedException
{
Student another = new Student();
another.name = this.name;
another.age = age;
}
}
學習感言:
今天是忙碌的一天,思考沒停止過,手沒停止過,現在已經快凌晨一點了,一會也該洗澡睡覺了。
今天是充實的一天,學習了不少新知識,讓我經歷從不知道Ant構架工具到了解和會使用的過程,最後能自己發現問題,解決問題和總結問題。
這次學習班中很厲害的同學很多,他們都成爲了我的好朋友,他們都很熱情和主動的幫助我解決疑難,相信在張老師的教學中和這些好朋友的幫助下,我很有信心學習好。