3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Ant 下载、安装、使用、教程全面了解「建议收藏」

發(fā)布時間:2023/12/24 综合教程 22 生活家
生活随笔 收集整理的這篇文章主要介紹了 Ant 下载、安装、使用、教程全面了解「建议收藏」 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Eclipse 內(nèi)置了 Ant 。 Ant 是一種類似于批處理程序的軟件包,它主要繁瑣的工作是編寫和調(diào)試自動處理腳本(一個 XML 文件),但只要有了這個腳本,我們就可以一鍵完成所有的設(shè)定工作。
本節(jié)還是以 myswt 這個應(yīng)用程序項(xiàng)目的打包為例,用 Ant 來完成“編譯->打成 JAR 包->復(fù)制項(xiàng)目引用庫->復(fù)制本地化文件 swt-win32-3063.dll ->輸出 API 文檔”這五步。
1 、在 myswt 項(xiàng)目根目錄下,創(chuàng)建最主要的 build.xml 文件
<?xml version=1.0?>
<project name=myswt project default=api_doc>
<!– 定義目錄變量 –>
<property name=src.dir value=src />
<property name=bin.dir value=bin />
<property name=eclipse_plugins.dir value=c:/eclipse/plugins />
<property name=dist.dir value=d:/dist />
<property name=doc.dir value=${dist.dir}/api />
<property name=swt.dll value=swt-win32-3063.dll />
<!– 定義編譯文件時所引用的庫 –>
<path id=master-classpath>
<fileset dir=${eclipse_plugins.dir} id=project_lib>
<include name=org.eclipse.ui.workbench_3.0.1/workbench.jar/>
<include name=org.eclipse.swt.win32_3.0.1/ws/win32/swt.jar/>
<include name=org.eclipse.jface_3.0.0/jface.jar/>
<include name=org.eclipse.osgi_3.0.1/osgi.jar/>
<include name=org.eclipse.osgi_3.0.1/core.jar/>
<include name=org.eclipse.osgi_3.0.1/resolver.jar/>
<include name=org.eclipse.osgi_3.0.1/defaultAdaptor.jar/>
<include name=org.eclipse.osgi_3.0.1/eclipseAdaptor.jar/>
<include name=org.eclipse.osgi_3.0.1/console.jar/>
<include name=org.eclipse.core.runtime_3.0.1/runtime.jar/>
<include name=org.eclipse.jface.text_3.0.1/jfacetext.jar/>
<include name=org.eclipse.ui.workbench.compatibility_3.0.0/compatibility.jar/>
</fileset>
</path>

<!– 首任務(wù)(空) –>
<target name=init/>
<!– 編譯 –>
<target name=compile depends=init>
<delete dir=${bin.dir}/>
<mkdir dir=${bin.dir}/>
<!– 編譯源程序 –>
<javac srcdir=${src.dir} destdir=${bin.dir} target=1.4>
<classpath refid=master-classpath/>
</javac>
<!– 復(fù)制圖標(biāo)目錄 –>
<mkdir dir=${bin.dir}/icons/>
<copy todir=${bin.dir}/icons>
<fileset dir=icons/>
</copy>
</target>
<!– 打包 –>
<target name=pack depends=compile>
<!– bin 目錄壓縮成 JAR 包 –>
<delete dir=${dist.dir}/>
<mkdir dir=${dist.dir} />
<jar basedir=${bin.dir} destfile=${dist.dir}/myswt.jar manifest=ant_manifes.txt>
<exclude name=**/*Test.* />
<exclude name=**/Test*.* />
</jar>
<!– 復(fù)制用到的庫 –>
<mkdir dir=${dist.dir}/lib />
<copy todir=${dist.dir}/lib>
<fileset refid=project_lib/>
</copy>
<!– 復(fù)制本地化文件 –>
<copy todir=${dist.dir} file=${swt.dll}/>
</target>
<!– 輸出 api 文檔 –>
<target name=api_doc depends=pack>
<delete dir=${doc.dir}/>
<mkdir dir=${doc.dir} />
<javadoc destdir=${doc.dir} author=true version=true use=true windowtitle=MySWT API>
<packageset dir=${src.dir} defaultexcludes=yes/>
<doctitle><![CDATA[<h1>MySWT Project</h1>]]></doctitle>
<bottom><![CDATA[<i>Document by ChenGang 2005.</i>]]></bottom>
</javadoc>
</target>
</project>
代碼說明:
( 1 ) property 項(xiàng)是定義變量,比如 <property name=swt.dll value=swt-win32-3063.dll /> ,就是定義一個變量: swt.dll=swt-win32-3063.dll 。以后用這個變量則是這樣: ${swt.dll} 。
一般盡量將今后可能會變動的目錄、文件等定義成變量,以方便維護(hù)。不象 Java 變量有類型的區(qū)分, Ant 變量是不區(qū)別目錄、文件等的,所以為了見名知意,在取變量名時,目錄都加“ dir ”后綴,這個后綴是可以任取名的。
下面給出本例用到的變量的含義:
l src.dir - Java 源文件路徑。 value=src 的 src 是一個相對路徑,它相對的是 build.xml 的所在目錄位置(即項(xiàng)目根目錄)。
l bin.dir - Java 編譯文件的輸出路徑
l eclipse_plugins.dir - eclipse 的 plugins 目錄
l dist.dir - 打包文件的存放目錄
l doc.dir - API 文檔的存放目錄,這里用到了 dist.dir 變量,直接寫 value=d:/dist/api 也未嘗不可。
l swt.dll - SWT 本地化文件。
( 2 ) <path id=master-classpath> ,定義編譯文件時所引用的庫,相當(dāng)于 classpath 。 <fileset> 項(xiàng)表示一個文件集,再深入一層的 <include> 項(xiàng),則表示此文件集下的文件,它們的路徑定位相對于 <fileset> 的 dir 屬性。 <fileset> 還有一個 id 屬性,在后面復(fù)制引用庫時會用到。
也許有讀者會問:“你是怎么知道要引用這些文件的?”回答:看項(xiàng)目根目錄下的“ .classpath ”文件,就可以知道本項(xiàng)目要引用那些庫了。實(shí)際上筆者是把 .classpath 復(fù)制一份后,然后用 Editplus 編輯而得。
( 3 )接下來開始定義一些任務(wù)。首任務(wù)一般都讓它為空(沒有具體任務(wù)內(nèi)容): <target name=init/> 。
( 4 ) Ant 中的任務(wù)有著相互的依賴( depends )關(guān)系,這些依賴關(guān)系是通過 depends 屬性來定義的。當(dāng)要執(zhí)行一個任務(wù)時, Ant 先去執(zhí)行這個任務(wù)的 depends 任務(wù),……, Ant 就這樣一直往回找下去。比如:在本例的第二行 default=api_doc ,它定義了缺省任務(wù)是 api_doc (輸出 api 文檔)->此任務(wù)的 depends = pack (打包)-> pack 的 depends = compile (編譯)-> compile 的 depends=init (首任務(wù)), init 沒有 depends 。于是, Ant 就從 init 開始依次往回執(zhí)行任務(wù): init -> compile -> pack -> api_doc 。
如果你不想“輸出 api 文檔”,則將第二行的缺省任務(wù)定義成 default=pack 即可,這時整個任務(wù)鏈就拋開了 api_doc 。
( 5 ) <delete dir=${bin.dir}/> 刪除目錄。 <mkdir dir=${bin.dir}/> 新建目錄
( 6 )編譯源程序,如下
<javac srcdir=${src.dir} destdir=${bin.dir} target=1.4>
<classpath refid=master-classpath/>
</javac>
l srcdir - 源文件目錄,其子目錄中的源文件也會被 javac.exe 編譯。
l destdir - 編譯文件輸出目錄。
l target - 以 JDK1.4 為編譯目標(biāo)。
l classpath - 編譯的 classpath 設(shè)置, refid 是指引用前面設(shè)定的 master-classpath 。
( 7 )將 icons (即 myswt/icons )目錄的文件,復(fù)制到 myswt/bin/icons 目錄中,如下:
<copy todir=${bin.dir}/icons>
<fileset dir=icons/>
</copy>
( 8 )將文件打成 JAR 包
<jar basedir=${bin.dir} destfile=${dist.dir}/myswt.jar manifest=ant_manifes.txt>
<exclude name=**/*Test.* />
<exclude name=**/Test*.* />
</jar>
l basedir - 源目錄。
l destfile - 目標(biāo)目錄和打成 JAR 包名。
l manifest - 打包清單文件(后面給出其內(nèi)容)。
l exclude - 使用了通配符將某一些文件排除不打包(主要是一些測試文件)。
( 9 )如下,將 project_lib 的文件復(fù)制到 d:/dist/lib 目錄中。 project_lib 是前面“定義編譯文件時所引用的庫”中的文件集的 id 。結(jié)果參數(shù)下圖 21.25
<copy todir=${dist.dir}/lib>
<fileset refid=project_lib/>
</copy>
( 10 )將本地化文件復(fù)制到 d:/dist 目錄中,如下:
<copy todir=${dist.dir} file=${swt.dll}/>
( 11 )輸出 API 文檔(結(jié)果參數(shù)下圖 21.26 )
<javadoc destdir=${doc.dir} author=true version=true use=true windowtitle=MySWT API>
<packageset dir=${src.dir} defaultexcludes=yes/>
<doctitle><![CDATA[<h1>MySWT Project</h1>]]></doctitle>
<bottom><![CDATA[<i>Document by ChenGang 2005.</i>]]></bottom>
</javadoc>
l destdir - 目標(biāo)路徑 d:/dist/api
l packageset - 源文件目錄
l doctitle - 標(biāo)題
l bottom - 標(biāo)尾。
2 、創(chuàng)建打包清單
為了避免和原來的 manifes.txt 同名,在項(xiàng)目根目錄建立一個名為 ant_manifes.txt 的文件。這個文件內(nèi)容中最長的是 Class-Path 項(xiàng),沒有必要一個個字符的敲入,它可以由項(xiàng)目根目錄下的“ .classpath ”編輯而得。
ant_manifes.txt 內(nèi)容如下:
Manifest-Version: 1.0
Main-Class: jface.dialog.wizard.WizardDialog1
Class-Path: ./lib/org.eclipse.ui.workbench_3.0.1/workbench.jar ./lib/org.eclipse.swt.win32_3.0.1/ws/win32/swt.jar
./lib/org.eclipse.jface_3.0.0/jface.jar ./lib/org.eclipse.osgi_3.0.1/osgi.jar ./lib/org.eclipse.osgi_
3.0.1/core.jar ./lib/org.eclipse.osgi_3.0.1/resolver.jar ./lib/org.eclipse.osgi_3.0.1/defaultAdaptor.ja
r ./lib/org.eclipse.osgi_3.0.1/eclipseAdaptor.jar ./lib/org.eclipse.osgi_3.0.1/console.jar ./lib/org.ecl
ipse.core.runtime_3.0.1/runtime.jar ./lib/org.eclipse.jface.text_3.0.1/jfacetext.jar ./lib/org.eclipse.u
i.workbench.compatibility_3.0.0/compatibility.jar
3 、如下圖 21.23 所示,選擇“ Ant 構(gòu)建”來運(yùn)行 Ant 。

圖 21.23 運(yùn)行“ Ant 構(gòu)建”
運(yùn)行“ Ant 構(gòu)建”后的結(jié)果如下圖 21.23 - 26 所示。

圖 21.24 控制臺的輸出

圖 21.25 輸出文件的目錄結(jié)構(gòu)圖

圖 21.26 輸出的 API 文檔效果圖
4 、運(yùn)行打包結(jié)果
除了清單文件 MANIFEST.MF 之外, myswt.jar 文件和 21.1 節(jié)所得的 myswt.jar 一樣。本節(jié)沒有創(chuàng)建 run.bat 批處理文件,而是用下圖 21.27 所示的“右擊 myswt.jar ->打開方式-> javaw ”的方式來運(yùn)行 myswt.jar 。

圖 21.27 運(yùn)行 myswt.jar

ant命令總結(jié)

1Ant是什么
ApacheAnt是一個基于Java的生成工具。
生成工具在軟件開發(fā)中用來將源代碼和其他輸入文件轉(zhuǎn)換為可執(zhí)行文件的形式(也有可能轉(zhuǎn)換為可安裝的產(chǎn)品映像形式)。隨著應(yīng)用程序的生成過程變得更加復(fù)雜,確保在每次生成期間都使用精確相同的生成步驟,同時實(shí)現(xiàn)盡可能多的自動化,以便及時產(chǎn)生一致的生成版本
2下載、安裝Ant
安裝Ant
下載.zip文件,解壓縮到c:/ant1.3(后面引用為%ANT_HOME%)

2.1在你運(yùn)行Ant之前需要做一些配置工作。
?將bin目錄加入PATH環(huán)境變量。
?設(shè)定ANT_HOME環(huán)境變量,指向你安裝Ant的目錄。在一些OS上,Ant的腳本可以猜測ANT_HOME(Unix和WindosNT/2000)-但最好不要依賴這一特性。
?可選地,設(shè)定JAVA_HOME環(huán)境變量(參考下面的高級小節(jié)),該變量應(yīng)該指向你安裝JDK的目錄。
注意:不要將Ant的ant.jar文件放到JDK/JRE的lib/ext目錄下。Ant是個應(yīng)用程序,而lib/ext目錄是為JDK擴(kuò)展使用的(如JCE,JSSE擴(kuò)展)。而且通過擴(kuò)展裝入的類會有安全方面的限制。
2.2運(yùn)行Ant

運(yùn)行Ant非常簡單,當(dāng)你正確地安裝Ant后,只要輸入ant就可以了。

? 沒有指定任何參數(shù)時,Ant會在當(dāng)前目錄下查詢build.xml文件。如果找到了就用該文件作為buildfile。如果你用-find選項(xiàng)。 Ant就會在上級目錄中尋找buildfile,直至到達(dá)文件系統(tǒng)的根。要想讓Ant使用其他的buildfile,可以用參數(shù)– buildfilefile,這里file指定了你想使用的buildfile。

?可以指定執(zhí)行一個或多個target。當(dāng)省略target時,Ant使用標(biāo)簽<project>的default屬性所指定的target。

命令行選項(xiàng)總結(jié):
ant[options][target[target2[target3]…]]
Options:
-helpprintthismessage
-projecthelpprintprojecthelpinformation
-versionprinttheversioninformationandexit
-quietbeextraquiet
-verbosebeextraverbose
-debugprintdebugginginformation
-emacsproducelogginginformationwithoutadornments
-logfilefileusegivenfileforlogoutput
-loggerclassnametheclassthatistoperformlogging
-listenerclassnameaddaninstanceofclassasaprojectlistener
-buildfilefileusespecifiedbuildfile
-findfilesearchforbuildfiletowardstherootofthefilesystemandusethefirstonefound
-Dproperty=valuesetpropertytovalue
例子
ant
使用當(dāng)前目錄下的build.xml運(yùn)行Ant,執(zhí)行缺省的target。
ant-buildfiletest.xml
使用當(dāng)前目錄下的test.xml運(yùn)行Ant,執(zhí)行缺省的target。
ant-buildfiletest.xmldist
使用當(dāng)前目錄下的test.xml運(yùn)行Ant,執(zhí)行一個叫做dist的target。
ant-buildfiletest.xml-Dbuild=build/classesdist
使用當(dāng)前目錄下的test.xml運(yùn)行Ant,執(zhí)行一個叫做dist的target,并設(shè)定build屬性的值為build/classes。

3編寫build.xml

Ant的buildfile是用XML寫的。每個buildfile含有一個project。

buildfile中每個task元素可以有一個id屬性,可以用這個id值引用指定的任務(wù)。這個值必須是唯一的。(詳情請參考下面的Task小節(jié))

3.1Projects

project有下面的屬性:
AttributeDescriptionRequired
name項(xiàng)目名稱.No
default當(dāng)沒有指定target時使用的缺省targetYes
basedir用于計(jì)算所有其他路徑的基路徑。該屬性可以被basedirproperty覆蓋。當(dāng)覆蓋時,該屬性被忽略。如果屬性和basedirproperty都沒有設(shè)定,就使用buildfile文件的父目錄。No
項(xiàng)目的描述以一個頂級的<description>元素的形式出現(xiàn)(參看description小節(jié))。

一個項(xiàng)目可以定義一個或多個target。一個target是一系列你想要執(zhí)行的。執(zhí)行Ant時,你可以選擇執(zhí)行那個target。當(dāng)沒有給定target時,使用project的default屬性所確定的target。

3.2Targets

一個target可以依賴于其他的target。例如,你可能會有一個target用于編譯程序,一個target用于生成可執(zhí)行文件。你在生成可執(zhí)行文件之前必須先編譯通過,所以生成可執(zhí)行文件的target依賴于編譯target。Ant會處理這種依賴關(guān)系。

然而,應(yīng)當(dāng)注意到,Ant的depends屬性只指定了target應(yīng)該被執(zhí)行的順序-如果被依賴的target無法運(yùn)行,這種depends對于指定了依賴關(guān)系的target就沒有影響。

Ant會依照depends屬性中target出現(xiàn)的順序(從左到右)依次執(zhí)行每個target。然而,要記住的是只要某個target依賴于一個target,后者就會被先執(zhí)行。
<targetname=”A”/>
<targetname=”B”depends=”A”/>
<targetname=”C”depends=”B”/>
<targetname=”D”depends=”C,B,A”/>
假定我們要執(zhí)行targetD。從它的依賴屬性來看,你可能認(rèn)為先執(zhí)行C,然后B,最后A被執(zhí)行。錯了,C依賴于B,B依賴于A,所以先執(zhí)行A,然后B,然后C,最后D被執(zhí)行。

一個target只能被執(zhí)行一次,即時有多個target依賴于它(看上面的例子)。

如果(或如果不)某些屬性被設(shè)定,才執(zhí)行某個target。這樣,允許根據(jù)系統(tǒng)的狀態(tài)(javaversion,OS,命令行屬性定義等等)來更好地控制build的過程。要想讓一個target這樣做,你就應(yīng)該在target元素中,加入if(或unless)屬性,帶上target因該有所判斷的屬性。例如:
<targetname=”build-module-A”if=”module-A-present”/>
<targetname=”build-own-fake-module-A”unless=”module-A-present”/>
如果沒有if或unless屬性,target總會被執(zhí)行。

可選的description屬性可用來提供關(guān)于target的一行描述,這些描述可由-projecthelp命令行選項(xiàng)輸出。

將你的tstamptask在一個所謂的初始化target是很好的做法,其他的target依賴這個初始化target。要確保初始化target是出現(xiàn)在其他target依賴表中的第一個target。在本手冊中大多數(shù)的初始化target的名字是”init”。

target有下面的屬性:
AttributeDescriptionRequired
nametarget的名字Yes
depends用逗號分隔的target的名字列表,也就是依賴表。No
if執(zhí)行target所需要設(shè)定的屬性名。No
unless執(zhí)行target需要清除設(shè)定的屬性名。No
description關(guān)于target功能的簡短描述。No

3.3Tasks

一個task是一段可執(zhí)行的代碼。

一個task可以有多個屬性(如果你愿意的話,可以將其稱之為變量)。屬性只可能包含對property的引用。這些引用會在task執(zhí)行前被解析。

下面是Task的一般構(gòu)造形式:
<nameattribute1=”value1″attribute2=”value2″…/>
這里name是task的名字,attributeN是屬性名,valueN是屬性值。

有一套內(nèi)置的(built-in)task,以及一些可選task,但你也可以編寫自己的task。

所有的task都有一個task名字屬性。Ant用屬性值來產(chǎn)生日志信息。

可以給task賦一個id屬性:
<tasknameid=”taskID”…/>
這里taskname是task的名字,而taskID是這個task的唯一標(biāo)識符。通過這個標(biāo)識符,你可以在腳本中引用相應(yīng)的task。例如,在腳本中你可以這樣:
<script…>
task1.setFoo(“bar”);
</script>
設(shè)定某個task實(shí)例的foo屬性。在另一個task中(用java編寫),你可以利用下面的語句存取相應(yīng)的實(shí)例。
project.getReference(“task1”).
注意1:如果task1還沒有運(yùn)行,就不會被生效(例如:不設(shè)定屬性),如果你在隨后配置它,你所作的一切都會被覆蓋。

注意2:未來的Ant版本可能不會兼容這里所提的屬性,因?yàn)楹苡锌赡芨緵]有task實(shí)例,只有proxies。

3.4Properties

一個project可以有很多的properties。可以在buildfile中用propertytask來設(shè)定,或在Ant之外設(shè)定。一個 property有一個名字和一個值。property可用于task的屬性值。這是通過將屬性名放在”${“和”}”之間并放在屬性值的位置來實(shí)現(xiàn)的。例如如果有一個propertybuilddir的值是”build”,這個property就可用于屬性值:${builddir} /classes。這個值就可被解析為build/classes。

內(nèi)置屬性

如果你使用了<property>task定義了所有的系統(tǒng)屬性,Ant允許你使用這些屬性。例如,${os.name}對應(yīng)操作系統(tǒng)的名字。

要想得到系統(tǒng)屬性的列表可參考theJavadocofSystem.getProperties。

除了Java的系統(tǒng)屬性,Ant還定義了一些自己的內(nèi)置屬性:
basedirproject基目錄的絕對路徑(與<project>的basedir屬性一樣)。
ant.filebuildfile的絕對路徑。
ant.versionAnt的版本。
ant.project.name當(dāng)前執(zhí)行的project的名字;由<project>的name屬性設(shè)定.
ant.java.versionAnt檢測到的JVM的版本;目前的值有”1.1″,“1.2”,“1.3”and“1.4”.

例子
<projectname=”MyProject”default=”dist”basedir=”.”>

<!–setglobalpropertiesforthisbuild–>
<propertyname=”src”value=”.”/>
<propertyname=”build”value=”build”/>
<propertyname=”dist”value=”dist”/>

<targetname=”init”>
<!–Createthetimestamp–>
<tstamp/>
<!–Createthebuilddirectorystructureusedbycompile–>
<mkdirdir=”${build}”/>
</target>

<targetname=”compile”depends=”init”>
<!–Compilethejavacodefrom${src}into${build}–>
<javacsrcdir=”${src}”destdir=”${build}”/>
</target>

<targetname=”dist”depends=”compile”>
<!–Createthedistributiondirectory–>
<mkdirdir=”${dist}/lib”/>
<!–Puteverythingin${build}intotheMyProject-${DSTAMP}.jarfile–>
<jarjarfile=”${dist}/lib/MyProject-${DSTAMP}.jar”basedir=”${build}”/>
</target>

<targetname=”clean”>
<!–Deletethe${build}and${dist}directorytrees–>
<deletedir=”${build}”/>
<deletedir=”${dist}”/>
</target>

</project>
3.5Path-likeStructures
你可以用”:”和”;”作為分隔符,指定類似PATH和CLASSPATH的引用。Ant會把分隔符轉(zhuǎn)換為當(dāng)前系統(tǒng)所用的分隔符。

當(dāng)需要指定類似路徑的值時,可以使用嵌套元素。一般的形式是
<classpath>
<pathelementpath=”${classpath}”/>
<pathelementlocation=”lib/helper.jar”/>
</classpath>
location屬性指定了相對于project基目錄的一個文件和目錄,而path屬性接受逗號或分號分隔的一個位置列表。path屬性一般用作預(yù)定義的路徑--其他情況下,應(yīng)該用多個location屬性。

為簡潔起見,classpath標(biāo)簽支持自己的path和location屬性。所以:
<classpath>
<pathelementpath=”${classpath}”/>
</classpath>
可以被簡寫作:
<classpathpath=”${classpath}”/>
也可通過<fileset>元素指定路徑。構(gòu)成一個fileset的多個文件加入path-likestructure的順序是未定的。
<classpath>
<pathelementpath=”${classpath}”/>
<filesetdir=”lib”>
<includename=”**/*.jar”/>
</fileset>
<pathelementlocation=”classes”/>
</classpath>
上面的例子構(gòu)造了一個路徑值包括:${classpath}的路徑,跟著lib目錄下的所有jar文件,接著是classes目錄。

如果你想在多個task中使用相同的path-likestructure,你可以用<path>元素定義他們(與target同級),然后通過id屬性引用--參考Referencs例子。

path-likestructure可能包括對另一個path-likestructurede的引用(通過嵌套<path>元素):
<pathid=”base.path”>
<pathelementpath=”${classpath}”/>
<filesetdir=”lib”>
<includename=”**/*.jar”/>
</fileset>
<pathelementlocation=”classes”/>
</path>
<pathid=”tests.path”>
<pathrefid=”base.path”/>
<pathelementlocation=”testclasses”/>
</path>
前面所提的關(guān)于<classpath>的簡潔寫法對于<path>也是有效的,如:
<pathid=”tests.path”>
<pathrefid=”base.path”/>
<pathelementlocation=”testclasses”/>
</path>
可寫成:
<pathid=”base.path”path=”${classpath}”/>
命令行變量

有些task可接受參數(shù),并將其傳遞給另一個進(jìn)程。為了能在變量中包含空格字符,可使用嵌套的arg元素。
AttributeDescriptionRequired
value一個命令行變量;可包含空格字符。只能用一個
line空格分隔的命令行變量列表。
file作為命令行變量的文件名;會被文件的絕對名替代。
path一個作為單個命令行變量的path-like的字符串;或作為分隔符,Ant會將其轉(zhuǎn)變?yōu)樘囟ㄆ脚_的分隔符。

例子
<argvalue=”-l-a”/>
是一個含有空格的單個的命令行變量。
<argline=”-l-a”/>
是兩個空格分隔的命令行變量。
<argpath=”/dir;/dir2:/dir3″/>
是一個命令行變量,其值在DOS系統(tǒng)上為/dir;/dir2;/dir3;在Unix系統(tǒng)上為/dir:/dir2:/dir3。

References

buildfile元素的id屬性可用來引用這些元素。如果你需要一遍遍的復(fù)制相同的XML代碼塊,這一屬性就很有用--如多次使用<classpath>結(jié)構(gòu)。

下面的例子:
<project…>
<target…>
<rmic…>
<classpath>
<pathelementlocation=”lib/”/>
<pathelementpath=”${java.class.path}/”/>
<pathelementpath=”${additional.path}”/>
</classpath>
</rmic>
</target>
<target…>
<javac…>
<classpath>
<pathelementlocation=”lib/”/>
<pathelementpath=”${java.class.path}/”/>
<pathelementpath=”${additional.path}”/>
</classpath>
</javac>
</target>
</project>
可以寫成如下形式:
<project…>
<pathid=”project.class.path”>
<pathelementlocation=”lib/”/>
<pathelementpath=”${java.class.path}/”/>
<pathelementpath=”${additional.path}”/>
</path>
<target…>
<rmic…>
<classpathrefid=”project.class.path”/>
</rmic>
</target>
<target…>
<javac…>
<classpathrefid=”project.class.path”/>
</javac>
</target>
</project>
所有使用PatternSets,FileSets或path-likestructures嵌套元素的task也接受這種類型的引用。



4.1File(Directory)類
4.1.1Mkdir
?創(chuàng)建一個目錄,如果他的父目錄不存在,也會被同時創(chuàng)建。
?例子:
<mkdirdir=”build/classes”/>
?說明:如果build不存在,也會被同時創(chuàng)建
4.1.2Copy
?拷貝一個(組)文件、目錄
?例子:
1.拷貝單個的文件:
<copyfile=”myfile.txt”tofile=”mycopy.txt”/>
2.拷貝單個的文件到指定目錄下
<copyfile=”myfile.txt”todir=”../some/other/dir”/>
3.拷貝一個目錄到另外一個目錄下
<copytodir=”../new/dir”>
<filesetdir=”src_dir”/>
</copy>
4.拷貝一批文件到指定目錄下
<copytodir=”../dest/dir”>
<filesetdir=”src_dir”>
<excludename=”**/*.java”/>
</fileset>
</copy>

<copytodir=”../dest/dir”>
<filesetdir=”src_dir”excludes=”**/*.java”/>
</copy>
5.拷貝一批文件到指定目錄下,將文件名后增加。Bak后綴
<copytodir=”../backup/dir”>
<filesetdir=”src_dir”/>
<mappertype=”glob”from=”*”to=”*.bak”/>
</copy>
6.拷貝一組文件到指定目錄下,替換其中的@標(biāo)簽@內(nèi)容
<copytodir=”../backup/dir”>
<filesetdir=”src_dir”/>
<filterset>
<filtertoken=”TITLE”value=”FooBar”/>
</filterset>
</copy>
4.1.3Delete
?刪除一個(組)文件或者目錄
?例子
1.刪除一個文件
<deletefile=”/lib/ant.jar”/>
2.刪除指定目錄及其子目錄
<deletedir=”lib”/>
3.刪除指定的一組文件
<delete>
<filesetdir=”.”includes=”**/*.bak”/>
</delete>
4.刪除指定目錄及其子目錄,包括他自己
<deleteincludeEmptyDirs=”true”>
<filesetdir=”build”/>
</delete>
4.1.4Move
?移動或重命名一個(組)文件、目錄
?例子:
1.移動或重命名一個文件
<movefile=”file.orig”tofile=”file.moved”/>
2.移動或重命名一個文件到另一個文件夾下面
<movefile=”file.orig”todir=”dir/to/move/to”/>
3.將一個目錄移到另外一個目錄下
<movetodir=”new/dir/to/move/to”>
<filesetdir=”src/dir”/>
</move>
4.將一組文件移動到另外的目錄下
<movetodir=”some/new/dir”>
<filesetdir=”my/src/dir”>
<includename=”**/*.jar”/>
<excludename=”**/ant.jar”/>
</fileset>
</move>
5.移動文件過程中增加。Bak后綴
<movetodir=”my/src/dir”>
<filesetdir=”my/src/dir”>
<excludename=”**/*.bak”/>
</fileset>
<mappertype=”glob”from=”*”to=”*.bak”/>
</move>

4.2Java相關(guān)
4.2.1Javac
?編譯java原代碼
?例子
1.<javacsrcdir=”${src}”
destdir=”${build}”
classpath=”xyz.jar”
debug=”on”
/>
編譯${src}目錄及其子目錄下的所有。Java文件,。Class文件將放在${build}指定的目錄下,classpath表示需要用到的類文件或者目錄,debug設(shè)置為on表示輸出debug信息
2.<javacsrcdir=”${src}:${src2}”
destdir=”${build}”
includes=”mypackage/p1/**,mypackage/p2/**”
excludes=”mypackage/p1/testpackage/**”
classpath=”xyz.jar”
debug=”on”
/>
編譯${src}和${src2}目錄及其子目錄下的所有。Java文件,但是package/p1/**,mypackage/p2/**將被編譯,而 mypackage/p1/testpackage/**將不會被編譯。Class文件將放在${build}指定的目錄下,classpath表示需要用到的類文件或者目錄,debug設(shè)置為on表示輸出debug信息
3.<propertyname=”classpath”value=”.;./xml-apis.jar;../lib/xbean.jar;./easypo.jar”/>

<javacsrcdir=”${src}”
destdir=”${src}”
classpath=”${classpath}”
debug=”on”
/>
路徑是在property中定義的
4.2.2java
?執(zhí)行指定的java類
?例子:
1.<javaclassname=”test.Main”>
<classpath>
<pathelementlocation=”dist/test.jar”/>
<pathelementpath=”${java.class.path}”/>
</classpath>
</java>
classname中指定要執(zhí)行的類,classpath設(shè)定要使用的環(huán)境變量
2.<pathid=”project.class.path”>
<pathelementlocation=”lib/”/>
<pathelementpath=”${java.class.path}/”/>
<pathelementpath=”${additional.path}”/>
</path>

<target…>
<rmic…>
<classpathrefid=”project.class.path”/>
</rmic>
</target>

4.3打包相關(guān)
4.3.1jar
?將一組文件打包
?例子:
1.<jardestfile=”${dist}/lib/app.jar”basedir=”${build}/classes”/>
將${build}/classes下面的所有文件打包到${dist}/lib/app.jar中
2.<jardestfile=”${dist}/lib/app.jar”
basedir=”${build}/classes”
includes=”mypackage/test/**”
excludes=”**/Test.class”
/>
將${build}/classes下面的所有文件打包到${dist}/lib/app.jar中,但是包括mypackage/test/所有文件不包括所有的Test.class
3.<jardestfile=”${dist}/lib/app.jar”
basedir=”${build}/classes”
includes=”mypackage/test/**”
excludes=”**/Test.class”
manifest=”my.mf”
/>
manifest屬性指定自己的META-INF/MANIFEST.MF文件,而不是由系統(tǒng)生成
4.3.2war
?對Jar的擴(kuò)展,用于打包Web應(yīng)用
?例子:
?假設(shè)我們的文件目錄如下:
thirdparty/libs/jdbc1.jar
thirdparty/libs/jdbc2.jar
build/main/com/myco/myapp/Servlet.class
src/metadata/myapp.xml
src/html/myapp/index.html
src/jsp/myapp/front.jsp
src/graphics/images/gifs/small/logo.gif
src/graphics/images/gifs/large/logo.gif
?下面是我們的任務(wù)的內(nèi)容:
<wardestfile=”myapp.war”webxml=”src/metadata/myapp.xml”>
<filesetdir=”src/html/myapp”/>
<filesetdir=”src/jsp/myapp”/>
<libdir=”thirdparty/libs”>
<excludename=”jdbc1.jar”/>
</lib>
<classesdir=”build/main”/>
<zipfilesetdir=”src/graphics/images/gifs”
prefix=”images”/>
</war>
?完成后的結(jié)果:
WEB-INF/web.xml
WEB-INF/lib/jdbc2.jar
WEB-INF/classes/com/myco/myapp/Servlet.class
META-INF/MANIFEST.MF
index.html
front.jsp
images/small/logo.gif
images/large/logo.gif
4.3.3ear
?用于打包企業(yè)應(yīng)用
?例子
<eardestfile=”${build.dir}/myapp.ear”appxml=”${src.dir}/metadata/application.xml”>
<filesetdir=”${build.dir}”includes=”*.jar,*.war”/>
</ear>

4.4時間戳
在生成環(huán)境中使用當(dāng)前時間和日期,以某種方式標(biāo)記某個生成任務(wù)的輸出,以便記錄它是何時生成的,這經(jīng)常是可取的。這可能涉及編輯一個文件,以便插入一個字符串來指定日期和時間,或?qū)⑦@個信息合并到JAR或zip文件的文件名中。
這種需要是通過簡單但是非常有用的tstamp任務(wù)來解決的。這個任務(wù)通常在某次生成過程開始時調(diào)用,比如在一個init目標(biāo)中。這個任務(wù)不需要屬性,許多情況下只需<tstamp/>就足夠了。
tstamp不產(chǎn)生任何輸出;相反,它根據(jù)當(dāng)前系統(tǒng)時間和日期設(shè)置Ant屬性。下面是tstamp設(shè)置的一些屬性、對每個屬性的說明,以及這些屬性可被設(shè)置到的值的例子:
屬性說明例子
DSTAMP設(shè)置為當(dāng)前日期,默認(rèn)格式為yyyymmdd20031217
TSTAMP設(shè)置為當(dāng)前時間,默認(rèn)格式為hhmm1603
TODAY設(shè)置為當(dāng)前日期,帶完整的月份2003年12月17日
例如,在前一小節(jié)中,我們按如下方式創(chuàng)建了一個JAR文件:

<jardestfile=”package.jar”basedir=”classes”/>

在調(diào)用tstamp任務(wù)之后,我們能夠根據(jù)日期命名該JAR文件,如下所示:

<jardestfile=”package-${DSTAMP}.jar”basedir=”classes”/>

因此,如果這個任務(wù)在2003年12月17日調(diào)用,該JAR文件將被命名為package-20031217.jar。
還可以配置tstamp任務(wù)來設(shè)置不同的屬性,應(yīng)用一個當(dāng)前時間之前或之后的時間偏移,或以不同的方式格式化該字符串。所有這些都是使用一個嵌套的format元素來完成的,如下所示:

<tstamp>
<formatproperty=”OFFSET_TIME”
pattern=”HH:mm:ss”
offset=”10″unit=”minute”/>
</tstamp>

上面的清單將OFFSET_TIME屬性設(shè)置為距離當(dāng)前時間10分鐘之后的小時數(shù)、分鐘數(shù)和秒數(shù)。
用于定義格式字符串的字符與java.text.SimpleDateFormat類所定義的那些格式字符相同

4.5執(zhí)行SQL語句
?通過jdbc執(zhí)行SQL語句
?例子:
1.<sql
driver=”org.gjt.mm.mysql.Driver”
url=”jdbc:mysql://localhost:3306/mydb”
userid=”root”
password=”root”
src=”data.sql”
/>
2.<sql
driver=”org.database.jdbcDriver”
url=”jdbc:database-url”
userid=”sa”
password=”pass”
src=”data.sql”
rdbms=”oracle”
version=”8.1.”
>
</sql>
只有在oracle、版本是8.1的時候才執(zhí)行



4.6發(fā)送郵件
?使用SMTP服務(wù)器發(fā)送郵件
?例子:
<mailmailhost=”smtp.myisp.com”mailport=”1025″subject=”Testbuild”>
<fromaddress=”me@myisp.com”/>
<toaddress=”all@xyz.com”/>
<message>The${buildname}nightlybuildhascompleted</message>
<filesetdir=”dist”>
<includesname=”**/*.zip”/>
</fileset>
</mail>
?mailhost:SMTP服務(wù)器地址
?mailport:服務(wù)器端口
?subject:主題
?from:發(fā)送人地址
?to:接受人地址
?message:發(fā)送的消息
?fileset:設(shè)置附件

====================================================================

在ANT 出現(xiàn)之前,編譯和部署Java應(yīng)用需要使用包括特定平臺的腳本、Make文件、不同的IDE以及手工操作等組成的大雜燴?,F(xiàn)在,幾乎所有的開源Java項(xiàng)目都在使用Ant,許多公司的開發(fā)項(xiàng)目也在使用Ant。Ant的大量使用,也自然帶來了對總結(jié)Ant最佳實(shí)踐的迫切需求。

本文總結(jié)了我喜好的Ant最佳實(shí)踐,很多是從親身經(jīng)歷的項(xiàng)目錯誤,或從其他開發(fā)者的“恐怖”故事中得到的靈感的。比如,有人告訴我有個項(xiàng)目將XDoclet生成的代碼放入鎖定文件的版本控制工具中。單開發(fā)者修改源代碼時,他必須記住手工檢出(Checkout)并鎖定所有將要重生成的文件。然后,手工運(yùn)行代碼生成器,當(dāng)他能夠讓Ant編譯代碼時,這一方法還存在一些問題:

生成的代碼無法存儲在版本控制系統(tǒng)中

Ant(本案例中是Xdoclet)應(yīng)該自動確定下一次構(gòu)建涉及的源文件,而不應(yīng)由程序員人工確定。

Ant的構(gòu)建文件應(yīng)該定義好正確的任務(wù)依賴關(guān)系,這樣程序員不必按照特定順序調(diào)用任務(wù)。

當(dāng)我開始一個新項(xiàng)目時,我首先編寫Ant構(gòu)建文件。文件定義構(gòu)建的過程,并為團(tuán)隊(duì)中的每個程序員都使用。本文所有的最佳實(shí)踐假設(shè)Ant構(gòu)建文件是一個必須精心編寫的重要文件,它應(yīng)在版本控制系統(tǒng)中得到維護(hù),并定期進(jìn)行重構(gòu)。下面是我的十五大Ant最佳實(shí)踐。

1.采用一致的編碼規(guī)范

Ant用戶不管是喜歡還是痛恨XML構(gòu)建文件的語法,都愿意跳進(jìn)這一迷人的爭論中。讓我們先看一些保持XML構(gòu)建文件簡潔的方法。

首先,也是最重要的,化費(fèi)時間格式化你的XML讓它看上去很清晰。不過XML是否美觀,Ant都可以工作。但是丑陋的XML很難讀懂。倘若你在任務(wù)之間留出空行,有規(guī)則的縮進(jìn),每行文字不超過90列,那么XML令人驚訝的易讀。再加上好的編輯器或IDE高亮相應(yīng)的語句,你就不會有如何閱讀的麻煩。同樣,精選有意義明確、容易讀懂的詞匯來命名任務(wù)和屬性。比如,dir.reports就比rpts好。并不需要特定的編碼規(guī)范,只要有一種規(guī)范并堅(jiān)持使用就好。

2.將build.xml放在項(xiàng)目根目錄中

Ant構(gòu)建文件build.xml可以放在如何位置,但是放在項(xiàng)目頂層目錄中可以保持項(xiàng)目簡潔。這是最普遍的規(guī)范,使開發(fā)者能夠在根目錄找到它。同時,也能夠容易了解項(xiàng)目中不同目錄之間的邏輯關(guān)系。以下是一個典型的項(xiàng)目層次:

[rootdir]|build.xml+–src+–lib(包含第三方JAR包)+–build(由build任務(wù)生成)+–dist(由build任務(wù)生成)

當(dāng)build.xml在頂級目錄時,倘若你在項(xiàng)目某個子目錄中,只要輸入:ant-findcompile命令,不需要改變工作目錄就能夠以命令行方式編譯代碼。參數(shù)-find告訴Ant尋找存在于上級目錄中的build.xml并執(zhí)行。

3.使用單一構(gòu)建文件

有人喜歡將一個大項(xiàng)目分解到幾個小的構(gòu)建文件,每個構(gòu)建文件分擔(dān)整個構(gòu)建過程的一小部分工作。但是應(yīng)該認(rèn)識到,將構(gòu)建文件分割會增加對整個構(gòu)建過程的理解難度。要注意在單一構(gòu)建文件能夠清楚表現(xiàn)構(gòu)建層次的情況下,不要過工程化(over-engineer)。

即使你把項(xiàng)目劃分為多個構(gòu)建文件,也應(yīng)使程序員能夠在項(xiàng)目根目錄下找到核心build.xml。盡管該文件只是將實(shí)際構(gòu)建工作委派給下級構(gòu)建文件,也應(yīng)保證該文件可用。

4.提供良好的幫助說明

應(yīng)盡量使構(gòu)建文件自文檔化。增加任務(wù)描述是最簡單的方法。當(dāng)你輸入ant-projecthelp時,你就可以看到帶有描述的任務(wù)清單。比如,你可以這樣定義任務(wù):

<targetname=”compile”description=”Compilescode,outputgoestothebuilddir.”>

最簡單的規(guī)則是對所有你希望程序員通過命令行直接調(diào)用的任務(wù)都加上描述。對于一般用來執(zhí)行中間處理過程的內(nèi)部任務(wù),比如生成代碼或建立輸出目錄等,就無法使用描述屬性。

這時,可以通過在構(gòu)建文件中加入XML注釋來處理?;蛘邔iT定義一個help任務(wù),當(dāng)程序員輸入anthelp時來顯示詳細(xì)的使用說明。

<targetname=”help”description=”Displaydetailedusageinformation”><echo>Detailedhelp…</echo></target>

5.提供清空任務(wù)

每個構(gòu)建文件都應(yīng)包含一個清空任務(wù),刪除所有生成的文件和目錄,使系統(tǒng)回到構(gòu)建文件執(zhí)行前的初始狀態(tài)。執(zhí)行清空任務(wù)后還存在的文件應(yīng)處在版本控制系統(tǒng)的管理下。

比如:

<targetname=”clean”description=”Destroysallgeneratedfilesanddirs.”><deletedir=”${dir.build}”/><deletedir=”${dir.dist}”/></target>

除非是在產(chǎn)生整個系統(tǒng)版本的特殊任務(wù)中,否則不要自動調(diào)用clean任務(wù)。當(dāng)程序員僅僅執(zhí)行編譯任務(wù)或其他任務(wù)時,他們不需要構(gòu)建文件事先執(zhí)行即令人討厭有沒有必要的清空任務(wù)。要相信程序員能夠確定何時需要清空所有文件。

6.使用ANT管理任務(wù)從屬關(guān)系

假設(shè)你的應(yīng)用由SwingGUI組件、Web界面、EJB層和公共應(yīng)用代碼組成。在大型系統(tǒng)中,你需要清晰地定義Java包屬于系統(tǒng)的哪一層。否則如何一點(diǎn)修改都要重新編譯成千上百個文件。任務(wù)從屬關(guān)系管理差會導(dǎo)致過度復(fù)雜而脆弱的系統(tǒng)。改變GUI面板的設(shè)計(jì)不應(yīng)造成Servlet和EJB的重編譯。

當(dāng)系統(tǒng)變得龐大后,稍不注意就可能將依賴于客戶端的代碼引入到服務(wù)端。這是因?yàn)镮DE在編譯文件時使用單一的classpath。Ant讓你更有效地控制構(gòu)建活動。

設(shè)計(jì)你的構(gòu)建文件編譯大型項(xiàng)目的步驟:首先,編譯公共應(yīng)用代碼,將編譯結(jié)果打成JAR包文件。然后,編譯上一層的項(xiàng)目代碼,編譯時依靠第一步產(chǎn)生的JAR文件。不斷重復(fù)這一過程,直到最高層的代碼編譯完成。

分步構(gòu)建強(qiáng)化了任務(wù)從屬關(guān)系管理。如果你工作在底層Java框架上,引用高層的GUI模板組件,這時代碼不需要編譯。這是由于構(gòu)建文件在編譯底層框架時,在源路徑中沒有包含高層GUI面板組件的代碼。

7.定義并重用文件路徑

如果文件路徑在一個地方集中定義,并在整個構(gòu)建文件中得到重用,那么構(gòu)建文件更易于理解。以下是這樣做的一個例子:

<projectname=”sample”default=”compile”basedir=”.”><pathid=”classpath.common”><pathelementlocation=”${jdom.jar.withpath}”/>…etc</path><pathid=”classpath.client”><pathelementlocation=”${guistuff.jar.withpath}”/><pathelementlocation=”${another.jar.withpath}”/><!–reusethecommonclasspath–><pathrefid=”classpath.common”/></path><targetname=”compile.common”depends=”prepare”><javacdestdir=”${dir.build}”srcdir=”${dir.src}”><classpathrefid=”classpath.common”/><includename=”com/oreilly/common/**”/></javac></target></project>

當(dāng)項(xiàng)目不斷增長,構(gòu)建日益復(fù)雜時,這一技術(shù)越發(fā)體現(xiàn)出其價值。你可能為編譯不同層次的應(yīng)用定義各自的文件路徑,比如運(yùn)行單元測試的、運(yùn)行應(yīng)用程序的、運(yùn)行 Xdoclet的、生成JavaDocs的等等不同路徑。這種組件化路徑定義的方法比為每個任務(wù)單獨(dú)定義路徑要優(yōu)越得多。否則,很容易丟失任務(wù)任務(wù)從屬關(guān)系的軌跡。

8.定義恰當(dāng)?shù)娜蝿?wù)參數(shù)關(guān)系

假設(shè)dist任務(wù)從屬于jar任務(wù),那么哪個任務(wù)從屬于compile任務(wù),哪個任務(wù)從屬于prepare任務(wù)呢?Ant構(gòu)建文件最終定義了任務(wù)的從屬關(guān)系圖,它必須被仔細(xì)地定義和維護(hù)。應(yīng)該定期檢查任務(wù)的從屬關(guān)系以保證構(gòu)建工作得到正確執(zhí)行。大的構(gòu)建文件隨著時間推移趨向于增加更多的任務(wù),所以到最后由于不必要的從屬關(guān)系導(dǎo)致構(gòu)建工作非常困難。比如,你可能發(fā)現(xiàn)在程序員只是需要編譯一些沒有使用EJB的GUI代碼時,重新生成EJB代碼。

以“優(yōu)化”的名義忽略任務(wù)的從屬關(guān)系是另一種常見的錯誤。這種錯誤迫使程序員為了得到恰當(dāng)?shù)慕Y(jié)果必須記住并按照特定的順序調(diào)用一串任務(wù)。更好的做法是:提供描述清晰的公共任務(wù),這些任務(wù)包含正確的任務(wù)從屬關(guān)系;另外提供一套“專家”任務(wù)讓你能夠手工執(zhí)行個別的構(gòu)建步驟,這些任務(wù)不提供完整的構(gòu)建過程,但是讓那些專家在快速而惱人的編碼期間跳過某些步驟

9.使用配置屬性

任何需要配置或可能發(fā)生變化的信息都應(yīng)作為Ant屬性定義下來。對于在構(gòu)建文件中多次出現(xiàn)的值也同樣處理。屬性既可以在構(gòu)建文件頭部定義,也可以為了更好的靈活性而在單獨(dú)的屬性文件中定義。以下是在構(gòu)建文件中定義屬性的樣式:

<projectname=”sample”default=”compile”basedir=”.”><propertyname=”dir.build”value=”build”/><propertyname=”dir.src”value=”src”/><propertyname=”jdom.home”value=”../java-tools/jdom-b8″/><propertyname=”jdom.jar”value=”jdom.jar”/><propertyname=”jdom.jar.withpath”value=”${jdom.home}/build/${jdom.jar}”/>etc…</project>

或者你可以使用屬性文件:

<projectname=”sample”default=”compile”basedir=”.”><propertyfile=”sample.properties”/>etc…</project>

在屬性文件sample.properties中:

dir.build=builddir.src=srcjdom.home=../java-tools/jdom-b8jdom.jar=jdom.jarjdom.jar.withpath=${jdom.home}/build/${jdom.jar}

用一個獨(dú)立的文件定義屬性是有好處的,它可以清晰地定義構(gòu)建中的可配置部分。另外,在開發(fā)者工作在不同操作系統(tǒng)的情況下,你可以在不同的平臺上提供該文件的不同版本。

10.保持構(gòu)建過程獨(dú)立

為了最大限度的擴(kuò)展性,不要應(yīng)用外部路徑和庫文件。最重要的是不要依賴于程序員的CLASSPATH設(shè)置。取而代之的是,在構(gòu)建文件中使用相對路徑并定義自己的路徑。如果你引用了絕對路徑如C:/java/tools,其他開發(fā)者未必使用與你相同的目錄結(jié)構(gòu),所以就無法使用你的構(gòu)建文件

如果你部署開發(fā)源碼項(xiàng)目,應(yīng)該提供包括所有需要的JAR文件的發(fā)行版本,當(dāng)然是在遵守許可協(xié)議的基礎(chǔ)上。對于內(nèi)部項(xiàng)目,相關(guān)的JAR文件都應(yīng)在版本控制系統(tǒng)的管理中,并撿出到大家都知道的位置。

當(dāng)你不得不應(yīng)用外部路徑時,應(yīng)將路徑定義為屬性。使程序員能夠涌適合他們自己的機(jī)器的參數(shù)重載這些屬性。你也可以使用以下語法引用環(huán)境變量:

<propertyenvironment=”env”/><propertyname=”dir.jboss”value=”${env.JBOSS_HOME}”/>

11.使用版本控制系統(tǒng)

構(gòu)建文件是一個重要的文件,應(yīng)該象代碼一樣進(jìn)行版本控制。當(dāng)你標(biāo)記你的代碼時,也應(yīng)用同樣的標(biāo)簽標(biāo)記構(gòu)建文件。這樣當(dāng)你需要回溯構(gòu)建舊版本的軟件時,能夠使用相對應(yīng)的舊版本構(gòu)建文件。

除構(gòu)建文件之外,你還應(yīng)在版本控制中維護(hù)第三方JAR文件。同樣,這使你能夠重新構(gòu)建舊版本的軟件。這也能夠更容易保證所有開發(fā)者擁有一致的JAR文件,因?yàn)樗麄兌际峭瑯?gòu)建文件一起從版本控制系統(tǒng)中撿出的。

通常應(yīng)避免在版本控制系統(tǒng)中存放構(gòu)建輸出品。倘若你的源代碼很好地得到了版本控制,那么通過構(gòu)建過程你能夠重新生成任何版本的產(chǎn)品。

12.把Ant作為“最小公分母”

假設(shè)你的開發(fā)團(tuán)隊(duì)使用IDE,為什么要為程序員通過點(diǎn)擊圖標(biāo)就能夠構(gòu)建整個應(yīng)用而煩惱呢?

IDE 的問題在團(tuán)隊(duì)中是一個關(guān)于一致性和重現(xiàn)性的問題。幾乎所有的IDE設(shè)計(jì)初衷都是為了提高程序員的個人生產(chǎn)率,而不是開發(fā)團(tuán)隊(duì)的持續(xù)構(gòu)建。典型的IDE要求每個程序員定義自己的項(xiàng)目文件。程序員可能擁有不同的目錄結(jié)構(gòu),可能使用不同版本的庫文件,還可能工作在不同的平臺上。這將導(dǎo)致出現(xiàn)這種情況:在A那里運(yùn)行良好的代碼,到B那里就無法運(yùn)行。

不管你的開發(fā)團(tuán)隊(duì)使用何種IDE,一定要建立所有程序員都能夠使用的Ant構(gòu)建文件。要建立一個程序員在將新代碼提交版本控制系統(tǒng)前必須執(zhí)行Ant構(gòu)建文件的規(guī)則。這將確保代碼是經(jīng)過同一個Ant構(gòu)建文件構(gòu)建的。當(dāng)出現(xiàn)問題時,要使用項(xiàng)目標(biāo)準(zhǔn)的 Ant構(gòu)建文件,而不是通過某個IDE來執(zhí)行一個干凈的構(gòu)建。

程序員可以自由選擇任何他們習(xí)慣使用的IDE。但是Ant應(yīng)作為公共基線以保證永遠(yuǎn)是可構(gòu)建的。

13.使用zipfileset屬性

人們經(jīng)常使用Ant產(chǎn)生WAR、JAR、ZIP和EAR文件。這些文件通常都要求有一個特定的內(nèi)部目錄結(jié)構(gòu),但其往往與你的源代碼和編譯環(huán)境的目錄結(jié)構(gòu)不匹配。

一個最常用的方法是寫一個Ant任務(wù)按照期望的目錄結(jié)構(gòu)把一大堆文件拷貝到臨時目錄中,然后生成壓縮文件。這不是最有效的方法。使用zipfileset屬性是更好的解決方案。它讓你從任何位置選擇文件,然后把它們按照不同目錄結(jié)構(gòu)放進(jìn)壓縮文件中。以下是一個例子:

<earearfile=”${dir.dist.server}/payroll.ear”appxml=”${dir.resources}/application.xml”><filesetdir=”${dir.build}”includes=”commonServer.jar”/><filesetdir=”${dir.build}”><includename=”payroll-ejb.jar”/></fileset><zipfilesetdir=”${dir.build}”prefix=”lib”><includename=”hr.jar”/><includename=”billing.jar”/></zipfileset><filesetdir=”.”><includename=”lib/jdom.jar”/><includename=”lib/log4j.jar”/><includename=”lib/ojdbc14.jar”/></fileset><zipfilesetdir=”${dir.generated.src}”prefix=”META-INF”><includename=”jboss-app.xml”/></zipfileset></ear>

在這個例子中,所有JAR文件都放在EAR文件包的lib目錄中。hr.jar和billing.jar是從構(gòu)建目錄拷貝過來的。因此我們使用zipfileset屬性把它們移動到EAR文件包內(nèi)部的lib目錄。prefix屬性指定了其在EAR文件中的目標(biāo)路徑。

14.運(yùn)行Clean構(gòu)建任務(wù)的測試

假設(shè)你的構(gòu)建文件中有clean和compile的任務(wù),執(zhí)行以下的測試。第一步,執(zhí)行antclean;第二步,執(zhí)行antcompile;第三步,再執(zhí)行antcompile。第三步應(yīng)該不作任何事情。如果文件再次被編譯,說明你的構(gòu)建文件有問題。

構(gòu)建文件應(yīng)該只在與輸出文件相關(guān)聯(lián)的輸入文件發(fā)生變化時,才應(yīng)該執(zhí)行任務(wù)。一個構(gòu)建文件在不必執(zhí)行諸如編譯、拷貝或其他工作任務(wù)的時候執(zhí)行這些等任務(wù)是低效的。當(dāng)項(xiàng)目規(guī)模增長時,即使是小的低效工作也會成為大的問題。

15.避免特定平臺的Ant包

不管什么原因,有人喜歡用簡單的、名稱叫做compile之類的批文件或腳本裝載他們的產(chǎn)品。當(dāng)你去看腳本的內(nèi)容,你會發(fā)現(xiàn)以下內(nèi)容:

antcompile

其實(shí)開發(fā)人員熟悉Ant,并且完全能夠自己鍵入antcompile。請不要僅僅為了調(diào)用Ant而使用特定平臺的腳本。這只會使其他人在首次使用你的腳本時,增加學(xué)習(xí)和理解的煩擾。除此之外,你不可能提供適用于每個操作系統(tǒng)的腳本,這是真正煩擾其他用戶的地方。

總結(jié)

太多的公司依靠手工方法和程序來編譯代碼和生成軟件發(fā)布版本。那些不使用Ant或類似工具定義構(gòu)建過程的開發(fā)團(tuán)隊(duì),花費(fèi)了令人驚異的時間來捕捉代碼編譯過程中出現(xiàn)的問題,這些在某些開發(fā)者那里編譯成功的代碼,到另一些開發(fā)者那里卻失敗了。

生成并維護(hù)構(gòu)建腳本不是一項(xiàng)迷人的工作,但卻是一項(xiàng)必需的工作。一個好的Ant構(gòu)建文件將使你集中到更喜歡的工作——寫代碼中!

無所不能的“螞蟻”–Ant

說他無所不能,好像有點(diǎn)夸張,但是用過Ant之后,感覺真的是只有想不到?jīng)]有作不到.Ant,原作者選擇他作為軟件名字的意思是指”令一個簡潔的工具”(Another Neat Tool),而這個真正的名字現(xiàn)在去很少為人所知,但這絲毫不影響他成為最優(yōu)秀的構(gòu)建工具.

現(xiàn)在開始我將進(jìn)入一個”螞蟻”的世界,通過例子,真真正正去了解他!

文章參考資料可以到http://www.manning.com/antbook去下載

Ant的最好學(xué)習(xí)資料<<使用Ant進(jìn)行Java開發(fā)>>

Ant的官方網(wǎng)站:http://ant.apache.org/

Ant的最新版本:Ant 1.6.5

本文所有的例子運(yùn)行的環(huán)境:JDK1.4.2,Ant1.6.2,eclipse3.0

一.使用Ant運(yùn)行Java程序

我們先從簡單的Hello學(xué)起,目錄結(jié)構(gòu)如下

project–

|src–

| |–org.ant.chapter1.Hello

|bin

|build.xml

以后的例子大多采用此目錄結(jié)構(gòu),特例會額外聲明

build.xml文件

<?xml version="1.0"?>
<project name="project" default="run">
<target name="compile">
<javac destdir="bin" srcdir="src"></javac>
</target>

<target name="run" depends="compile">
<java classname="org.ant.chapter1.Hello">
</java>
</target>
</project>

從結(jié)構(gòu)來看構(gòu)建文件很簡單,里面的內(nèi)容大家也一定能夠看得懂,可以看出Ant的核心任務(wù)就是target,一個Ant文件有多個target組成,而這些target之間,又有相互的依賴關(guān)系–depends,運(yùn)行的時候默認(rèn)運(yùn)行project中指定的target.

javac–編譯java文件 java–運(yùn)行java文件

使用eclipse中集成的Ant運(yùn)行build.xml文件(當(dāng)然,也可以將ANT_HOME加到Path中,在命令行中運(yùn)行)

Buildfile: D:/MyEclipse/workspace/sad/build.xml
compile:
run:
 [java] Working directory ignored when same JVM is used.
 [java] Could not find org.ant.chapter1.Hello. Make sure you have it in your classpath
 [java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:166)
 [java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:705)
 [java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:177)
 [java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:83)
 [java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
 [java] at org.apache.tools.ant.Task.perform(Task.java:364)
 [java] at org.apache.tools.ant.Target.execute(Target.java:341)
 [java] at org.apache.tools.ant.Target.performTasks(Target.java:369)
 [java] at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
 [java] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:379)
 [java] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:135)
BUILD SUCCESSFUL
Total time: 703 milliseconds

,java入門的經(jīng)典錯誤,ClassNotDefException,可見是classpath設(shè)置問題,而觀察得到compile成功運(yùn)行,所以我們在run-target里面加入classpath的配置

<?xml version="1.0"?>
<project name="project" default="run">
<target name="compile">
<javac destdir="bin" srcdir="src"></javac>
</target>

<target name="run" depends="compile">
<java classname="org.ant.chapter1.Hello">
<classpath path="bin"></classpath>
</java>
</target>
</project>
 

運(yùn)行

Buildfile: D:/MyEclipse/workspace/sad/build.xml
compile:
run:
 [java] Hello World!
BUILD SUCCESSFUL
Total time: 672 milliseconds

成功!!第一個Ant應(yīng)用完成,有人會說:用IDE運(yùn)行豈不是更簡單,但是你要知道運(yùn)行java程序只是Ant的一個小小的功能,后面我們會看到Ant的更強(qiáng)大的功能!

下一篇文章將介紹java程序運(yùn)行的擴(kuò)展及用Ant運(yùn)行tomcat!

java程序運(yùn)行的擴(kuò)展

1.帶有參數(shù)的應(yīng)用程序運(yùn)行

Ant在<java>任務(wù)中提供了<arg>元素,<arg>有四種屬性value,file,line,path

public class Hello {
      
      
 public static void main(String[] args) {
 System.out.println("Hello " + args[0]); 
 File file = new File(args[1]);
 String[] filename = file.list();
 
 for(int i = 0; i < filename.length; i++) {
 System.out.println(filename[i]);
 }
 }
}

build.xml

<?xml version="1.0"?>
<project name="project" default="run">
<property name="run.classpath" value="bin"></property>

<target name="compile">
<javac destdir="bin" srcdir="src"></javac>
</target>

<target name="run" depends="compile">
<java classname="org.ant.chapter1.Hello">
<classpath path="${run.classpath}"></classpath>
<arg value="Ant"/>
<arg file="D:/rag"/>
</java>
</target>
</project>
Buildfile: D:/MyEclipse/workspace/sad/build.xml
compile:
run:
 [java] Hello Ant
 [java] hello.dat
BUILD SUCCESSFUL
Total time: 734 milliseconds

2.控制新的JVM

一般的<java>任務(wù)都運(yùn)行在當(dāng)前的JVM中,單一些特定的情況下將Ant運(yùn)行在新的JVM下面,這時只需要將<java>中的一個屬性fork設(shè)置為true就可以了.

我們知道,java命令提供了許多的運(yùn)行參數(shù),用于指定JVM的屬性,同樣在Ant也提供相應(yīng)的屬性,看例子:

<?xml version="1.0"?>
<project name="project" default="run">
<property name="run.classpath" value="bin"></property>
<property name="Search.JVM.extra.args" value="-Xincgc"></property>

<target name="compile">
<javac destdir="bin" srcdir="src"></javac>
</target>

<target name="run" depends="compile">
<java classname="org.ant.chapter1.Hello" fork="true" 
maxmemory="64m">
<classpath path="${run.classpath}"></classpath> 
<jvmarg line="${Search.JVM.extra.args}"/>
<arg value="Ant"/>
<arg file="D:/rag"/>
</java>
</target>
</project>

3.運(yùn)行jar文件,使用failonerror處理錯誤

<java>同樣提供了運(yùn)行jar文件的屬性

MANIFEST.MF

Mainfest-Version: 1.0
Created-By: myth
Sealed: false
Main-Class: org.ant.chapter1.Hello

build.xml

<?xml version="1.0"?>
<project name="project" default="run">
<property name="run.classpath" value="bin"></property>
<property name="Search.JVM.extra.args" value="-Xincgc"></property>

<target name="compile">
<javac destdir="bin" srcdir="src"></javac>
</target>

<target name="jar" depends="compile">
<jar destfile="test.jar" update="true" 
manifest="MANIFEST.MF">
<fileset dir="bin">
<include name="**/*.class"/>
</fileset>
</jar>
</target>

<target name="run" depends="jar">
<java fork="true" maxmemory="64m" jar="test.jar">
<classpath path="${run.classpath}"></classpath> 
<jvmarg line="${Search.JVM.extra.args}"/>
<arg value="Ant"/>
<arg file="D:/rag"/>
</java>
</target>
</project>

Buildfile: D:/MyEclipse/workspace/sad/build.xml
compile:
jar:
 [jar] Updating jar: D:/MyEclipse/workspace/sad/test.jar
run:
 [java] Hello Ant
 [java] hello.dat
BUILD SUCCESSFUL
Total time: 875 milliseconds

在某些情況下,我們不希望由于一些不重要的任務(wù)構(gòu)建失敗,而導(dǎo)致整個構(gòu)建的失敗,所以Ant提供了一個共同的屬性-failonerror,多數(shù)任務(wù)的默認(rèn)值為failοnerrοr=”true”,既當(dāng)此任務(wù)構(gòu)建失敗時,失敗信息會傳遞給控制臺,并導(dǎo)致build failed,failonerror只支持在新的JVM里運(yùn)行.

<target name="run" depends="jar">
<java fork="true" maxmemory="64m" jar="test.jar"
failοnerrοr="false" >
<classpath path="${run.classpath}"></classpath> 
<jvmarg line="${Search.JVM.extra.args}"/>
<arg value="Ant"/>
<arg file="D:/rag"/>
</java>
</target>

Buildfile: D:/MyEclipse/workspace/sad/build.xml
compile:
jar:
run:
 [java] java.lang.NullPointerException
 [java] at org.ant.chapter1.Hello.main(Hello.java:27)
 [java] Hello Ant
 [java] Exception in thread "main"
 [java] Java Result: 1
BUILD SUCCESSFUL
Total time: 984 milliseconds

可以看出雖然run構(gòu)建失敗,但是Ant還是執(zhí)行了,原來的jar文件,并且BUILD SUCCESSFUL!!

使用Ant運(yùn)行tomcat

Ant使用<exec>任務(wù)運(yùn)行本地程序,先看一個例子:

<?xml version="1.0"?>
<project name="project" default="run">
<target name="run">
<exec executable="cmd">
<arg value="/C a.bat"/>
</exec>
</target>
</project>

a.bat

@echo off
echo Hello >> a.txt

運(yùn)行完后,會在根目錄生成a.txt文件,里面內(nèi)容為Hello

下面我們來運(yùn)行tomcat

<?xml version="1.0"?>
<project name="project" default="tomcat-start">
<property name="tomcat.dir" value="c:/Tomcat5"></property>

<target name="tomcat-start">
<exec dir="${tomcat.dir}/bin" executable="cmd">
<env key="CATALINA_HOME" path="${tomcat.dir}"/>
<arg value="/C startup.bat"/>
</exec>
</target>
<target name="tomcat-stop">
<exec dir="${tomcat.dir}/bin" executable="cmd">
<env key="CATALINA_HOME" path="${tomcat.dir}"/>
<arg value="/c shutdown.bat"/>
</exec>
</target>
</project>

成功!!

四.使用Ant進(jìn)行Junit測試

我們除了使用java來直接運(yùn)行junit之外,我們還可以使用junit提供的junit task與ant結(jié)合來運(yùn)行。涉及的幾個主要的ant task如下:

l <junit>,定義一個junit task

l <batchtest>,位于<junit>中,運(yùn)行多個TestCase

l <test>,位于<junit>中,運(yùn)行單個TestCase

l <formatter>,位于<junit>中,定義一個測試結(jié)果輸出格式

l <junitreport>,定義一個junitreport task

l <report>,位于<junitreport>中,輸出一個junit report

運(yùn)行Junit需要jakarta-ant-1.4-optional.jar和Junit.jar包,因?yàn)檫@兩個包用于支持ant task–<junit>的,所以不能在build.xml文件中加載,需要將他們放到ANT_HOME中去.使用eclipse可以按照一下步驟加入:

Windows-Preference-Ant-Runtime-Ant Home Entries

下面看一個Junit測試的例子:

<?xml version="1.0"?>

<project name="project" default="junit">

<property name="run.classpath" value="bin"></property>

<property name="run.srcpath" value="src"></property>

<property name="test.srcpath" value="test"></property>

<property name="lib.dir" value="lib"/>

<path id="compile.path">

<pathelement location="${lib.dir}/junit-3.8.1.jar"/>

<pathelement location="${lib.dir}/log4j-1.2.8.jar"/>

</path>

<target name="compile">

<javac destdir="${run.classpath}" srcdir="${run.srcpath}"

classpathref="compile.path"/>

<javac destdir="${run.classpath}" srcdir="${test.srcpath}"

classpathref="compile.path"/>

</target>

<target name="junit" depends="compile">

<junit printsummary="true">

<classpath path="${run.classpath}"></classpath>

<test name="org.ant.test.Test1"></test>

</junit>

</target>

</project>

可以看出Junit的使用基本和java差不多, printsummary允許輸出junit信息,當(dāng)然Ant提供formatter屬性支持多樣化的junit信息輸出.Ant包含三種形式的formatter:

brief:以文本格式提供測試失敗的詳細(xì)內(nèi)容;

plain:以文本格式提供測試失敗的詳細(xì)內(nèi)容以及每個測試的運(yùn)行統(tǒng)計(jì);

xml:以xml格式提供擴(kuò)展的詳細(xì)內(nèi)容,包括正在測試時的Ant特性,系統(tǒng)輸出,以及每個測試用 例的系統(tǒng)錯誤.

使用formatter時建議將printsummary關(guān)閉,因?yàn)樗赡軐ormatter的生成結(jié)果產(chǎn)生影響,并多生成一份同樣的輸出.當(dāng)然我們可以使用formatter將輸出結(jié)果顯示在console中:

<formatter type=”brief” usefile=”false”/>

Junit支持多個formatter同時存在:

<formatter type=”brief” usefile=”false”/>

<formatter type=”xml”/>

使用xml我們可以得到擴(kuò)展性更強(qiáng)的信息輸出,這時在<test>中要設(shè)定todir來指定xml的輸出路徑.

在通常情況下我們不可能一個一個來處理junit,所以Ant提供了<batchtest>,可以在他里面嵌套文件集(fileset)以包含全部的測試用例.

對于大量的用例,使用控制臺輸出,或者使用文件或xml文件來作為測試結(jié)果都是不合適的,Ant提供了<junitreport>任務(wù)使用XSLT將xml文件轉(zhuǎn)換為HTML報告.該任務(wù)首先將生成的XML文件整合成單一的XML文件,然后再對他進(jìn)行轉(zhuǎn)換,這個整合的文件默認(rèn)情況下被命名為:TESTS-TestSuites.xml.

<junitreport todir="${test.xml}">

<fileset dir="${test.xml}">

<include name="TEST-*.xml"/>

</fileset>

<report format="frames" todir="${test.report}"/>

</junitreport>

<report>元素指示轉(zhuǎn)換過程中生成有框架(frames)或者無框架的類似與javadoc格式的文件,并保存到todir所在的目錄下面.(由于xalan對于JDK1.4以上的版本存在問題,所以要生成HTML文件需要以下步驟:現(xiàn)在最新的xalan,在%JAVA_HOME%/jre/lib中建立文件夾endorsed.將xalan中的jar文件copy到里面).

下面看一個完整的例子:

<?xml version="1.0"?>

<projectname="project"default="junit">

<propertyname="run.classpath"value="bin"></property>

<propertyname="run.srcpath"value="src"></property>

<propertyname="test.srcpath"value="test"></property>

<propertyname="test.xml"value="xml"></property>

<propertyname="test.report"value="report"></property>

<propertyname="lib.dir"value="lib"/>

<pathid="compile.path">

<pathelementlocation="${lib.dir}/junit-3.8.1.jar"/>

<pathelementlocation="${lib.dir}/log4j-1.2.8.jar"/>

</path>

<targetname="init">

<deletedir="${test.report}"/>

<mkdirdir="${test.report}"/>

<deletedir="${test.xml}"/>

<mkdirdir="${test.xml}"/>

</target>

<targetname="compile"depends="init">

<javacdestdir="${run.classpath}"srcdir="${run.srcpath}"

classpathref="compile.path"/>

<javacdestdir="${run.classpath}"srcdir="${test.srcpath}"

classpathref="compile.path"/>

</target>

<targetname="junit"depends="compile">

<junitprintsummary="false">

<classpathpath="${run.classpath}"></classpath>

<formattertype="xml"/>

<batchtesttodir="${test.xml}">

<filesetdir="${run.classpath}">

<includename="**/Test*.class"/>

</fileset>

</batchtest>

</junit>

<junitreporttodir="${test.xml}">

<filesetdir="${test.xml}">

<includename="TEST-*.xml"/>

</fileset>

<reportformat="frames"todir="${test.report}"/>

</junitreport>

</target>

</project>

<?xml version="1.0"?>

<projectname="project"default="junit">

<propertyname="run.classpath"value="bin"></property>

<propertyname="run.srcpath"value="src"></property>

<propertyname="test.srcpath"value="test"></property>

<propertyname="test.xml"value="xml"></property>

<propertyname="test.report"value="report"></property>

<propertyname="lib.dir"value="lib"/>

<pathid="compile.path">

<pathelementlocation="${lib.dir}/junit-3.8.1.jar"/>

<pathelementlocation="${lib.dir}/log4j-1.2.8.jar"/>

</path>

<targetname="init">

<deletedir="${test.report}"/>

<mkdirdir="${test.report}"/>

<deletedir="${test.xml}"/>

<mkdirdir="${test.xml}"/>

</target>

<targetname="compile"depends="init">

<javacdestdir="${run.classpath}"srcdir="${run.srcpath}"

classpathref="compile.path"/>

<javacdestdir="${run.classpath}"srcdir="${test.srcpath}"

classpathref="compile.path"/>

</target>

<targetname="junit"depends="compile">

<junitprintsummary="false">

<classpathpath="${run.classpath}"></classpath>

<formattertype="xml"/>

<batchtesttodir="${test.xml}">

<filesetdir="${run.classpath}">

<includename="**/Test*.class"/>

</fileset>

</batchtest>

</junit>

<junitreporttodir="${test.xml}">

<filesetdir="${test.xml}">

<includename="TEST-*.xml"/>

</fileset>

<reportformat="frames"todir="${test.report}"/>

</junitreport>

</target>

</project>

生成的文檔:

點(diǎn)擊Properties超鏈接會彈出一個窗口顯示在測試運(yùn)行時全部的Ant特性,這對于跟蹤由環(huán)境和配置造成的失敗是非常便利的!

五.使用Ant運(yùn)行本地程序

1.使用Ant運(yùn)行windows的批處理文件

要在Ant內(nèi)運(yùn)行一個外部程序,應(yīng)使用<exec>任務(wù).它允許你執(zhí)行下列操作:

l 指定程序名和要傳入的參數(shù).

l 命名運(yùn)行目錄.

l 使用failonerror標(biāo)志來控制當(dāng)應(yīng)用程序失敗時是否停止構(gòu)建.

l 指定一個最大程序持續(xù)時間,時間超過則中止程序.任務(wù)在這時被認(rèn)為是失敗,但是至少構(gòu)建會中止,而不是掛起,這對于自動構(gòu)建是至關(guān)重要的.

l 將輸出存到一個文件或特性.

l 指定java調(diào)用本地程序時需要預(yù)先設(shè)定的環(huán)境變量.

下面來看一個例子:

批處理文件:

Test.bat

@echo off

echo Hello > test.txt

build.xml

<?xml version="1.0"?>

<project name="batch" default="extract" basedir=".">

<target name="extract">

<exec executable ="cmd">

<arg line="/c a.bat"/>

</exec>

</target>

</project>

使用executable元素標(biāo)記指定使用的命令,具體用法可以在命令行下面輸入help cmd查看.如果你希望在運(yùn)行批處理發(fā)生錯誤時中止構(gòu)建需要設(shè)定failοnerrοr=”on”.加入你的外部程序在某個時刻掛起,也許是在與遠(yuǎn)程站點(diǎn)對話,而你不希望構(gòu)建永遠(yuǎn)被掛起,Ant提供了timeout這個屬性,他是一個以毫秒為單位的數(shù)字.下面看一下如何使用Ant來運(yùn)行tomcat.

啟動tomcat需要兩個環(huán)境變量CATALINA_HOME, JAVA_HOME,如果你在環(huán)境變量中已經(jīng)設(shè)定,在Ant中就不需要進(jìn)行處理,如果沒有需要使用<env>屬性來設(shè)定,你也可以使用<env>屬性覆蓋你以前的環(huán)境變量.

<?xml version="1.0"?>

<projectname="batch"default="tomcat-start"basedir=".">

<propertyname="tomcat.dir"value="C:/Tomcat5"></property>

<targetname="tomcat-start">

<execdir="${tomcat.dir}/bin"executable="cmd">

<envkey="CATALINA_HOME"path="${tomcat.dir}"/>

<argvalue="/C startup.bat"/>

</exec>

</target>

</project>

2.使用Ant運(yùn)行shell文件

由于windowsXP的cmd默認(rèn)沒有安裝ps,bash等命令,所以我們需要借助的三方的軟件來實(shí)現(xiàn)這個功能,這里使用cgywin,將cgywin的bin目錄加到環(huán)境變量的Path里面(下面使用Ant運(yùn)行cvs也會用到).

<?xml version="1.0"?>

<projectname="batch"default="shell"basedir=".">

<propertyname="tomcat.dir"value="C:/Tomcat5"></property>

<targetname="shell">

<execdir="${tomcat.dir}/bin"executable="bash">

<envkey="CATALINA_HOME"path="${tomcat.dir}"/>

<argvalue="startup.sh"/>

</exec>

</target>

</project>

3.使用Ant運(yùn)行cvs

Ant內(nèi)置cvs屬性,可以很方便的使用cvs:

<?xml version="1.0"?>

<projectname="batch"default="shell"basedir=".">

<propertyname="cvs.root"value="..."></property>

<targetname="cvs">

<cvscvsroot="cvs.root"command="checkout ../.."/>

</target>

</project>

如果你的Documents and Settings中有.cvspass文件,那么可以不用設(shè)定cvsroot,Ant會自動尋找.

六.工程的打包部署

工程的打包,主要就是文件的操作,下面通過例子簡單介紹一下文件的移動,復(fù)制和刪除.

<?xml version="1.0"?>

<projectname="project"default="jar">

<targetname="copy">

<tstamp>

<formatproperty="time.format" pattern="yyyy-mm-dd'T'HH:mm:ss"

locale="en"/>

</tstamp>

<copytofile="dist/readme"file="test.txt">

<filterset>

<filtertoken="TIME"value="${time.format}"/>

</filterset>

</copy>

</target>

<targetname="move">

<movetodir="dist">

<filesetdir="lib">

<includename="*.jar"/>

</fileset>

</move>

</target>

<targetname="delete"depends="copy,move">

<deleteverbose="true"failοnerrοr="false">

<filesetdir="dist">

<includename="*.jar"/>

</fileset>

</delete>

</target>

</project>

需要說明的是文件刪除的時候可能這個文件正在被別人是用而無法刪除,所以要用failonerror來標(biāo)記,文件的復(fù)制是時間戳敏感的,如果拷貝的文件比原文件要老,那么Ant將不會執(zhí)行copy,解決的辦法是將overwrite屬性設(shè)置為true,由于移動文件是復(fù)制文件的一個子類,所以它們的原理基本相同.

前面已經(jīng)例舉過一個jar文件打包的例子,下面主要介紹war文件的打包.Ant提供war文件打包的屬性.<war>任務(wù)是<jar>任務(wù)的子類,但是他也提供了一些特有的屬性:

<targetname="deploy"depends="init">

<wardestfile="${war.dir}/spring.war"webxml="${web.dir}/web.xml">

<classesdir="${web.dir}/classes"></classes>

<filesetdir="WebContent"excludes="web.xml"></fileset>

<libdir="${web.dir}/lib"></lib>

</war>

</target>

可以看出war任務(wù)提供了許多WEB應(yīng)用程序的特有屬性,只要你指定了這些文件,war任務(wù)就會自動將他們放到正確的位置.

部署是項(xiàng)目發(fā)布的過程,Ant支持FTP,Email,本地和遠(yuǎn)程等幾種部署模式,但是Ant并不內(nèi)置對一些部署的支持,需要第三方的庫.

optional.jar 也可能是這樣的名字: jakarta-ant-1.4.1.optional.jar

netcomponents.jar <ftp>和<telnet>需要

activation.jar <mail>需要

mail.jar <mail>需要

下面只以本地部署為例,服務(wù)器為tomcat.

由于tomcat支持熱部署,可以將webapp文件下的war文件自解壓縮,所以最簡單的部署方式是將工程打成war包后直接copy到webapp目錄下面.另一種方法是使用tomcat的管理員身份,在manager頁面裝載和刪除應(yīng)用,這種方法比較復(fù)雜,也比較正規(guī),他也是遠(yuǎn)程部署的基礎(chǔ).

<?xml version="1.0"?>

<project name="project" default="deploy-local-catalina">

<property name="war.dir" value="dist"></property>

<property name="web.dir" value="WebContent/WEB-INF"></property>

<property name="webapp.name" value="spring"></property>

<property name="catalina.port" value="8080"></property>

<property name="catalina.username" value="admin"></property>

<property name="catalina.password" value="admin"></property>

<target name="init">

<mkdir dir="${war.dir}"/>

</target>

<target name="mkwar" depends="init">

<war destfile="${war.dir}/spring.war" webxml="${web.dir}/web.xml" >

<classes dir="${web.dir}/classes"></classes>

<fileset dir="WebContent" excludes="web.xml"></fileset>

<lib dir="${web.dir}/lib"></lib>

</war>

</target>

<target name="remove-local-catalina">

<property name="deploy.local.remove.url"

value="http://localhost:${catalina.port}/manager/remove"></property>

<get dest="deploy.local.remove.txt"

src="${deploy.local.remove.url}?path=/${webapp.name}"

username="admin" password="admin"/>

<loadfile property="depoly.local.remove.result"

srcfile="depoly.local.remove.txt"></loadfile>

</target>

<target name="deploy-local-catalina" depends="mkwar, remove-local-catalina">

<property name="deploy.local.urlpath"

value="file:///D:/MyEclipse/workspace/springstruts/dist/spring.war"></property>

<property name="deploy.local.url.params"

value="path=/${webapp.name}&amp;war=${deploy.local.urlpath}"></property>

<property name="deploy.local.url"

value="http://localhost:${catalina.port}/manager/install"></property>

<get src="${deploy.local.url}?${deploy.local.url.params}"

dest="deploy-local.txt"

username="admin"

password="admin"/>

<loadfile property="deploy.local.result"

srcfile="deploy-local.txt"></loadfile>

</target>

</project>

可以看出只要將上面的localhost換成目標(biāo)的ip地址就可以實(shí)現(xiàn)tomcat的遠(yuǎn)程部署.

ANT打包內(nèi)存溢出及JDK版本過低編繹失敗解決

,<javac classpathref=”project.class.path” debug=”true” deprecation=”true” destdir=”${dest}” nowarn=”false” target=”1.6″ >在此標(biāo)簽中增加fork=”true” memoryMaximumSize=”512m”就行了—也可以改更大

ANT編繹時出現(xiàn)以下錯誤:

please download the original output file to see more info—一般是因?yàn)镴DK版本過低,請?jiān)诃h(huán)境變量中設(shè)置高版本的JDK的JAVA_HOME及相應(yīng)的PATH變量.

總結(jié)

以上是生活随笔為你收集整理的Ant 下载、安装、使用、教程全面了解「建议收藏」的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国产色在线 | 国产 | 国产真实乱对白精彩久久 | 久久伊人色av天堂九九小黄鸭 | 永久免费观看美女裸体的网站 | 久久综合激激的五月天 | 麻豆md0077饥渴少妇 | 成人无码精品1区2区3区免费看 | 亚洲成av人片天堂网无码】 | 娇妻被黑人粗大高潮白浆 | 欧美国产日产一区二区 | 国产精品久久久av久久久 | 少妇一晚三次一区二区三区 | 无遮挡国产高潮视频免费观看 | 国产麻豆精品精东影业av网站 | 女人被爽到呻吟gif动态图视看 | 久久久精品国产sm最大网站 | 亚洲一区av无码专区在线观看 | 亚洲一区二区三区偷拍女厕 | 国産精品久久久久久久 | 综合激情五月综合激情五月激情1 | 88国产精品欧美一区二区三区 | 无码任你躁久久久久久久 | 国产偷国产偷精品高清尤物 | 亚洲成a人片在线观看无码3d | 丰腴饱满的极品熟妇 | 蜜臀aⅴ国产精品久久久国产老师 | 免费国产黄网站在线观看 | 欧美高清在线精品一区 | 久久精品女人的天堂av | 亚洲毛片av日韩av无码 | 久久精品人人做人人综合试看 | 欧美第一黄网免费网站 | 任你躁在线精品免费 | 玩弄人妻少妇500系列视频 | 国产超碰人人爽人人做人人添 | 天堂在线观看www | 国产午夜福利100集发布 | 伊在人天堂亚洲香蕉精品区 | 亚洲一区二区三区四区 | 亚洲欧洲中文日韩av乱码 | 无码精品国产va在线观看dvd | 中国女人内谢69xxxxxa片 | а√天堂www在线天堂小说 | 在线a亚洲视频播放在线观看 | 久久久无码中文字幕久... | 无遮无挡爽爽免费视频 | 老太婆性杂交欧美肥老太 | 高潮毛片无遮挡高清免费视频 | 国产乱人无码伦av在线a | 亚洲人成网站色7799 | 亚洲熟妇自偷自拍另类 | 国产无遮挡又黄又爽免费视频 | 老熟女重囗味hdxx69 | 欧美兽交xxxx×视频 | 国产亚洲人成a在线v网站 | 色婷婷综合激情综在线播放 | 99精品久久毛片a片 | 亚洲一区二区三区偷拍女厕 | 亚洲自偷自拍另类第1页 | 国产精品久久福利网站 | 中文字幕无码视频专区 | 男女猛烈xx00免费视频试看 | 久久久久人妻一区精品色欧美 | 亚洲精品中文字幕久久久久 | 亚洲乱码日产精品bd | 国产成人av免费观看 | 国产97色在线 | 免 | 内射白嫩少妇超碰 | 日本大香伊一区二区三区 | 亚洲熟妇色xxxxx欧美老妇 | 日本乱人伦片中文三区 | 国产精品人人爽人人做我的可爱 | 日本高清一区免费中文视频 | 强辱丰满人妻hd中文字幕 | 亚洲人成网站免费播放 | 在线а√天堂中文官网 | 国产精品久久久久久久9999 | 欧美乱妇无乱码大黄a片 | 女人和拘做爰正片视频 | 最近的中文字幕在线看视频 | 国产偷抇久久精品a片69 | 波多野42部无码喷潮在线 | 67194成是人免费无码 | 内射白嫩少妇超碰 | 免费看男女做好爽好硬视频 | 清纯唯美经典一区二区 | 四虎永久在线精品免费网址 | 国产精品人人爽人人做我的可爱 | 帮老师解开蕾丝奶罩吸乳网站 | 中文字幕久久久久人妻 | 乱码av麻豆丝袜熟女系列 | 无码吃奶揉捏奶头高潮视频 | 亚洲s码欧洲m码国产av | 天干天干啦夜天干天2017 | 激情五月综合色婷婷一区二区 | 青草青草久热国产精品 | 无码免费一区二区三区 | 俺去俺来也www色官网 | 免费无码午夜福利片69 | аⅴ资源天堂资源库在线 | 在线 国产 欧美 亚洲 天堂 | 亚洲人成影院在线观看 | 无码精品国产va在线观看dvd | 亚洲欧美综合区丁香五月小说 | 日产精品高潮呻吟av久久 | 天堂久久天堂av色综合 | 亚洲 a v无 码免 费 成 人 a v | 亚洲欧美国产精品专区久久 | 精品aⅴ一区二区三区 | 欧美zoozzooz性欧美 | 欧美亚洲国产一区二区三区 | 久久精品人人做人人综合 | 亚洲精品久久久久中文第一幕 | 精品久久久久香蕉网 | 精品国产av色一区二区深夜久久 | 精品国偷自产在线 | 国产av一区二区精品久久凹凸 | 色诱久久久久综合网ywww | 中文字幕人妻无码一区二区三区 | 午夜无码人妻av大片色欲 | 又大又硬又黄的免费视频 | 国产高清av在线播放 | 亚洲一区二区三区香蕉 | 精品久久久久香蕉网 | 国产精品无码久久av | 在线看片无码永久免费视频 | 东京一本一道一二三区 | 少妇被黑人到高潮喷出白浆 | 国产精品永久免费视频 | 久久久久国色av免费观看性色 | 无套内谢的新婚少妇国语播放 | 国产成人人人97超碰超爽8 | 欧美高清在线精品一区 | 领导边摸边吃奶边做爽在线观看 | 国产绳艺sm调教室论坛 | 亚洲第一无码av无码专区 | 亚洲爆乳精品无码一区二区三区 | 国产成人无码av在线影院 | 牲欲强的熟妇农村老妇女 | 亚洲中文字幕va福利 | 婷婷色婷婷开心五月四房播播 | 色欲综合久久中文字幕网 | 成在人线av无码免观看麻豆 | 乱人伦中文视频在线观看 | 色婷婷香蕉在线一区二区 | 国产精品igao视频网 | 国产精品人人爽人人做我的可爱 | 日日鲁鲁鲁夜夜爽爽狠狠 | 九九综合va免费看 | 亚洲人成网站免费播放 | 欧美人与牲动交xxxx | 国产亚洲视频中文字幕97精品 | 无码人中文字幕 | 美女张开腿让人桶 | 熟妇人妻无乱码中文字幕 | 亚洲成av人片天堂网无码】 | 亚洲国产精品一区二区美利坚 | 欧美35页视频在线观看 | 精品无码国产一区二区三区av | 婷婷丁香五月天综合东京热 | 亚洲成a人片在线观看无码3d | 国产av剧情md精品麻豆 | 中文字幕无码热在线视频 | 黑森林福利视频导航 | 亚洲欧美国产精品专区久久 | 成人无码精品一区二区三区 | 国产另类ts人妖一区二区 | 日日碰狠狠丁香久燥 | 欧美人与禽zoz0性伦交 | 日韩av无码中文无码电影 | 亚洲男人av香蕉爽爽爽爽 | 老头边吃奶边弄进去呻吟 | 欧美性猛交内射兽交老熟妇 | 国产欧美精品一区二区三区 | 久久人人爽人人爽人人片ⅴ | 精品久久久中文字幕人妻 | 亚洲成色在线综合网站 | √天堂资源地址中文在线 | 国产精品久久久一区二区三区 | 成人精品视频一区二区三区尤物 | 人人澡人人透人人爽 | 中文字幕无码视频专区 | 精品无码成人片一区二区98 | 97精品人妻一区二区三区香蕉 | 久久亚洲精品成人无码 | 欧美精品一区二区精品久久 | 东北女人啪啪对白 | 曰韩无码二三区中文字幕 | 国产xxx69麻豆国语对白 | 午夜时刻免费入口 | 国产精品成人av在线观看 | 麻豆蜜桃av蜜臀av色欲av | 日日碰狠狠躁久久躁蜜桃 | 国内揄拍国内精品少妇国语 | 国产亚洲精品久久久闺蜜 | 久久97精品久久久久久久不卡 | 任你躁国产自任一区二区三区 | 国产亲子乱弄免费视频 | 欧美国产日韩亚洲中文 | 青青草原综合久久大伊人精品 | аⅴ资源天堂资源库在线 | 国产激情艳情在线看视频 | 少妇无套内谢久久久久 | 国产精品久久久久久亚洲影视内衣 | 狂野欧美性猛交免费视频 | 亚洲精品午夜无码电影网 | 午夜福利试看120秒体验区 | 精品成人av一区二区三区 | 国产国语老龄妇女a片 | 无码福利日韩神码福利片 | 一区二区传媒有限公司 | 天干天干啦夜天干天2017 | 国产一区二区三区日韩精品 | 国产亚洲欧美在线专区 | 国产综合在线观看 | 狠狠亚洲超碰狼人久久 | 国产亚av手机在线观看 | 强开小婷嫩苞又嫩又紧视频 | 中文字幕乱码亚洲无线三区 | 中文字幕无码免费久久99 | 亚洲の无码国产の无码步美 | 国产乱子伦视频在线播放 | 精品厕所偷拍各类美女tp嘘嘘 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 蜜桃视频韩日免费播放 | 日本大香伊一区二区三区 | 荫蒂添的好舒服视频囗交 | 狠狠躁日日躁夜夜躁2020 | 三级4级全黄60分钟 | 欧美激情综合亚洲一二区 | 亚洲一区二区三区无码久久 | 国产乡下妇女做爰 | 久久精品成人欧美大片 | 一区二区传媒有限公司 | 少妇人妻偷人精品无码视频 | 亚洲国产精品无码久久久久高潮 | 亚洲无人区一区二区三区 | 国产精品第一国产精品 | 人人妻人人藻人人爽欧美一区 | av无码电影一区二区三区 | 天天综合网天天综合色 | 日本精品久久久久中文字幕 | 久久综合久久自在自线精品自 | 亚洲精品午夜无码电影网 | 粉嫩少妇内射浓精videos | 国产在线精品一区二区三区直播 | 国产午夜亚洲精品不卡 | 国产精品久久久久久久影院 | 久久精品无码一区二区三区 | 国产亚洲欧美在线专区 | 欧美大屁股xxxxhd黑色 | 性欧美牲交xxxxx视频 | 高中生自慰www网站 | 97精品人妻一区二区三区香蕉 | 亚洲欧洲日本无在线码 | 色欲综合久久中文字幕网 | 色婷婷欧美在线播放内射 | 无码一区二区三区在线观看 | 国产精品第一区揄拍无码 | 老熟女乱子伦 | 97资源共享在线视频 | 久久国产劲爆∧v内射 | 人妻无码αv中文字幕久久琪琪布 | 亚洲人成无码网www | 亚洲日本一区二区三区在线 | 日韩av无码中文无码电影 | 国产精品视频免费播放 | 2019午夜福利不卡片在线 | 99精品国产综合久久久久五月天 | 亚洲精品一区二区三区四区五区 | 久久精品人人做人人综合 | 国产成人午夜福利在线播放 | 国产激情艳情在线看视频 | 亚洲aⅴ无码成人网站国产app | 亚洲理论电影在线观看 | 欧洲精品码一区二区三区免费看 | 激情五月综合色婷婷一区二区 | 日韩在线不卡免费视频一区 | 粉嫩少妇内射浓精videos | 九一九色国产 | 亚洲国精产品一二二线 | 无码人妻出轨黑人中文字幕 | 日日鲁鲁鲁夜夜爽爽狠狠 | 午夜福利不卡在线视频 | 国产精品18久久久久久麻辣 | 免费人成在线观看网站 | 2019午夜福利不卡片在线 | 亚洲国产成人a精品不卡在线 | 日日天干夜夜狠狠爱 | 妺妺窝人体色www婷婷 | 亚洲成av人片天堂网无码】 | 日本精品人妻无码77777 天堂一区人妻无码 | 久久综合给久久狠狠97色 | 国产精品久久久久无码av色戒 | 国产人妻久久精品二区三区老狼 | 精品少妇爆乳无码av无码专区 | 99久久亚洲精品无码毛片 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | √天堂中文官网8在线 | 妺妺窝人体色www婷婷 | 伊人久久婷婷五月综合97色 | 日本精品少妇一区二区三区 | 综合人妻久久一区二区精品 | 久久综合给合久久狠狠狠97色 | 麻豆国产丝袜白领秘书在线观看 | 国产精品亚洲一区二区三区喷水 | 九月婷婷人人澡人人添人人爽 | 精品国产一区av天美传媒 | 欧美亚洲国产一区二区三区 | 午夜福利不卡在线视频 | 亚洲成a人片在线观看日本 | 激情爆乳一区二区三区 | 国产sm调教视频在线观看 | 中国女人内谢69xxxxxa片 | aⅴ在线视频男人的天堂 | 亚洲欧美国产精品久久 | 精品无码国产自产拍在线观看蜜 | 久久久国产精品无码免费专区 | 波多野结衣高清一区二区三区 | 久久综合网欧美色妞网 | 人妻无码久久精品人妻 | 欧美三级不卡在线观看 | 国产精品亚洲а∨无码播放麻豆 | 国精品人妻无码一区二区三区蜜柚 | 无码播放一区二区三区 | 76少妇精品导航 | 日本一区二区三区免费高清 | 少妇性俱乐部纵欲狂欢电影 | 日本一卡2卡3卡四卡精品网站 | 国产精品视频免费播放 | 欧美日韩视频无码一区二区三 | 亚洲精品www久久久 | 樱花草在线社区www | 一区二区传媒有限公司 | 久久综合给久久狠狠97色 | 国产成人午夜福利在线播放 | 亚洲国产欧美日韩精品一区二区三区 | 国产精品对白交换视频 | 国产熟妇高潮叫床视频播放 | 国产乱子伦视频在线播放 | 亚洲日本在线电影 | 日日摸天天摸爽爽狠狠97 | 欧美高清在线精品一区 | 无码午夜成人1000部免费视频 | 国产偷自视频区视频 | 激情内射日本一区二区三区 | 国产精品久久精品三级 | 精品久久综合1区2区3区激情 | 中文字幕乱妇无码av在线 | 久久国产36精品色熟妇 | 99久久久无码国产精品免费 | 永久免费精品精品永久-夜色 | 熟妇人妻无乱码中文字幕 | 成人精品天堂一区二区三区 | 老熟妇乱子伦牲交视频 | 国产麻豆精品精东影业av网站 | 全球成人中文在线 | 免费国产成人高清在线观看网站 | 午夜理论片yy44880影院 | 精品成人av一区二区三区 | 国产激情无码一区二区app | 日韩欧美中文字幕公布 | 国产综合久久久久鬼色 | 97夜夜澡人人爽人人喊中国片 | 男人扒开女人内裤强吻桶进去 | 色狠狠av一区二区三区 | 国产又爽又黄又刺激的视频 | 久久久成人毛片无码 | 日日碰狠狠躁久久躁蜜桃 | 国产精品99久久精品爆乳 | 色婷婷综合激情综在线播放 | 人人妻人人澡人人爽欧美一区九九 | 国产 浪潮av性色四虎 | 国产亚洲欧美在线专区 | 国产肉丝袜在线观看 | 人妻少妇精品无码专区动漫 | 国内老熟妇对白xxxxhd | 曰韩少妇内射免费播放 | 亚洲精品一区二区三区婷婷月 | 亚洲人成影院在线无码按摩店 | 日日干夜夜干 | 精品人妻av区 | 国产明星裸体无码xxxx视频 | 久久这里只有精品视频9 | 性欧美牲交xxxxx视频 | 荫蒂被男人添的好舒服爽免费视频 | 国产绳艺sm调教室论坛 | 国产莉萝无码av在线播放 | 亚洲熟熟妇xxxx | 欧美日韩在线亚洲综合国产人 | 国产亚洲欧美日韩亚洲中文色 | 97精品人妻一区二区三区香蕉 | 国产av一区二区三区最新精品 | 国精品人妻无码一区二区三区蜜柚 | 无码毛片视频一区二区本码 | 亚洲人亚洲人成电影网站色 | 亚洲一区二区三区在线观看网站 | 欧美性生交活xxxxxdddd | 免费乱码人妻系列无码专区 | 国产舌乚八伦偷品w中 | 精品熟女少妇av免费观看 | 狂野欧美性猛交免费视频 | 亚洲人成网站免费播放 | 国产精品美女久久久网av | 国产午夜亚洲精品不卡下载 | 老熟妇仑乱视频一区二区 | 国产成人人人97超碰超爽8 | 丰满人妻一区二区三区免费视频 | 国产精品久久久久久无码 | 久久久国产一区二区三区 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久99精品国产麻豆 | 成人一在线视频日韩国产 | 日本乱人伦片中文三区 | 色欲综合久久中文字幕网 | 99久久精品日本一区二区免费 | 久久99精品国产.久久久久 | 欧美 亚洲 国产 另类 | 性欧美熟妇videofreesex | 欧美精品一区二区精品久久 | 亚洲成av人片天堂网无码】 | 美女张开腿让人桶 | 久久人妻内射无码一区三区 | 狂野欧美性猛xxxx乱大交 | 日本大乳高潮视频在线观看 | 超碰97人人做人人爱少妇 | 亚洲精品欧美二区三区中文字幕 | 中文字幕中文有码在线 | 国内精品久久毛片一区二区 | 国产成人无码午夜视频在线观看 | 久久久久久国产精品无码下载 | 学生妹亚洲一区二区 | 一本大道久久东京热无码av | 国产色xx群视频射精 | 激情五月综合色婷婷一区二区 | 精品国精品国产自在久国产87 | 久久久久久亚洲精品a片成人 | 亚洲精品一区二区三区在线观看 | 一本色道婷婷久久欧美 | 丰满少妇弄高潮了www | 性做久久久久久久久 | 午夜性刺激在线视频免费 | 暴力强奷在线播放无码 | 在线成人www免费观看视频 | 精品国产青草久久久久福利 | 欧美三级不卡在线观看 | 久久国内精品自在自线 | 牲欲强的熟妇农村老妇女视频 | 成人免费视频在线观看 | 2020最新国产自产精品 | 乱中年女人伦av三区 | 免费无码午夜福利片69 | 国产亚洲精品久久久久久久 | 蜜桃视频韩日免费播放 | 国产成人综合在线女婷五月99播放 | 亚洲精品一区三区三区在线观看 | 亚洲aⅴ无码成人网站国产app | 亚洲伊人久久精品影院 | 中文字幕人妻丝袜二区 | 国产午夜福利100集发布 | 日韩av无码一区二区三区不卡 | 国产亚av手机在线观看 | 少妇的肉体aa片免费 | 欧美老人巨大xxxx做受 | 国产熟女一区二区三区四区五区 | 无码任你躁久久久久久久 | 免费视频欧美无人区码 | 内射老妇bbwx0c0ck | 久久综合激激的五月天 | 无码中文字幕色专区 | 少妇久久久久久人妻无码 | 精品国产一区二区三区av 性色 | 大地资源中文第3页 | 国产亚洲精品久久久ai换 | 久久久久久国产精品无码下载 | 牲欲强的熟妇农村老妇女 | 国产精品久久久av久久久 | 一个人看的视频www在线 | 亚洲人成网站在线播放942 | 国产成人精品一区二区在线小狼 | 樱花草在线社区www | 亚洲色欲久久久综合网东京热 | 沈阳熟女露脸对白视频 | 国产精品美女久久久久av爽李琼 | 成熟妇人a片免费看网站 | 亚洲毛片av日韩av无码 | 国产精品久久国产三级国 | 男女作爱免费网站 | 300部国产真实乱 | 日本一卡2卡3卡四卡精品网站 | 亚洲人成网站色7799 | 学生妹亚洲一区二区 | 国产成人精品三级麻豆 | 嫩b人妻精品一区二区三区 | 亚洲国产精品一区二区美利坚 | 在线看片无码永久免费视频 | 中文精品无码中文字幕无码专区 | 日韩亚洲欧美中文高清在线 | 精品欧洲av无码一区二区三区 | 久久人人爽人人爽人人片av高清 | 亚洲啪av永久无码精品放毛片 | 免费国产成人高清在线观看网站 | 亚洲男女内射在线播放 | 秋霞成人午夜鲁丝一区二区三区 | 色诱久久久久综合网ywww | 国产免费久久精品国产传媒 | 久久久久人妻一区精品色欧美 | 国内揄拍国内精品少妇国语 | 国产片av国语在线观看 | 免费无码av一区二区 | 日日摸日日碰夜夜爽av | 7777奇米四色成人眼影 | 成人一在线视频日韩国产 | 激情内射日本一区二区三区 | 好男人www社区 | 国产在线精品一区二区三区直播 | 无码帝国www无码专区色综合 | 亚洲日本va中文字幕 | 久久无码中文字幕免费影院蜜桃 | 性做久久久久久久久 | 噜噜噜亚洲色成人网站 | 久久人人爽人人人人片 | 综合人妻久久一区二区精品 | 俺去俺来也www色官网 | 亚洲中文字幕乱码av波多ji | 久久久久亚洲精品中文字幕 | 草草网站影院白丝内射 | 久9re热视频这里只有精品 | 国产偷抇久久精品a片69 | 国内精品久久久久久中文字幕 | 日日麻批免费40分钟无码 | 亚洲精品国产品国语在线观看 | 奇米影视7777久久精品 | 中文字幕精品av一区二区五区 | 牲欲强的熟妇农村老妇女视频 | 国产亚洲人成a在线v网站 | 日本一卡2卡3卡四卡精品网站 | 亚洲乱码日产精品bd | 日韩视频 中文字幕 视频一区 | 午夜性刺激在线视频免费 | 精品人妻人人做人人爽 | 麻豆人妻少妇精品无码专区 | 无码国产乱人伦偷精品视频 | 图片区 小说区 区 亚洲五月 | 1000部夫妻午夜免费 | 性做久久久久久久免费看 | 免费观看激色视频网站 | 国产精品-区区久久久狼 | 狠狠亚洲超碰狼人久久 | 精品国产一区二区三区四区 | 国产成人精品优优av | 永久免费精品精品永久-夜色 | 激情内射日本一区二区三区 | 色五月五月丁香亚洲综合网 | 欧美日韩一区二区三区自拍 | 人妻互换免费中文字幕 | 奇米影视7777久久精品人人爽 | 久久久久成人精品免费播放动漫 | 亚洲精品欧美二区三区中文字幕 | 鲁鲁鲁爽爽爽在线视频观看 | 无码免费一区二区三区 | 国产精品久久久久无码av色戒 | 色综合天天综合狠狠爱 | 在线精品国产一区二区三区 | 成人精品天堂一区二区三区 | 人妻人人添人妻人人爱 | 欧美性猛交内射兽交老熟妇 | 一本一道久久综合久久 | 免费乱码人妻系列无码专区 | 十八禁真人啪啪免费网站 | 97人妻精品一区二区三区 | 成人无码视频在线观看网站 | 亚洲va欧美va天堂v国产综合 | a国产一区二区免费入口 | 亚洲熟妇色xxxxx欧美老妇 | 18精品久久久无码午夜福利 | a片免费视频在线观看 | 成人欧美一区二区三区 | 亚洲精品综合一区二区三区在线 | 曰本女人与公拘交酡免费视频 | 正在播放东北夫妻内射 | 国产成人午夜福利在线播放 | 久久久成人毛片无码 | 久久国产精品萌白酱免费 | 久久99精品久久久久婷婷 | 日韩精品a片一区二区三区妖精 | 麻豆成人精品国产免费 | 亚洲精品一区二区三区大桥未久 | 欧美性猛交xxxx富婆 | 久久99精品久久久久久动态图 | 帮老师解开蕾丝奶罩吸乳网站 | 色婷婷综合激情综在线播放 | yw尤物av无码国产在线观看 | 欧美喷潮久久久xxxxx | 日韩精品成人一区二区三区 | 欧美阿v高清资源不卡在线播放 | 亚洲欧美日韩综合久久久 | 日韩精品a片一区二区三区妖精 | 成人精品视频一区二区三区尤物 | 国产精品99爱免费视频 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 日本一区二区三区免费播放 | 精品久久综合1区2区3区激情 | 免费无码的av片在线观看 | 精品日本一区二区三区在线观看 | 亚洲欧洲中文日韩av乱码 | 久久精品国产一区二区三区肥胖 | 性欧美牲交在线视频 | 中文无码成人免费视频在线观看 | 美女黄网站人色视频免费国产 | 性生交大片免费看l | 中文字幕日韩精品一区二区三区 | 黑人玩弄人妻中文在线 | 中文字幕乱妇无码av在线 | 亚洲国产欧美日韩精品一区二区三区 | 久久久国产一区二区三区 | 日日摸夜夜摸狠狠摸婷婷 | 久久 国产 尿 小便 嘘嘘 | 激情内射亚州一区二区三区爱妻 | 中文字幕久久久久人妻 | 亚洲一区二区三区国产精华液 | 亚洲 另类 在线 欧美 制服 | 国产精品怡红院永久免费 | 熟妇人妻中文av无码 | 99精品久久毛片a片 | 亚洲va欧美va天堂v国产综合 | 欧美精品无码一区二区三区 | 成在人线av无码免费 | 精品一区二区三区无码免费视频 | 欧美国产日产一区二区 | 高潮喷水的毛片 | 国产精品久久久午夜夜伦鲁鲁 | 国产精品久久久久久亚洲毛片 | 成人影院yy111111在线观看 | 国产 精品 自在自线 | 性色欲情网站iwww九文堂 | 在线观看免费人成视频 | 性色欲情网站iwww九文堂 | 精品成在人线av无码免费看 | 久久久久国色av免费观看性色 | 国产精品人妻一区二区三区四 | 乱人伦人妻中文字幕无码久久网 | 高清不卡一区二区三区 | 久久国产劲爆∧v内射 | 精品国产国产综合精品 | 国产精品.xx视频.xxtv | 狠狠色噜噜狠狠狠7777奇米 | 日本精品少妇一区二区三区 | 久久99热只有频精品8 | 初尝人妻少妇中文字幕 | 国产精品对白交换视频 | 中文字幕无线码 | 色综合久久久无码中文字幕 | 丰满少妇人妻久久久久久 | 欧美精品国产综合久久 | 熟女俱乐部五十路六十路av | 欧美老熟妇乱xxxxx | 大肉大捧一进一出好爽视频 | 国产高潮视频在线观看 | 人妻夜夜爽天天爽三区 | 久久久久久久女国产乱让韩 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产乱人偷精品人妻a片 | 任你躁国产自任一区二区三区 | 欧美刺激性大交 | 国产精品无码一区二区三区不卡 | 日韩 欧美 动漫 国产 制服 | 中文精品无码中文字幕无码专区 | 99久久精品日本一区二区免费 | 东北女人啪啪对白 | 欧美日本精品一区二区三区 | 精品久久久久久亚洲精品 | 日韩少妇白浆无码系列 | 一本久久伊人热热精品中文字幕 | 国产日产欧产精品精品app | 亚洲 日韩 欧美 成人 在线观看 | 激情国产av做激情国产爱 | 国产人妻精品午夜福利免费 | 成人一区二区免费视频 | 在线播放亚洲第一字幕 | а√资源新版在线天堂 | 人妻与老人中文字幕 | 亚洲va中文字幕无码久久不卡 | 日韩精品无码免费一区二区三区 | 狠狠色丁香久久婷婷综合五月 | 欧美xxxx黑人又粗又长 | 欧美性猛交内射兽交老熟妇 | 国产精品久久久久无码av色戒 | 久久久久成人片免费观看蜜芽 | 大肉大捧一进一出好爽视频 | 久久亚洲中文字幕精品一区 | 亚洲色欲久久久综合网东京热 | 久久精品国产亚洲精品 | 在线成人www免费观看视频 | 日产精品高潮呻吟av久久 | 午夜精品久久久久久久 | 99国产欧美久久久精品 | 丰满人妻翻云覆雨呻吟视频 | 成人精品一区二区三区中文字幕 | 欧美老人巨大xxxx做受 | 风流少妇按摩来高潮 | 国产成人无码一二三区视频 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲午夜无码久久 | 精品夜夜澡人妻无码av蜜桃 | 丰满少妇高潮惨叫视频 | 97色伦图片97综合影院 | 呦交小u女精品视频 | 国产9 9在线 | 中文 | 成熟人妻av无码专区 | 性欧美牲交在线视频 | 免费观看的无遮挡av | 天天拍夜夜添久久精品 | 亚洲码国产精品高潮在线 | 国产内射老熟女aaaa | 亚洲一区二区三区偷拍女厕 | 久久成人a毛片免费观看网站 | 久久亚洲精品中文字幕无男同 | 精品无人区无码乱码毛片国产 | 日本精品人妻无码77777 天堂一区人妻无码 | 亚洲国产精品美女久久久久 | 欧美35页视频在线观看 | 亚洲啪av永久无码精品放毛片 | 中文字幕乱码中文乱码51精品 | 色婷婷av一区二区三区之红樱桃 | 波多野结衣高清一区二区三区 | 99视频精品全部免费免费观看 | 亚洲综合另类小说色区 | 久精品国产欧美亚洲色aⅴ大片 | 无码人妻出轨黑人中文字幕 | 亚洲理论电影在线观看 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产人妻大战黑人第1集 | 免费无码午夜福利片69 | 国产色xx群视频射精 | 国产又粗又硬又大爽黄老大爷视 | 丝袜人妻一区二区三区 | 久久久精品人妻久久影视 | 日本护士xxxxhd少妇 | 国产无套内射久久久国产 | 国产精品久久久久久久9999 | 76少妇精品导航 | 亚洲va欧美va天堂v国产综合 | 美女扒开屁股让男人桶 | 日日躁夜夜躁狠狠躁 | 婷婷五月综合缴情在线视频 | 国产va免费精品观看 | 樱花草在线播放免费中文 | 亚洲国产精品美女久久久久 | 国产凸凹视频一区二区 | 久久无码专区国产精品s | 少妇被粗大的猛进出69影院 | 少妇人妻偷人精品无码视频 | 最近中文2019字幕第二页 | 又紧又大又爽精品一区二区 | 亚洲小说春色综合另类 | 精品国精品国产自在久国产87 | 国产在线无码精品电影网 | 女人被爽到呻吟gif动态图视看 | 欧洲欧美人成视频在线 | 国产乱人偷精品人妻a片 | 四虎国产精品一区二区 | 国产疯狂伦交大片 | 大胆欧美熟妇xx | 国产精品第一国产精品 | 久久精品女人的天堂av | 老熟妇仑乱视频一区二区 | 久久精品国产一区二区三区 | 国产偷自视频区视频 | 免费观看黄网站 | 久久久久久久人妻无码中文字幕爆 | 国产成人人人97超碰超爽8 | 成熟妇人a片免费看网站 | 亚洲国产精品毛片av不卡在线 | 精品国产aⅴ无码一区二区 | 亚洲精品一区二区三区在线观看 | 岛国片人妻三上悠亚 | √天堂中文官网8在线 | 免费播放一区二区三区 | 日日摸夜夜摸狠狠摸婷婷 | 色一情一乱一伦 | 中文字幕人成乱码熟女app | 久久久久久国产精品无码下载 | 牲欲强的熟妇农村老妇女视频 | 亚洲人成网站在线播放942 | 在线亚洲高清揄拍自拍一品区 | 亚洲人成影院在线观看 | 一本色道久久综合狠狠躁 | 国产精品亚洲一区二区三区喷水 | 色婷婷香蕉在线一区二区 | 国产精品久久久久9999小说 | 亚洲一区二区三区香蕉 | 国产特级毛片aaaaaaa高清 | 大乳丰满人妻中文字幕日本 | 两性色午夜视频免费播放 | 露脸叫床粗话东北少妇 | 漂亮人妻洗澡被公强 日日躁 | 欧美性猛交内射兽交老熟妇 | www成人国产高清内射 | 亚洲色欲久久久综合网东京热 | 成熟女人特级毛片www免费 | 老司机亚洲精品影院 | 少妇性l交大片欧洲热妇乱xxx | 国产精品无码一区二区三区不卡 | а√资源新版在线天堂 | 国产av一区二区精品久久凹凸 | 国产精品va在线播放 | 亚洲欧洲日本综合aⅴ在线 | 在线a亚洲视频播放在线观看 | 亚洲人成影院在线观看 | 日韩欧美中文字幕在线三区 | 精品无人区无码乱码毛片国产 | 999久久久国产精品消防器材 | 久久综合激激的五月天 | 日产精品高潮呻吟av久久 | 久久久久免费精品国产 | 撕开奶罩揉吮奶头视频 | 装睡被陌生人摸出水好爽 | 偷窥村妇洗澡毛毛多 | 精品人妻人人做人人爽 | 国产精品美女久久久 | 欧美成人午夜精品久久久 | 久久精品国产一区二区三区 | 5858s亚洲色大成网站www | 无码一区二区三区在线观看 | 国产成人无码一二三区视频 | 无码吃奶揉捏奶头高潮视频 | 国产精品手机免费 | 风流少妇按摩来高潮 | yw尤物av无码国产在线观看 | 中文字幕av伊人av无码av | 国产亚洲日韩欧美另类第八页 | 久久久久久国产精品无码下载 | 内射老妇bbwx0c0ck | 青青久在线视频免费观看 | 在线亚洲高清揄拍自拍一品区 | 国产亚洲欧美在线专区 | 超碰97人人做人人爱少妇 | 国产猛烈高潮尖叫视频免费 | 亚洲性无码av中文字幕 | 中文字幕无码免费久久9一区9 | 18黄暴禁片在线观看 | 大肉大捧一进一出视频出来呀 | 又大又硬又黄的免费视频 | 亚洲综合伊人久久大杳蕉 | 精品aⅴ一区二区三区 | 国产肉丝袜在线观看 | 国产成人精品三级麻豆 | 精品成人av一区二区三区 | 亚洲国产欧美日韩精品一区二区三区 | 中文字幕无码人妻少妇免费 | 无码av免费一区二区三区试看 | 无遮挡啪啪摇乳动态图 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲天堂2017无码中文 | 亚洲中文字幕成人无码 | aⅴ在线视频男人的天堂 | 久久久久久久人妻无码中文字幕爆 | 少妇高潮喷潮久久久影院 | 久久精品99久久香蕉国产色戒 | 又大又硬又爽免费视频 | 久久久久久国产精品无码下载 | 亚洲国产精品一区二区第一页 | 呦交小u女精品视频 | 久久午夜无码鲁丝片午夜精品 | 亚洲人成影院在线观看 | 国产艳妇av在线观看果冻传媒 | 亚洲中文字幕无码中字 | 人妻插b视频一区二区三区 | 蜜臀av无码人妻精品 | 日韩无码专区 | 久久久精品欧美一区二区免费 | 无码午夜成人1000部免费视频 | 精品人人妻人人澡人人爽人人 | 男女作爱免费网站 | 亚洲国产成人av在线观看 | 亚洲s码欧洲m码国产av | 偷窥村妇洗澡毛毛多 | 国产人妻精品一区二区三区 | 中文毛片无遮挡高清免费 | 欧美 丝袜 自拍 制服 另类 | 玩弄少妇高潮ⅹxxxyw | 2019nv天堂香蕉在线观看 | 熟妇激情内射com | 亚洲最大成人网站 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 4hu四虎永久在线观看 | 久久国产36精品色熟妇 | 人妻天天爽夜夜爽一区二区 | 亚洲日韩中文字幕在线播放 | 国产精品久免费的黄网站 | 88国产精品欧美一区二区三区 | 色欲久久久天天天综合网精品 | 中国女人内谢69xxxx | 性欧美牲交在线视频 | 久久久精品人妻久久影视 | 精品无码成人片一区二区98 | 色 综合 欧美 亚洲 国产 | 日韩 欧美 动漫 国产 制服 | 国内精品人妻无码久久久影院蜜桃 | 色婷婷综合激情综在线播放 | 精品亚洲成av人在线观看 | 色综合久久久久综合一本到桃花网 | 一本久道久久综合婷婷五月 | 又大又硬又黄的免费视频 | 日韩精品一区二区av在线 | 少妇性l交大片 | 九九综合va免费看 | 老子影院午夜伦不卡 | 欧美 日韩 亚洲 在线 | 性欧美牲交在线视频 | 野外少妇愉情中文字幕 | 纯爱无遮挡h肉动漫在线播放 | 国产内射爽爽大片视频社区在线 | 日本精品久久久久中文字幕 | 中国女人内谢69xxxxxa片 | 精品久久久无码人妻字幂 | 国产免费观看黄av片 | 久久99精品国产麻豆 | 精品无码国产一区二区三区av | 国产 精品 自在自线 | 麻豆精产国品 | 国内精品人妻无码久久久影院蜜桃 | 国产成人午夜福利在线播放 | 亚洲精品一区二区三区大桥未久 | 窝窝午夜理论片影院 | 两性色午夜免费视频 | 国产无套内射久久久国产 | 青青青手机频在线观看 | 国产免费观看黄av片 | 在线a亚洲视频播放在线观看 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲中文字幕乱码av波多ji | 亚洲男人av天堂午夜在 | 国产精品亚洲专区无码不卡 | 午夜精品一区二区三区在线观看 | 好爽又高潮了毛片免费下载 | 欧美成人免费全部网站 | 国产手机在线αⅴ片无码观看 | 国产色精品久久人妻 | 久久久久se色偷偷亚洲精品av | 国产精品第一国产精品 | 日本免费一区二区三区最新 | 欧美人与物videos另类 | 国内精品久久久久久中文字幕 | 久久综合久久自在自线精品自 | 国产国产精品人在线视 | 波多野结衣高清一区二区三区 | 中文字幕无线码免费人妻 | 东北女人啪啪对白 | 国产口爆吞精在线视频 | 国产偷国产偷精品高清尤物 | 欧美老人巨大xxxx做受 | 日韩精品一区二区av在线 | 狠狠色噜噜狠狠狠7777奇米 | 无码毛片视频一区二区本码 | 无码人妻久久一区二区三区不卡 | 中文无码成人免费视频在线观看 | 亚洲精品久久久久久久久久久 | 亚洲国产精品一区二区第一页 | 精品水蜜桃久久久久久久 | 无码国产乱人伦偷精品视频 | 国产精品第一国产精品 | 久久久久se色偷偷亚洲精品av | 日韩av无码中文无码电影 | 国产三级精品三级男人的天堂 | 成人一区二区免费视频 | 内射后入在线观看一区 | 亚洲精品鲁一鲁一区二区三区 | 国产乱人偷精品人妻a片 | 中文字幕日韩精品一区二区三区 | 亚洲中文字幕成人无码 | 成人片黄网站色大片免费观看 | 亚洲中文字幕无码中文字在线 | 蜜臀aⅴ国产精品久久久国产老师 | 无码精品国产va在线观看dvd | 国产明星裸体无码xxxx视频 | 欧美三级不卡在线观看 | 天天躁夜夜躁狠狠是什么心态 | 国产在线精品一区二区三区直播 | 影音先锋中文字幕无码 | 久久久久久久人妻无码中文字幕爆 | 精品一区二区三区波多野结衣 | 国产手机在线αⅴ片无码观看 | 麻豆蜜桃av蜜臀av色欲av | 免费无码的av片在线观看 | 久久久精品456亚洲影院 | 国产舌乚八伦偷品w中 | 国产97色在线 | 免 | 国产超碰人人爽人人做人人添 | 中文字幕 人妻熟女 | 天堂а√在线中文在线 | 性做久久久久久久久 | 四虎永久在线精品免费网址 | 波多野结衣一区二区三区av免费 | 成人精品天堂一区二区三区 | 中文字幕无码av波多野吉衣 | 亚洲精品综合一区二区三区在线 | 国产午夜视频在线观看 | 亚洲综合无码一区二区三区 | 天堂无码人妻精品一区二区三区 | 欧洲欧美人成视频在线 | 欧美zoozzooz性欧美 | 99国产欧美久久久精品 | 97无码免费人妻超级碰碰夜夜 | 狠狠色欧美亚洲狠狠色www | 色窝窝无码一区二区三区色欲 | 国产精品va在线播放 | 国产成人精品一区二区在线小狼 | 精品国产成人一区二区三区 | 亚洲中文字幕成人无码 | 国产免费无码一区二区视频 | 精品乱码久久久久久久 | 久久国产自偷自偷免费一区调 | 国产成人午夜福利在线播放 | 午夜精品久久久久久久久 | 国产人妻大战黑人第1集 | 在线成人www免费观看视频 | 无码成人精品区在线观看 | 一个人看的www免费视频在线观看 | 国内精品九九久久久精品 | 性欧美videos高清精品 | 久久精品成人欧美大片 | 亚洲午夜久久久影院 | 国产乡下妇女做爰 | 色综合久久久久综合一本到桃花网 | 在教室伦流澡到高潮hnp视频 | 永久黄网站色视频免费直播 | 国内少妇偷人精品视频免费 | 亚洲第一无码av无码专区 | 午夜精品一区二区三区的区别 | 水蜜桃av无码 | 强伦人妻一区二区三区视频18 | 日本一卡二卡不卡视频查询 | 丝袜 中出 制服 人妻 美腿 | 久久久久久九九精品久 | 性啪啪chinese东北女人 | 午夜精品久久久久久久久 | 国产无av码在线观看 | 欧美成人午夜精品久久久 | 亚洲日韩av一区二区三区四区 | 国产精品人妻一区二区三区四 | 人人爽人人澡人人人妻 | 亚洲欧美综合区丁香五月小说 | 精品一区二区三区无码免费视频 | 丰满岳乱妇在线观看中字无码 | 日本一区二区更新不卡 | 精品日本一区二区三区在线观看 | 久久99精品久久久久婷婷 | 亚洲 a v无 码免 费 成 人 a v | 国产97人人超碰caoprom | 乱码av麻豆丝袜熟女系列 | 性欧美大战久久久久久久 | 亚洲aⅴ无码成人网站国产app | 无码乱肉视频免费大全合集 | 国产激情综合五月久久 | 四虎国产精品免费久久 | 精品乱码久久久久久久 | 日产精品99久久久久久 | 荫蒂添的好舒服视频囗交 | 领导边摸边吃奶边做爽在线观看 | 色婷婷久久一区二区三区麻豆 | 亚洲成a人一区二区三区 | 无码播放一区二区三区 | 夜精品a片一区二区三区无码白浆 | 伊人久久大香线焦av综合影院 | 男人扒开女人内裤强吻桶进去 | 国产成人一区二区三区在线观看 | 国产精品久久久久久无码 | 精品午夜福利在线观看 | 免费无码午夜福利片69 | 国产在线精品一区二区三区直播 | 日韩视频 中文字幕 视频一区 | 少妇性俱乐部纵欲狂欢电影 | 亚洲成av人片在线观看无码不卡 | 日韩欧美成人免费观看 | 国产女主播喷水视频在线观看 | 国产精品福利视频导航 | 欧美怡红院免费全部视频 | 欧洲极品少妇 | 国产精品久久久久久亚洲毛片 | 熟女体下毛毛黑森林 | 成人一区二区免费视频 | 亚洲自偷自偷在线制服 | 国产一精品一av一免费 | 国产精品二区一区二区aⅴ污介绍 | 中文字幕无码日韩专区 | 搡女人真爽免费视频大全 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产网红无码精品视频 | 黑人玩弄人妻中文在线 | 极品尤物被啪到呻吟喷水 | 亚洲成a人片在线观看无码3d | 亚洲国产精品久久人人爱 | 男女超爽视频免费播放 | 狠狠色色综合网站 | 无人区乱码一区二区三区 | 久久视频在线观看精品 | 色综合久久中文娱乐网 | 国产凸凹视频一区二区 | 色婷婷欧美在线播放内射 | 九九热爱视频精品 | 特级做a爰片毛片免费69 | 亚洲人成无码网www | 九月婷婷人人澡人人添人人爽 | 欧美zoozzooz性欧美 | 黑人大群体交免费视频 | 真人与拘做受免费视频一 | 亚洲精品美女久久久久久久 | 18禁黄网站男男禁片免费观看 | 人妻少妇精品无码专区动漫 | 最近免费中文字幕中文高清百度 | 欧美人妻一区二区三区 | 国产精品a成v人在线播放 | 无码人妻少妇伦在线电影 | 国产精品理论片在线观看 | 日韩欧美中文字幕在线三区 | 国产精品亚洲综合色区韩国 | 精品 日韩 国产 欧美 视频 | 国产午夜无码视频在线观看 | 精品国产青草久久久久福利 | 亚洲精品国偷拍自产在线麻豆 | 内射白嫩少妇超碰 | 欧美人与牲动交xxxx | 久久这里只有精品视频9 | 无遮挡国产高潮视频免费观看 | 精品国产一区二区三区四区 | 成人欧美一区二区三区黑人免费 | 男人的天堂av网站 | 国产麻豆精品精东影业av网站 | 久久精品国产99精品亚洲 | 永久免费观看美女裸体的网站 | 99er热精品视频 | 亚洲精品鲁一鲁一区二区三区 | 亚洲爆乳无码专区 | 成人亚洲精品久久久久 | 日韩人妻无码一区二区三区久久99 | 色欲综合久久中文字幕网 | 国产成人精品三级麻豆 | 77777熟女视频在线观看 а天堂中文在线官网 | 精品久久久中文字幕人妻 | 久久久精品456亚洲影院 | 久久久中文字幕日本无吗 | 97精品国产97久久久久久免费 | 性色欲情网站iwww九文堂 | 亚洲精品午夜无码电影网 | 国产午夜无码视频在线观看 | 中文精品无码中文字幕无码专区 | 久久 国产 尿 小便 嘘嘘 | 国产乡下妇女做爰 | 一区二区传媒有限公司 | 亚洲aⅴ无码成人网站国产app | 暴力强奷在线播放无码 | 爆乳一区二区三区无码 | 在线亚洲高清揄拍自拍一品区 | 亚洲午夜无码久久 | 玩弄少妇高潮ⅹxxxyw | 日日碰狠狠躁久久躁蜜桃 | 亚洲精品综合五月久久小说 | 国产舌乚八伦偷品w中 | 成人性做爰aaa片免费看 | 人妻无码αv中文字幕久久琪琪布 | 男女下面进入的视频免费午夜 | 日本一区二区三区免费播放 | 又大又硬又黄的免费视频 | 特大黑人娇小亚洲女 | 成熟妇人a片免费看网站 | 波多野结衣av在线观看 | 欧美人妻一区二区三区 | 婷婷综合久久中文字幕蜜桃三电影 | 一本加勒比波多野结衣 | 亚洲精品国产精品乱码视色 | 对白脏话肉麻粗话av | 亚洲人亚洲人成电影网站色 | 久久人妻内射无码一区三区 | 中文亚洲成a人片在线观看 | 红桃av一区二区三区在线无码av | 国产av人人夜夜澡人人爽麻豆 | 日本熟妇人妻xxxxx人hd | 丰满少妇女裸体bbw | 2020久久超碰国产精品最新 | 精品国产一区二区三区av 性色 | 特级做a爰片毛片免费69 | 国产亚洲精品精品国产亚洲综合 | a片在线免费观看 | 亚洲国产成人av在线观看 | 亚洲精品成a人在线观看 | 欧美黑人性暴力猛交喷水 | 欧美一区二区三区 | 18禁黄网站男男禁片免费观看 | 亚洲男人av天堂午夜在 | 国产绳艺sm调教室论坛 | 人妻天天爽夜夜爽一区二区 | 玩弄人妻少妇500系列视频 | 欧洲欧美人成视频在线 | 日本精品少妇一区二区三区 | 波多野结衣av一区二区全免费观看 | 在线欧美精品一区二区三区 | 久久午夜无码鲁丝片 | 国产av久久久久精东av | 伊人色综合久久天天小片 | 亚洲人成网站色7799 | 国产人妻精品一区二区三区 | 大乳丰满人妻中文字幕日本 | 久久久国产一区二区三区 | 亚洲爆乳大丰满无码专区 | 日本精品久久久久中文字幕 | 免费无码av一区二区 | 性开放的女人aaa片 | 亚洲熟熟妇xxxx | 97无码免费人妻超级碰碰夜夜 | 中文字幕人妻无码一区二区三区 | 日日干夜夜干 | 久久亚洲中文字幕无码 | 成人性做爰aaa片免费看 | 漂亮人妻洗澡被公强 日日躁 | 无码国内精品人妻少妇 | 综合激情五月综合激情五月激情1 | 久久久久国色av免费观看性色 | 成人精品天堂一区二区三区 | 久久久久久久久蜜桃 | 久久综合狠狠综合久久综合88 | 偷窥日本少妇撒尿chinese | 日韩人妻无码一区二区三区久久99 | 青草青草久热国产精品 | 亚洲精品久久久久久久久久久 | 97久久超碰中文字幕 | 国产精品无套呻吟在线 | 欧美午夜特黄aaaaaa片 | 宝宝好涨水快流出来免费视频 | 欧美激情一区二区三区成人 | 国内精品久久久久久中文字幕 | 久久久中文字幕日本无吗 | 久精品国产欧美亚洲色aⅴ大片 | 日本va欧美va欧美va精品 | 小泽玛莉亚一区二区视频在线 | 麻花豆传媒剧国产免费mv在线 | 少妇太爽了在线观看 | 国产精品怡红院永久免费 | 精品熟女少妇av免费观看 | 狂野欧美性猛交免费视频 | 成 人 网 站国产免费观看 | 蜜臀aⅴ国产精品久久久国产老师 | 欧美自拍另类欧美综合图片区 | 中文字幕人妻丝袜二区 | 荫蒂被男人添的好舒服爽免费视频 | 人妻夜夜爽天天爽三区 | 亚洲欧洲中文日韩av乱码 | аⅴ资源天堂资源库在线 | 亚洲高清偷拍一区二区三区 | 欧美老熟妇乱xxxxx | 欧美xxxxx精品 | 老熟女重囗味hdxx69 | 久久久国产精品无码免费专区 | 国产极品美女高潮无套在线观看 | 国产精品久久久久久亚洲影视内衣 | 亚洲一区av无码专区在线观看 | 国产sm调教视频在线观看 | 精品厕所偷拍各类美女tp嘘嘘 | 图片小说视频一区二区 | 国产人妻久久精品二区三区老狼 | 曰本女人与公拘交酡免费视频 | 久久精品国产99久久6动漫 | 伊人久久婷婷五月综合97色 | 人妻人人添人妻人人爱 | 精品一区二区不卡无码av | 免费观看的无遮挡av | 欧洲vodafone精品性 | 夫妻免费无码v看片 | 国产午夜福利亚洲第一 | 成年美女黄网站色大免费视频 | 国产亚洲精品精品国产亚洲综合 | 国产乱人无码伦av在线a | 人人妻人人澡人人爽人人精品 | 高潮毛片无遮挡高清免费视频 | 熟妇人妻无码xxx视频 | 强开小婷嫩苞又嫩又紧视频 | 国产av剧情md精品麻豆 | 日欧一片内射va在线影院 | 成人无码精品1区2区3区免费看 | 亚洲欧美精品伊人久久 | 亚洲男人av香蕉爽爽爽爽 | 免费人成在线观看网站 | 欧美精品免费观看二区 | 青青草原综合久久大伊人精品 | 亚洲一区二区三区四区 | 国产精品视频免费播放 | 99精品视频在线观看免费 | 欧美人与动性行为视频 | 久久精品国产日本波多野结衣 | 欧美野外疯狂做受xxxx高潮 | 99riav国产精品视频 | 亚洲成av人片天堂网无码】 | 国产两女互慰高潮视频在线观看 | 国产乱码精品一品二品 | 午夜丰满少妇性开放视频 | 久久精品国产精品国产精品污 | 久久久精品国产sm最大网站 | 内射后入在线观看一区 | 亚洲gv猛男gv无码男同 | 精品国偷自产在线 | 精品人妻人人做人人爽夜夜爽 | 色婷婷久久一区二区三区麻豆 | 丰腴饱满的极品熟妇 | 欧美日韩人成综合在线播放 | 特级做a爰片毛片免费69 | 成人免费视频一区二区 | 国产va免费精品观看 | 国产av一区二区三区最新精品 | 精品亚洲韩国一区二区三区 | 一本大道久久东京热无码av | 亚洲国产精品一区二区第一页 | 精品无码一区二区三区爱欲 | 欧美老熟妇乱xxxxx | 色综合视频一区二区三区 | 精品 日韩 国产 欧美 视频 | 亚洲中文字幕无码中字 | 97se亚洲精品一区 | 国产亚洲精品久久久久久国模美 | 女人被男人爽到呻吟的视频 | 国产午夜亚洲精品不卡下载 | 无码国产激情在线观看 | 天堂а√在线中文在线 | 亚洲日韩av一区二区三区四区 | 亚洲精品国产a久久久久久 | 国产人成高清在线视频99最全资源 | 日韩欧美中文字幕公布 | √天堂资源地址中文在线 | 亚洲爆乳无码专区 | 久久久久久av无码免费看大片 | 水蜜桃av无码 | 中文字幕无码免费久久9一区9 | 日韩人妻系列无码专区 | 亚洲欧洲日本无在线码 | 色综合久久网 | 中文字幕无码热在线视频 | 亚洲欧洲中文日韩av乱码 | 色老头在线一区二区三区 | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲国产欧美在线成人 | 色婷婷综合激情综在线播放 | 国产免费久久精品国产传媒 | 久久亚洲日韩精品一区二区三区 | 在线播放无码字幕亚洲 | 日韩精品乱码av一区二区 | 国产精品99爱免费视频 | 午夜精品久久久内射近拍高清 | 国产精品久久久久影院嫩草 | 国产精品美女久久久网av | 男女猛烈xx00免费视频试看 | 久久午夜无码鲁丝片午夜精品 | 久久久久成人片免费观看蜜芽 | 国产在线精品一区二区三区直播 | 国产免费无码一区二区视频 | 双乳奶水饱满少妇呻吟 | 色五月丁香五月综合五月 | 国产成人无码av片在线观看不卡 | 日本又色又爽又黄的a片18禁 | 麻豆国产97在线 | 欧洲 | 亚洲成在人网站无码天堂 | 在教室伦流澡到高潮hnp视频 | 99re在线播放 | 久久久久免费看成人影片 | 成人欧美一区二区三区 | 无码人妻出轨黑人中文字幕 | 久久97精品久久久久久久不卡 | 婷婷色婷婷开心五月四房播播 | 成年美女黄网站色大免费视频 | 国产suv精品一区二区五 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 女人被男人躁得好爽免费视频 | 曰韩无码二三区中文字幕 | yw尤物av无码国产在线观看 | 九一九色国产 | 久久久久久av无码免费看大片 | 久久人人爽人人爽人人片av高清 | 精品无码国产自产拍在线观看蜜 | 日产国产精品亚洲系列 | 亚洲一区二区三区香蕉 | 少妇厨房愉情理9仑片视频 | 色婷婷欧美在线播放内射 | 亚洲娇小与黑人巨大交 | 午夜理论片yy44880影院 | 日韩欧美成人免费观看 | 国产精品资源一区二区 | a片免费视频在线观看 | 午夜精品久久久内射近拍高清 | 波多野结衣av在线观看 | 网友自拍区视频精品 | 狠狠色丁香久久婷婷综合五月 | 国产av无码专区亚洲awww | 亚洲精品一区三区三区在线观看 | 啦啦啦www在线观看免费视频 | 久久精品中文字幕大胸 | 日本一区二区三区免费播放 | 国产热a欧美热a在线视频 | 黑森林福利视频导航 | 亚洲国产日韩a在线播放 | 国产精品久久国产精品99 | 国产精品久久久久久亚洲影视内衣 | 日韩av激情在线观看 | 亚洲色在线无码国产精品不卡 | 无码人妻精品一区二区三区不卡 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 台湾无码一区二区 | 99久久久国产精品无码免费 | 人妻与老人中文字幕 | 色综合久久久无码网中文 | 精品熟女少妇av免费观看 | 婷婷色婷婷开心五月四房播播 | 日本丰满护士爆乳xxxx | 久久久无码中文字幕久... | 精品无码国产自产拍在线观看蜜 | 国产av无码专区亚洲a∨毛片 | 男女性色大片免费网站 | 精品久久综合1区2区3区激情 | 久久久久成人精品免费播放动漫 | 国产美女精品一区二区三区 | 亚洲午夜无码久久 | 青青久在线视频免费观看 | av无码不卡在线观看免费 | 精品成在人线av无码免费看 | 国产精品久久久一区二区三区 | 亚洲另类伦春色综合小说 | 日韩 欧美 动漫 国产 制服 | 免费网站看v片在线18禁无码 | 久久五月精品中文字幕 | 国产后入清纯学生妹 | 一区二区三区乱码在线 | 欧洲 | 人妻互换免费中文字幕 | 亚洲阿v天堂在线 | 999久久久国产精品消防器材 | 无码帝国www无码专区色综合 | 又色又爽又黄的美女裸体网站 | 亚洲春色在线视频 | 亚洲天堂2017无码 | 久久久久国色av免费观看性色 | 强奷人妻日本中文字幕 | 性色av无码免费一区二区三区 | 欧美乱妇无乱码大黄a片 | 亚洲国产成人av在线观看 | 国产精品美女久久久网av | 亚洲无人区午夜福利码高清完整版 | 日日摸日日碰夜夜爽av | 55夜色66夜色国产精品视频 | 色偷偷人人澡人人爽人人模 | 亚洲色大成网站www国产 | 大屁股大乳丰满人妻 | 成在人线av无码免费 | 熟女俱乐部五十路六十路av | 久久99精品国产麻豆蜜芽 | av无码不卡在线观看免费 | 国产精品亚洲综合色区韩国 | 国产成人一区二区三区在线观看 | 精品熟女少妇av免费观看 | 精品日本一区二区三区在线观看 | 久久国产精品二国产精品 | 国产性生大片免费观看性 | 亚洲性无码av中文字幕 | 人妻无码αv中文字幕久久琪琪布 | 亚洲精品无码人妻无码 | 精品aⅴ一区二区三区 | 亚洲成在人网站无码天堂 | 国产午夜无码视频在线观看 | 亚洲区小说区激情区图片区 | 大屁股大乳丰满人妻 | 2019午夜福利不卡片在线 | 国产成人无码a区在线观看视频app | 亚洲色大成网站www | 妺妺窝人体色www婷婷 | 久久国内精品自在自线 | 欧美丰满熟妇xxxx性ppx人交 | 日韩欧美成人免费观看 | 欧美zoozzooz性欧美 | 国产精品亚洲一区二区三区喷水 | 玩弄人妻少妇500系列视频 | 亚洲精品成人福利网站 | 国产精品igao视频网 | 国产一区二区三区四区五区加勒比 | 国产亚洲精品久久久久久久 | 无码人妻出轨黑人中文字幕 | 高潮喷水的毛片 | 97夜夜澡人人爽人人喊中国片 | 99精品无人区乱码1区2区3区 | 一区二区三区乱码在线 | 欧洲 | √8天堂资源地址中文在线 | 日本丰满熟妇videos | 大地资源网第二页免费观看 | 老熟妇仑乱视频一区二区 | 国内精品久久久久久中文字幕 | www一区二区www免费 | 2020久久香蕉国产线看观看 | 国产高清不卡无码视频 | 欧美一区二区三区视频在线观看 | 国产极品美女高潮无套在线观看 | 国产精品美女久久久久av爽李琼 | 中文无码精品a∨在线观看不卡 | 玩弄人妻少妇500系列视频 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久青草影院在线观看国产 | 熟女少妇在线视频播放 | 四虎4hu永久免费 | 亚拍精品一区二区三区探花 | 久久午夜无码鲁丝片午夜精品 | 东京热无码av男人的天堂 | 国内揄拍国内精品人妻 | 亚洲色在线无码国产精品不卡 | 国产亚洲精品久久久久久大师 | 欧美野外疯狂做受xxxx高潮 | 亚洲成色在线综合网站 | 久久久精品欧美一区二区免费 | 国产精品理论片在线观看 | 国产成人无码午夜视频在线观看 | 成在人线av无码免观看麻豆 | 动漫av网站免费观看 | 成人无码视频免费播放 | 亚洲 a v无 码免 费 成 人 a v | 亚洲欧洲日本无在线码 | 99久久精品日本一区二区免费 | 久热国产vs视频在线观看 | 最近免费中文字幕中文高清百度 | 日日橹狠狠爱欧美视频 | 国产精品久久国产三级国 | 无码纯肉视频在线观看 | 99riav国产精品视频 | 久热国产vs视频在线观看 | 久久99热只有频精品8 | 中文字幕无码日韩欧毛 | 亚洲日韩av一区二区三区四区 | 蜜桃视频韩日免费播放 | 午夜精品久久久内射近拍高清 | 国产精品毛片一区二区 | 少妇无码一区二区二三区 | 亚洲午夜福利在线观看 | 四虎国产精品一区二区 | av香港经典三级级 在线 | 四虎影视成人永久免费观看视频 | 久久伊人色av天堂九九小黄鸭 | 97人妻精品一区二区三区 | 国产成人无码av一区二区 | 丰满肥臀大屁股熟妇激情视频 | 波多野结衣一区二区三区av免费 | 欧美性黑人极品hd | 久久久中文字幕日本无吗 | 亚洲熟妇色xxxxx亚洲 | 欧美日韩视频无码一区二区三 | 亚洲精品中文字幕久久久久 | 日欧一片内射va在线影院 | 亚洲 欧美 激情 小说 另类 | а√资源新版在线天堂 | 国产va免费精品观看 | 国产亚洲精品久久久闺蜜 | 中文字幕av日韩精品一区二区 | 98国产精品综合一区二区三区 | 中文字幕av日韩精品一区二区 | 欧美熟妇另类久久久久久多毛 | 国产精品沙发午睡系列 | 中文字幕无码av激情不卡 | 性欧美牲交xxxxx视频 | 无码人妻少妇伦在线电影 | 国产精品美女久久久久av爽李琼 | 国产精华av午夜在线观看 | 午夜精品一区二区三区的区别 | 欧美人与物videos另类 | 国产激情综合五月久久 | 国产精品99久久精品爆乳 | 中文字幕精品av一区二区五区 | 97夜夜澡人人双人人人喊 | 国产午夜无码精品免费看 | 少女韩国电视剧在线观看完整 | 男女性色大片免费网站 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 成人一在线视频日韩国产 | 亚洲gv猛男gv无码男同 | 国产舌乚八伦偷品w中 | 搡女人真爽免费视频大全 | 日日麻批免费40分钟无码 | 亚洲高清偷拍一区二区三区 | 捆绑白丝粉色jk震动捧喷白浆 | 日本肉体xxxx裸交 | 亚洲精品国偷拍自产在线麻豆 | 欧洲vodafone精品性 | 夜夜高潮次次欢爽av女 | 中文字幕无码免费久久99 | 国产av一区二区三区最新精品 | 激情人妻另类人妻伦 | 国产后入清纯学生妹 | 国产国语老龄妇女a片 | 日本精品久久久久中文字幕 | 国产激情一区二区三区 | √天堂中文官网8在线 | 熟女少妇人妻中文字幕 | 色婷婷久久一区二区三区麻豆 | 午夜福利不卡在线视频 | 久久国产精品精品国产色婷婷 | 亚洲色大成网站www | 成熟人妻av无码专区 | 女高中生第一次破苞av | 欧美怡红院免费全部视频 | 永久免费观看国产裸体美女 | 精品无码国产一区二区三区av | 国产精品成人av在线观看 | 内射欧美老妇wbb | 欧美成人高清在线播放 | 撕开奶罩揉吮奶头视频 | 麻豆国产人妻欲求不满 | 国产无套内射久久久国产 | 99久久精品午夜一区二区 | 无遮挡国产高潮视频免费观看 | 精品亚洲韩国一区二区三区 | 精品国产一区二区三区四区在线看 | 国产明星裸体无码xxxx视频 | 亚洲国产日韩a在线播放 | 久久综合香蕉国产蜜臀av | 国产午夜亚洲精品不卡 | 欧美丰满熟妇xxxx性ppx人交 | 欧美丰满熟妇xxxx | 野外少妇愉情中文字幕 | 国产精品99久久精品爆乳 | 一本大道久久东京热无码av | 国产艳妇av在线观看果冻传媒 | 亚洲国产欧美日韩精品一区二区三区 | 色综合天天综合狠狠爱 | 日本一区二区更新不卡 | 欧美黑人巨大xxxxx | 亚洲成在人网站无码天堂 | 成人亚洲精品久久久久 | 水蜜桃亚洲一二三四在线 | 欧美兽交xxxx×视频 | 98国产精品综合一区二区三区 | 精品久久综合1区2区3区激情 | 天天躁日日躁狠狠躁免费麻豆 | 欧美精品无码一区二区三区 | 天堂一区人妻无码 | 亚洲 激情 小说 另类 欧美 | 人妻无码αv中文字幕久久琪琪布 | 97人妻精品一区二区三区 | 无套内谢的新婚少妇国语播放 | 久久综合给久久狠狠97色 | 亚洲人成人无码网www国产 | 婷婷色婷婷开心五月四房播播 | 成人亚洲精品久久久久 | 亚洲国产精品毛片av不卡在线 | 乱人伦人妻中文字幕无码久久网 | 欧洲美熟女乱又伦 | 老子影院午夜精品无码 | 亚洲国产综合无码一区 | 小鲜肉自慰网站xnxx | 精品无码国产自产拍在线观看蜜 | 99国产精品白浆在线观看免费 | 国产精品理论片在线观看 | 国产精品99爱免费视频 | 国产精品怡红院永久免费 | 免费人成网站视频在线观看 | 久青草影院在线观看国产 | 国产成人无码区免费内射一片色欲 | 中文字幕人妻无码一区二区三区 | 国产无遮挡吃胸膜奶免费看 | 无码人妻精品一区二区三区不卡 | 99久久久国产精品无码免费 | 成人无码精品1区2区3区免费看 | 99久久久无码国产aaa精品 | 天堂а√在线中文在线 | 午夜丰满少妇性开放视频 | 国内精品一区二区三区不卡 | 狠狠躁日日躁夜夜躁2020 | 亚洲精品中文字幕乱码 | 色综合天天综合狠狠爱 | 高清不卡一区二区三区 | 国产电影无码午夜在线播放 | 精品国产麻豆免费人成网站 | 狠狠躁日日躁夜夜躁2020 | 天天摸天天碰天天添 | 亚洲国产综合无码一区 | 国语精品一区二区三区 | 综合人妻久久一区二区精品 |