|
Matrix排名:7027
排名變化:? ↓6
用戶等級:1
總發貼數:6
總積分(Karma):92
參與分(經驗):32
專家分(威望):5
可用分(財富):130
類型:普通用戶
昵稱:貓米
注冊:2005-12-22
進入ark的部落格
|
以build_for_ejb_templet.xml為示例,講解Ant中常用的元素和任務。
約定: "…"表示這里有很多代碼,未列出
build_for_ejb_templet.xml任務的分為以下幾大部分 i. 開始 ii. 初始化 iii. 定義classpath iv. 為編譯作準備 v. 編譯EJB部分 vi. 編譯WEB部分 vii. 編譯J2EE Application viii. 部署Application ix. 創建組件的API x. 確定build的目標
build_for_ejb_templet.xml的講解
開始 <?xml version="1.0" encoding="UTF-8"?> 講解:encoding="UTF-8"表示XML文件采用UTF-8編碼格式,如果要使用GBK編碼,需定義為encodeing="GBK"。
<!--?? ??Build file for 'componentName'?? ??Creation date : $Date: yyyy-m-d $?? ??Updated date : $Date: yyyy-m-d $?? ??Author:??developerName ??Copyright 2002 CompanyName, Inc. All rights reserved.?? -->?? 講解:此部分為文件內容的簡介,包括文件名稱、創建日期、最后修改日期、創建文件的作者、版權。 componentName 表示 文件名稱 yyyy-m-dd 表示 創建日期、最后修改日期的格式,如2002-5-1 developerName 表示 創建文件的作者 CompanyName 表示 公司名稱或URL
<project name="componentName" default="core" basedir="."> … </project> 講解:此部分定義了一個名稱為componentName的項目元素,缺省的任務為"core"任務,根目錄為當前目錄。componentName表示組件的名稱,這里指EJB的名稱。
初始化 <target name="init"> … </target> 講解:此部分用于初始化所有的變量
<property file="../../build.properties" /> 講解:導入項目根目錄下build.properties中的全局變量,開發人員也可以在此文件中重新定義全局變量。
<property name="jboss.lib" value="${jboss.home}/lib" />?? <property name="jboss.client" value="${jboss.home}/client" />?? <property name="jboss.deploy" value="${jboss.home}/server/${jboss.configuration}/deploy" />?? … <property name="jboss.dir"??????value="${jboss.home}" />?? … <property name="deploy.ormi"???? value=""/>?? <property name="deploy.username" value=""/>?? <property name="deploy.password" value=""/> 講解:定義和Jboss Application Server有關的變量,包括lib目錄、client目錄、 deploy目錄和J2EE Application部署要用到的一些變量。
<property name="name"??value="componentName"/>?? 講解:定義組件的名稱
<property name="src.dir" value="${basedir}/src"/>?? 講解:定義源代碼目錄路徑
<property name="etc.dir" value="${basedir}/etc"/>?? 講解:定義資源目錄路徑
<property name="lib.dir" value="${basedir}/lib"/>?? 講解:定義庫目錄路徑
<property name="build.dir" value="${basedir}/build"/>?? 講解:定義build目錄路徑
<property name="src.main.dir" value="${src.dir}/main"/> 講解:定義源代碼的主目錄路徑
<property name="src.ejb.dir" value="${src.main.dir}/ejb"/>?? 講解:定義存放EJB的源代碼目錄路徑
<property name="src.javabean.dir" value="${src.main.dir}/javabean"/> 講解:定義存放JavaBean的源代碼目錄路徑
<property name="src.servlet.dir" value="${src.main.dir}/servlet"/> 講解:定義存放Servlet的源代碼目錄路徑
<property name="src.web.dir" value="${src.main.dir}/web"/>?? 講解:定義存放WEB部分文件(包括JSP程序、HTML文件、圖片、CSS文件、JS腳本等)的目錄路徑
<property name="javadoc.dir" value="${lib.dir}/docs/api"/> 講解:定義存放組件API的開發文件目錄路徑
<property name="ejb-classes.dest" value="${lib.dir}/ejb"/>?? 講解:定義存放EJB的編譯代碼目錄路徑
<property name="javabean-classes.dest" value="${lib.dir}/javabean"/>?? 講解:定義存放JavaBean的編譯代碼目錄路徑
<property name="web-classes.dest" value="${lib.dir}/web/WEB-INF/classes" /> 講解:定義WEB目錄的類目錄路徑
<property name="web-lib.dest" value="${lib.dir}/web/WEB-INF/lib" />?? 講解:定義WEB目錄的庫目錄名稱
<property name="pkg-dist.name" value="${name}-pkg"/>?? 講解:定義壓縮文檔的名稱
<property name="ProjectName.components.home" value="../../components" />?? 講解:定義項目的組件目錄路徑
<!-- Define componentName Component --> 講解:這段為注釋,說明以下是定義當前組件的變量
<property name="ProjectName.componentName.name" value="componentName"/> 講解:定義當前組件的名稱
<property name="ProjectName.componentName.home" value="${ProjectName.components.home}/componentName"/> 講解:定義當前組件的目錄路徑
<property name="ProjectName.componentName.classbindir" value="${ProjectName.componentName.home}/lib/ejb"/> 講解:定義當前組件的EJB編譯目錄路徑 <property name="ProjectName.componentName.ejbjar" value="${ProjectName.componentName.home}/build/componentName-ejb.jar"/> 講解:定義當前組件內的EJB包的路徑
<property name="ProjectName.componentName.ejbjar.client" value="${ProjectName.componentName.home}/build/componentName-ejb-client.jar"/> 講解:定義當前組件內的EJB客戶端包的路徑
<!-- Define referencesComponentName Component --> 講解:這段為注釋,說明以下是定義引入其它組件的變量
<property name="ProjectName.referencesComponentName.name" value="referencesComponentName"/> 講解:定義指定組件的名稱
<property name="ProjectName.referencesComponentName.home" value="${ProjectName.components.home}/referencesComponentName"/> 講解:定義指定組件的目錄路徑
<property name="ProjectName.referencesComponentName.classbindir" value="${ProjectName.referencesComponentName.home}/lib/ejb"/> 講解:定義指定組件的EJB編譯目錄路徑
<property name="ProjectName.referencesComponentName.ejbjar" value="${ProjectName.referencesComponentName.home} /build/referencesComponentName-ejb.jar"/> 講解:定義指定組件內的EJB包的路徑
<property name="ProjectName.referencesComponentName.ejbjar.client" value="${ProjectName.referencesComponentName.home} /build/referencesComponentName-ejb-client.jar"/> 講解:定義指定組件內的EJB客戶端包的路徑
<property name="build.classpath" value="${jboss.client}/jboss-j2ee.jar:${jboss.client} /jnp-client.jar:${jboss.client}/jnp-client.jar:${jboss.client} /jbossmq-client.jar:${jboss.client}/jbosssx-client.jar:${jboss.client} /concurrent.jar:${jboss.client}/jaas.jar:${jboss.lib} /jboss-jmx.jar:${jboss.home}/server/${jboss.configuration} /lib/jbosssx.jar:${jboss.home}/server/${jboss.configuration} /lib/mail.jar:${servlet-lib.path}:${ejb-classes.dest}: ${web-classes.dest}:${ProjectName.componentName.classbindir}: ${ProjectName.componentName.ejbjar.client}: ${ProjectName.referencesComponentName.classbindir}: ${ProjectName.referencesComponentName.ejbjar.client}" /> 講解:定義classpath,編譯bean時要用到。這是定義classpath的一種方法,下面還有另一種方法。
定義classpath <!-- ================================================================== -->?? ??<!-- Define the classpath for compile the component???????????????????? --> ??<!-- ================================================================== -->?? ??<path id="base.path">?? ??????<pathelement location="${jboss.client}/jboss-j2ee.jar" />?? ??????<pathelement location="${jboss.client}/jnp-client.jar" />?? ??????<pathelement location="${jboss.client}/jbossmq-client.jar" />?? ??????<pathelement location="${jboss.client}/jbosssx-client.jar" />?? ??????<pathelement location="${jboss.client}/concurrent.jar" /> ??????<pathelement location="${jboss.client}/jaas.jar" />?? ??????<pathelement location="${jboss.lib}/jboss-jmx.jar" />?? ??????<pathelement location="${jboss.home}/server/${jboss.configuration}/lib/jbosssx.jar" />?? ??????<pathelement location="${jboss.home}/server/${jboss.configuration}/lib/mail.jar" />?? </path>?? 講解:此段定義應用服務器中包文件,如支持ejb的jboss-j2ee.jar、支持客戶端程序的jnp-client.jar、jbossmq-client.jar、jbosssx-client.jar、支持JavaMail的mail.jar等。
?? <path id="project.path">?? ??????<path refid="base.path"/> ??????<pathelement location="${ProjectName.componentName.classbindir}"/> ??????<pathelement location="${ProjectName.componentName.ejbjar.client}"/> ??????<pathelement location="${ProjectName.referencesComponentName.classbindir}"/> ??????<pathelement location="${ProjectName.referencesComponentName.ejbjar.client}"/> ?? </path>?? 講解:此段定義項目中要用到的包文件。
?? <path id="web.path"> ???????? <path refid="project.path"/> ???????? <pathelement location="${servlet-lib.path}"/> ???????? <pathelement location="${ejb-classes.dest}"/> ?? </path> 講解:此段定義在編譯servlet時的classpath,${ servlet-lib.path }是系統指定的Servlet引擎包。
為編譯作準備工作 <!--=============================================================== -->?? ?? <!-- Removes all created files and directories??????????????????????-->?? ?? <!-- ============================================================== -->?? ?? <target name="clean" depends="init">?? ??????<delete dir="${lib.dir}" />?? ??????<delete dir="${build.dir}" />?? ?? </target> 講解:清除build、lib目錄下的所有文件和目錄。
?? <!-- ================================================================ -->?? ?? <!-- Makes sure the needed directory structure is in place??????????????-->?? ?? <!-- ================================================================ -->?? ?? <target name="prepare" depends="init,clean">?? ??????<mkdir dir="${lib.dir}" />?? ??????<mkdir dir="${lib.dir}/ejb" />?? ??????<mkdir dir="${lib.dir}/ejb/META-INF" />?? ??????<mkdir dir="${lib.dir}/web" />?? ??????<mkdir dir="${lib.dir}/web/WEB-INF" />?? ??????<mkdir dir="${lib.dir}/web/WEB-INF/classes" />?? ??????<mkdir dir="${lib.dir}/web/WEB-INF/lib" />?? ??????<mkdir dir="${lib.dir}/j2ee" />?? ??????<mkdir dir="${lib.dir}/META-INF" />?? ??????<mkdir dir="${lib.dir}/docs/api" /> ??????<mkdir dir="${build.dir}" />?? ?? </target>?? 講解:創建build中要用到的所有目錄,根據需要可以加入自定義的目錄如: ??????<mkdir dir="${lib.dir}/javabean/ " />
編譯EJB部分 <!-- ================================================================ -->?? ?? <!-- Compilation of the EJB part of the application???????????????????? -->?? ?? <!-- ================================================================ -->?? ?? <target name="ejb-classes" depends="prepare">?? ??????<javac srcdir="${src.ejb.dir}"?? ???????????? destdir="${ejb-classes.dest}"?? ???????????? includes="com/**"?? ???????????? classpathref="base.path" /> ?? </target>?? 講解:此小段用來完成編譯ejb和其它help classes。根據需要可以加入一個非常有用的元素: ???????????? encoding="${javac.encoding}"
?? <target name="ejb-meta-inf" depends="prepare">?? ??????<copy file="${etc.dir}/ejb-jar.xml"?? ????????????tofile="${lib.dir}/ejb/META-INF/ejb-jar.xml" />?? ??????<copy file="${etc.dir}/jaws.xml"?? ????????????tofile="${lib.dir}/ejb/META-INF/jaws.xml" />?? ??????<copy file="${etc.dir}/jboss.xml"?? ????????????tofile="${lib.dir}/ejb/META-INF/jboss.xml" />?? ??????<copy file="${etc.dir}/jbosscmp-jdbc.xml"?? ????????????tofile="${lib.dir}/ejb/META-INF/jbosscmp-jdbc.xml" />?? ?? </target> 講解:此小段用來拷貝EJB部署文件,在JAS中EJB部署文件有jaws.xml、jboss.xml、jbosscmp-jdbc.xml。
?? <target name="ejb-jar" depends="ejb-classes,ejb-meta-inf">?? ??????<jar jarfile="${build.dir}/${name}-ejb.jar"?? ?????????? basedir="${lib.dir}/ejb" />?? ?? </target>?? 講解:此小段用來把class和部署文件壓縮成包文件,這個包文件就是一個EJB組件。
?? <target name="ejbclientjar" depends="ejb-jar,web-classes"> ??????<copy file="${ProjectName.referencesComponentName.home}/build/ ${ProjectName.referencesComponentName.name}-ejb-client.jar"?? ??????????tofile="${build.dir}/${ProjectName.referencesComponentName.name} ??????????-ejb-client.jar" />?? ??????<jar jarfile="${build.dir}/${name}-ejb-client.jar"?? ?????????? basedir="${lib.dir}/ejb" ?????????? excludes="com/ProjectName/componentName/ejb/ComponentNameEJB.class" />?? ?? </target> 講解:此小段用來把class和部署文件壓縮成包文件,以支持客戶端運行。
編譯WEB部分 <!-- ================================================================== -->?? ?? <!-- Compilation of the web part of the application???????????????????? -->?? ?? <!-- ================================================================== -->?? ?? <target name="web-classes" depends="prepare,ejb-jar">?? ??????<javac srcdir="${src.servlet.dir}"?? ???????????? destdir="${lib.dir}/web/WEB-INF/classes"?? ???????????? includes="com/**"?? ???????????? classpath="${build.classpath}" />?? ?? </target>?? 講解:此小段用來完成編譯servlet。
?? <target name="web-web-inf" depends="prepare"> ??????<copy file="${etc.dir}/jboss-web.xml"?? ????????????tofile="${lib.dir}/web/WEB-INF/jboss-web.xml" />?? ??????<copy file="${etc.dir}/web.xml"?? ????????????tofile="${lib.dir}/web/WEB-INF/web.xml" />?? ?? </target> 講解:此小段用來拷貝WEB部署文件,在JAS中WEB部署文件有jboss-web.xml。
?? <target name="war" depends="web-classes,web-web-inf">?? ??????<copy todir="${lib.dir}/web" > ?????? <fileset dir="${src.web.dir}"/> ??????</copy> ??????<copy file="${build.dir}/${ProjectName.referencesComponentName.name}-ejb-client.jar"?? tofile="${lib.dir}/web/WEB-INF/lib/${ProjectName.referencesComponentName.name} -ejb-client.jar" />???? ???? <jar jarfile="${build.dir}/${name}-web.war"?? ?????????? basedir="${lib.dir}/web" />?? ?? </target> 講解:此小段用來把所有的JSP程序、Html、Css、圖片和部署文件等壓縮成WAR文件。
編譯J2EE Application <!-- ================================================================== -->?? ?? <!-- Compilation of the complete J2EE application (both web and EJB)????-->?? ?? <!-- ================================================================== -->?? ?? <target name="j2ee-meta-inf" depends="prepare">?? ??????<copy file="${etc.dir}/application.xml"?? ????????????tofile="${lib.dir}/j2ee/META-INF/application.xml" />?? ?? </target>?? 講解:此小段用來拷貝Application的部署文件。
?? <target name="ear" depends="ejb-jar,war,j2ee-meta-inf">?? ??????<copy file="${build.dir}/${name}-ejb.jar"?? ????????????tofile="${lib.dir}/j2ee/${name}-ejb.jar" />?? ??????<copy file="${build.dir}/${name}-web.war"?? ????????????tofile="${lib.dir}/j2ee/${name}-web.war" />?? ??????<jar jarfile="${build.dir}/${name}.ear"?? ?????????? basedir="${lib.dir}/j2ee" />?? ?? </target>?? 講解:此小段用來把EJB組件、支持客戶端運行的包和部署文件壓縮成EAR文件,它就是一個J2EE Application。這里要說明,在進行build時,根據需要可以不生成EAR文件。
部署Application <!-- ================================================================ --> ?? <!-- Deploy EAR file?????????????????????????????????????????????????? --> ?? <!-- ================================================================ --> ?? <target name="deploy-server" depends="ear,war">?? ??????<copy todir="${jboss.deploy}">?? ???????? <fileset dir="${build.dir}" includes="*.ear">?? ???????? </fileset>?? ??????</copy>?? ?? </target>?? 講解:此小段用來部署Application,在JAS3.0中${jboss.deploy}是JAS的熱部署目錄。
創建組件的API <!-- =================================================================== --> ?? <!-- Create class and package usage pages????????????????????????????????--> ?? <!-- =================================================================== --> ?? <target name="docs" depends="init"> ????<javadoc locale="${javadoc.locale}" packagenames="${package.names}.${name}.*"?? ???????????? destdir="${javadoc.dir}"?? ???????????? classpath="${build.classpath}" ???????????? encoding="${javadoc.encoding}" ???????????? author="${javadoc.author}" version="${javadoc.version}" use="${javadoc.usage}"?? ???????????? windowtitle="${project.name} ${name} Component API" ???????????? doctitle="${project.name} ${name} Component"?? ???????????? bottom="Copyright ${sign.copyright} ${project.date} ${company.signature}. All Rights Reserved.">?? <classpath > ????????<pathelement path="${lib.dir}/ejb"/>?? ??????</classpath> ??????<sourcepath> ????????<pathelement path="${src.main.dir}/ejb"/> ??????</sourcepath> ????</javadoc> ?? </target> 講解:此小段用來創建組件的API。這里強烈要求類設計人員和編碼人員按照Javadoc定義的標簽對源代碼進行注釋。
確定build的目標 <target name="startbanner"> ??????<echo>+---------------------------------------+</echo> ??????<echo>+????Building ${name} Component???????? +</echo> ??????<echo>+---------------------------------------+</echo> ?? </target> ?? <target name="endbanner" depends="main" > ??????<echo>+---------------------------------------+</echo> ??????<echo>+????Finished ${name} Component???????? +</echo> ??????<echo>+---------------------------------------+</echo> ?? </target> ?? <target name="main" depends="startbanner, ejb-jar, ejbclientjar" /> ?? <target name="main2" depends="startbanner, ejb-jar, ejbclientjar,war" /> ?? <target name="main3" depends="startbanner, ejb-jar, ejbclientjar,war,ear,deploy-server" /> ?? <target name="core" depends="ejb-war" /> ?? <target name="ejb-war" depends="main2,endbanner" /> ?? <target name="deploy" depends="main3,endbanner" /> ?? <target name="all" depends="core, docs" /> 講解:此小段用來確定build的目標。缺省目錄為core,所以在build不加參數時,系統將只生成jar文件和war文件。如果 build時加上參數,系統將根據需要來生成文件,例如:在命令行輸入ant deploy,系統將生成jar文件、war文件、ear文件,同時將ear文件進行部署。
|
|
|
????
|
????????
???? |
|
|
|
|
|
Matrix排名:327
排名變化:? ↓1
用戶等級:4
總發貼數:47
總積分(Karma):661
參與分(經驗):141
專家分(威望):69
可用分(財富):987
類型:論壇版主
注冊:2003-09-05
|
寫的很好 我有些建議: 1.我比較傾向于將所有property定義在include中的build.properties中,而不要放在build.xml中,這樣會使得build.xml比較清晰,而且在部署不同環境時比較有利,只要編寫多個build.properties進行替換就可以了 2.關于外部jar包的問題,我覺得放在一個或多個比較公共性的目錄比較好,這樣在建立classpath的時候比較清晰。例如classpath指向應用服務器的lib路徑(導致必須要有不受控制的外部依賴,一直比較頭痛這個辦法),指向自己的lib路徑,而不是一個jar一個jar的指定。事實上在這里我更加傾向于maven的解決方案(雖然這樣的話,你就需要一個一個jar去指定了,但同時他有了一個版本的維護,相對會有利很多。這里并不是說使用maven好用,我覺得他的問題很大) 3.由于你這個build.xml是屬于開發人員的,所以相對于時間戳,版本號等基本沒有要求,但如果作為正式一些,我建議打上時間戳及版本號 4.關于單元測試的體現!我覺得這個是必須的,包括單元測試報告。至于是否一定要持續集成,我現在還沒有感覺有很強列的要求,主要是指是否一定需要從cvs check和autorun,我覺得可以不考慮。 5.還有就是關于mkdir,我現在覺得放在每一個target中會更加清晰,比放在頂前面好,畢竟這個目錄是屬于這個target的呀 寫的有些亂,只是我自己的使用感覺,希望參考 |
|
|
????
|
????????
???? |
|
|
|
|
|
Matrix排名:57
排名變化:? --
用戶等級:6
總發貼數:182
總積分(Karma):1549
參與分(經驗):700
專家分(威望):58
可用分(財富):2002
類型:普通用戶
昵稱:漢尼
來自:廣州
注冊:2003-11-21
進入hanny的部落格
|
同意樓上的 |
|
|
????
|
????????
???? |
|
|
|
|
|
Matrix排名:142
排名變化:? ↓1
用戶等級:5
總發貼數:139
總積分(Karma):940
參與分(經驗):572
專家分(威望):35
可用分(財富):1010
類型:普通用戶
注冊:2005-12-16
|
Please don't read this "[轉帖]ant的build.xml文件詳解備忘"
It is really not a good example for you to learn ant.
Please read ant menual, much easier to read and easier to understand.
I have seen too many people on Chinese forums try to be teacher of everyone, this is a typical example.
Sorry to tell you the truth... |
|
|
????
|
????????
???? |
|
|
|
|
|
Matrix排名:142
排名變化:? ↓1
用戶等級:5
總發貼數:139
總積分(Karma):940
參與分(經驗):572
專家分(威望):35
可用分(財富):1010
類型:普通用戶
注冊:2005-12-16
|
Here is ant manual, when you download ant, ant manual is with it. Therefore, it is on your figure tip!!!!
http://ant.apache.org/manual/index.html
Here is an ANT faq. http://bobcat.webappcabaret.net/javachina/faq/ant_01.htm
|
|
|
????
|
????????
???? |
|
|
|
|
|
Matrix排名:639
排名變化:? ↓2
用戶等級:4
總發貼數:50
總積分(Karma):439
參與分(經驗):149
專家分(威望):43
可用分(財富):585
類型:普通用戶
注冊:2004-08-12
進入xingxing44的部落格
|
|
|
????
|
????????
???? |
|
|
|
|
|
Matrix排名:51
排名變化:? --
用戶等級:6
總發貼數:215
總積分(Karma):1607
參與分(經驗):926
專家分(威望):54
可用分(財富):1810
類型:普通用戶
注冊:2005-11-13
|
|
|
????
|
????????
???? |
|
|
|
|
|
Matrix排名:6399
排名變化:? ↓5
用戶等級:1
總發貼數:3
總積分(Karma):98
參與分(經驗):12
專家分(威望):0
可用分(財富):180
類型:普通用戶
注冊:2004-07-07
|
|
|
????
|
????????
???? |
|
|
|
|
|
Matrix排名:1865
排名變化:? ↑65
用戶等級:3
總發貼數:4
總積分(Karma):246
參與分(經驗):16
專家分(威望):0
可用分(財富):470
類型:普通用戶
昵稱:狂奔的蝸牛
注冊:2006-05-19
|
個人理解,覺得5樓是想告訴大家應該從基礎開始!!! 基礎很重 :) |
|
|
????
|
????????
???? |
|
|
|
|