ok,上邊你完成了任務,但是你是否有些感觸呢,在那些build.xml中,大多數是重復的,而且更改一次目錄需要更改不少東西。是否能讓工作做的更好一點呢,答案是肯定的。
引入兩個東西:
1,propery
2,xml include
這兩個東西都有一個功能,就是能把build.xml中<propery />中的內容分離出來,共同使用
除此之外它們各有特點:
propery的特點是維護簡單,只需要簡單的鍵值對,因為并不是所有人都喜歡xml的格式
xml include的特點是不單可以提取出屬性來,連target也可以。
還是以前的例子:
例如我們想把src1 src2 src3這三個屬性從xml中提出來,可以新建一個文件叫all.properties
里邊的內容
src1=D:\\study\\ant\\src1
src2=D:\\study\\ant\\src2
src3=D:\\study\\ant\\src3
然后你的build.xml文件可以這樣寫,別人只需要更改配置文件,而不許要更改你的build.xml文件了
<?xml version="1.0" encoding="UTF-8" ?>
<project name="main" default="build" basedir=".">
?<property file="all.properties" />
?<property name="bin" value="${basedir}\bin" />
?<target name="init">
??<mkdir dir="${bin}" />
?</target>
?<target name="run">
??<ant dir="${src1}" target="run" />
??<ant dir="${src2}" target="run" />
??<ant dir="${src3}" target="run" />
?</target>
?<target name="clean">
??<ant dir="${src1}" target="clean" />
??<ant dir="${src2}" target="clean" />
??<ant dir="${src3}" target="clean" />
?</target>?
?<target name="build" depends="init,call">
??<copy todir="${bin}">
???<fileset dir="${src1}">
????<include name="*.jar" />
???</fileset>
???<fileset dir="${src2}">
????<include name="*.jar" />
???</fileset>
???<fileset dir="${src3}">
????<include name="*.jar" />
???</fileset>
??</copy>
?</target>
?<target name="rebuild" depends="build,clean">
??<ant target="clean" />
??<ant target="build" />
?</target>
?<target name="test">
??<ant dir="${src1}" target="test" />
??<ant dir="${src2}" target="test" />
??<ant dir="${src3}" target="test" />
?</target>
</project>
如果你自己看的話你會看到這樣一個target
<target name="test">
?<ant dir="${src1}" target="test" />
?<ant dir="${src2}" target="test" />
?<ant dir="${src3}" target="test" />
</target>
有的時候你想給每個小組的build.xml加入幾個target,一種做法是每個里邊寫,然后在這里調用
但是有一種更好的方法。
你可以寫一個include.xml文件,內容如下
<?xml version="1.0" encoding="UTF-8" ?>
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<target name="test" >
?<ant target="run" />
</target>
然后更改你三個小組的build.xml文件,每個里邊加入如下內容
<!--include a xml file ,it can be common propery ,can be also a target? -->
<!DOCTYPE project [
<!ENTITY share-variable SYSTEM "file:../include.xml">
]>
&share-variable;
變成如下的樣子
這個時候,你只要在include.xml添加propery , 添加target,三個build.xml會同時添加這些propery和target
而且不會讓三個組的build.xml變得更復雜。
<?xml version="1.0" encoding="UTF-8" ?>
<!--include a xml file ,it can be common propery ,can be also a target? -->
<!DOCTYPE project [
<!ENTITY share-variable SYSTEM "file:../include.xml">
]>
<project name="HelloWorld" default="run" basedir=".">
?<!--use the include? -->
?&share-variable;
?<!--defined the property-->
?<!--via include
?<property name="src" value="src"/>
?<property name="dest" value="classes"/>
?-->
?<property name="hello_jar" value="hello1.jar"/>
?<!--define the op-->
?<target name="init">
??<mkdir dir="${dest}"/>
?</target>
?<target name="compile" depends="init">
??<javac srcdir="${src}" destdir="${dest}"/>
?</target>
?<target name="build" depends="compile">
??<jar jarfile="${hello_jar}" basedir="${dest}"/>
?</target>
?<target name="run" depends="build">
??<java classname="test.ant.HelloWorld" classpath="${hello_jar}"/>
?</target>
?<target name="clean">
??<delete dir="${dest}" />
??<delete file="${hello_jar}" />
?</target>
?<target name="rerun" depends="clean,run">
??<ant target="clean" />
??<ant target="run" />
?</target>
</project>