搭建環境參考了:
http://blog.csdn.net/neilalexander/article/details/38950097
主要介紹一下,遇到的問題:
首先需要安裝ANT,確認是否安裝完整直接進行 ant輸入就可以了
d:回車
cd apach* 回車
cd bin 回車
ant 回車
這樣表示ant安裝完成了,也可以用 ant -version 判定版本信息
需要添加幾個包
在當前目錄下創建一個文件夾svnant_lib
注意一下,你的properties路徑的后面不要留有空格
注意xml中 ,有一句一個導入的包,做增量和減量的時候需要用到這個jar,所以你的路徑要和自己寫的一致,你可以用參考鏈接提供的,或者自己寫一個
在cmd中執行,有用到了JDT去編譯JAVA文件,之前在eclipse中一直無法編譯,未知
圖中第一行是輸入命令,可以看到你的SVN登錄信息,去找到SVN的版本和檢出動作
圖中有告訴了一共有693個文件,有147個class文件的移動,最后打包成了war包,這個是全量,通過修改
最后執行的參數就可以對應不同的打包方式了
這邊3個名稱就是對應的 執行方式了
附上BUILD.XML
<?xml version="1.0" encoding="UTF-8" ?> <project default="svn_war" basedir="."> <property file="build.properties" /> <!-- svn 比較項目最新路徑 --> <property name="svn.url" value="${svn._url}" /> <!-- svn 比較項目的新版本 --> <property name="svn.new_revision" value="${svn.new_revision}" /> <!-- svn 比較項目的舊路徑--> <property name="bak.svn.url" value="${bak.svn._url}" /> <!-- svn 比較項目的舊版本 --> <property name="svn.old_revision" value="${svn.old_revision}" /> <property name="svn.username" value="${svn.username}" /> <property name="svn.password" value="${svn.password}" /> <!-- 項目名稱 --> <property name="webapp" value="${webapp.name}" /> <!-- 目標項目的Web 名稱(WEB-INF上一級的目錄名稱) --> <property name="webroot" value="${web.root}" /> <!-- svn改動文件列表信息 --> <property name="compare.path.file" value="${increment.file.path}/${webapp}_${increment.file}" /> <!-- 減量文件編譯后文件列表信息 --> <property name="decrement.file.list" value="${export.decrement_files_list.path}/${webapp}_${export.decrement_files_list}" /> <!-- svn導出包存放目錄 --> <property name="export.svn" location="${export.svn}/${webapp}" /> <!-- svn導出/切出舊版本文件存放目錄 --> <property name="bak_dest.path" location="${export.bak_dest}/${webapp}" /> <!-- svn導出/切出舊版本文件編譯后存放目錄 --> <property name="bak_dist.path" location="${export.bak_dist}/${webapp}" /> <!-- svn導出/切出新版本文件存放目錄 --> <property name="dest.path" location="${export.dest}/${webapp}" /> <!-- svn導出/切出文件編譯后存放目錄 --> <property name="dist.path" location="${export.dist}/${webapp}" /> <!-- svn增量文件保存目錄 --> <property name="increment.dest.path" location="${export.increment_dest}/${webapp}" /> <!-- svn增量文件編譯后保存目錄 --> <property name="increment.dist.path" location="${export.increment_dist}/${webapp}" /> <!-- svn減量文件保存目錄 --> <property name="decrement.dest.path" location="${export.decrement_dest}/${webapp}" /> <!-- svn減量文件編譯后保存目錄 --> <property name="decrement.dist.path" location="${export.decrement_dist}/${webapp}" /> <!-- 利用jdt編譯class 解決泛型不能轉換的問題 需要將 jdtCompilerAdapter.jar org.eclipse.jdt.compiler.tool_1.0.1.v_793_R33x.jar org.eclipse.jdt.core_3.3.3.v_793_R33x.jar org.eclipse.jdt.debug.ui_3.2.102.v20071002_r332.jar 復制到ant_home/lib目錄下 <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> --> <path id="svnant.classpath"> <fileset dir="${svnant.classpath}"> <include name="**/*.jar" /> </fileset> </path> <path id="buildpath"> <fileset dir="${dest.path}"> <include name="**/lib/*.jar" /> </fileset> <fileset dir="${jdk.classpath}"> <include name="**/*.jar" /> </fileset> </path> <path id="buildpath_old"> <fileset dir="${bak_dest.path}"> <include name="**/lib/*.jar" /> </fileset> <fileset dir="${jdk.classpath}"> <include name="**/*.jar" /> </fileset> </path> <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" /> <svnSetting id="svn.settings" javahl="false" svnkit="true" username="${svn.username}" password="${svn.password}" failonerror="true" /> <target name="init" description="init clean dirs"> <echo message="${svn.username}" /> <echo message="${svn.password}" /> <echo message="${webapp}" /> <echo message="${webroot}" /> <echo message="${compare.path.file}" /> <delete dir="${bak_dest.path}" failonerror="false" deleteonexit="true" /> <delete dir="${bak_dist.path}" failonerror="false" deleteonexit="true" /> <delete dir="${dest.path}" failonerror="false" deleteonexit="true" /> <delete dir="${dist.path}" failonerror="false" deleteonexit="true" /> <delete file="${compare.path.file}" failonerror="false" /> <delete file="${decrement.file.list}" failonerror="false" /> <delete dir="${increment.dest.path}" failonerror="false" deleteonexit="true" /> <delete dir="${increment.dist.path}" failonerror="false" deleteonexit="true" /> <delete dir="${decrement.dest.path}" failonerror="false" deleteonexit="true" /> <delete dir="${decrement.dist.path}" failonerror="false" deleteonexit="true" /> </target> <!-- that is to test i svnant is available //--> <target name="tool-available" depends="init"> <echo message="run task test svnant is available"> </echo> <available resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" property="available.svnant" /> <echo message="SVN-ANT is available = ${available.svnant}"> </echo> </target> <!-- 比較差異 增量文件 --> <target name="diff" description="diff/compare project"> <svn refid="svn.settings"> <diffSummarize oldUrl="${bak.svn.url}" oldTargetRevision="${svn.old_revision}" newUrl="${svn.url}" newTargetRevision="${svn.new_revision}" outFile="${compare.path.file}" recurse="true" /> </svn> </target> <!-- 下載 切成 導出 服務器上最新代碼 --> <target name="checkout" description="checkout/export project code ${svn_url} "> <echo message="checkout/export project code ${svn_url} - ${svn_revision} to ${dest_path}"> </echo> <svn refid="svn.settings"> <export srcUrl="${svn_url}" destPath="${dest_path}" revision="${svn_revision}" force="true" /> </svn> </target> <!-- javac編譯 --> <target name="compile"> <echo>compile ${dest.path} ......</echo> <delete dir="${dist.path}" failonerror="false" deleteonexit="true" /> <mkdir dir="${dist.path}/classes" /> <javac nowarn="true" debug="${javac.debug}" debuglevel="${javac.debuglevel}" destdir="${dist.path}/classes" source="${javac.source}" target="${javac.target}" encoding="utf-8" fork="true" memoryMaximumSize="512m" includeantruntime="false"> <src path="${dest.path}/src" /> <!-- <compilerarg value="-Xlint:unchecked"/> <compilerarg value="-Xlint:deprecation"/> <compilerarg value="-Xlint"/> --> <classpath refid="buildpath" /> </javac> </target> <!-- 利用JDT編譯 --> <target name="compile_jdt"> <echo>compile ${dest_path} ......</echo> <delete dir="${dist_path}" failonerror="false" deleteonexit="true" /> <mkdir dir="${dist_path}/classes" /> <javac compiler="org.eclipse.jdt.core.JDTCompilerAdapter" nowarn="true" debug="${javac.debug}" debuglevel="${javac.debuglevel}" destdir="${dist_path}/classes" source="${javac.source}" target="${javac.target}" encoding="utf-8" fork="true" memoryMaximumSize="1024m" includeantruntime="false"> <src path="${dest_path}/src" /> <classpath refid="${jdt_buildpath}" /> </javac> </target> <!-- 利用JDT編譯SVN 最新項目 --> <target name="compile_svn"> <!-- 回調任務 --> <antcall target="compile_jdt"> <param name="dest_path" value="${dest.path}" /> <param name="dist_path" value="${dist.path}" /> <param name="jdt_buildpath" value="buildpath" /> </antcall> </target> <!-- 將全部項目的class 建立jar包(新版本) --> <target name="jar" depends="compile_svn"> <jar destfile="${dest.path}/${web.root}/WEB-INF/lib/${webapp}.jar" level="9" compress="true" encoding="utf-8" basedir="${dist.path}/classes"> <manifest> <attribute name="Implementation-Version" value="Version: 2.2" /> </manifest> </jar> </target> <!-- 利用JDT編譯SVN 舊版本項目 --> <target name="compile_svn_old"> <!-- 回調任務 --> <antcall target="compile_jdt"> <param name="dest_path" value="${bak_dest.path}" /> <param name="dist_path" value="${bak_dist.path}" /> <param name="jdt_buildpath" value="buildpath_old" /> </antcall> </target> <!-- 將全部項目的class 建立jar包(舊版本) --> <target name="jar_old" depends="compile_svn_old"> <jar destfile="${bak_dest.path}/${web.root}/WEB-INF/lib/${webapp}.jar" level="9" compress="true" encoding="utf-8" basedir="${bak_dist.path}/classes"> <manifest> <attribute name="Implementation-Version" value="Version: 2.2" /> </manifest> </jar> </target> <!-- 導出增量和減量文件 --> <target name="increment" depends="diff"> <java classname="com.yubo.util.ExportIncrementFiles" classpath="${svnant.classpath}/lib/increment.export.jar" fork="true"> <arg value="${compare.path.file}" /> <arg value="${dest.path}/" /> <arg value="${increment.dest.path}/" /> <arg value="${bak_dest.path}/" /> <arg value="${decrement.dest.path}/" /> </java> </target> <!-- 檢查增量文件夾源文件夾是否存在 --> <target name="increment_dir_check"> <available property="increment_dir_check.value" file="${increment.dest.path}/src" type="dir"> </available> </target> <!-- 利用JDT編譯增量文件 --> <target name="compile_increment" depends="increment_dir_check" if="increment_dir_check.value"> <antcall target="compile_jdt"> <param name="dest_path" value="${increment.dest.path}" /> <param name="dist_path" value="${increment.dist.path}" /> <param name="jdt_buildpath" value="buildpath" /> </antcall> </target> <!-- 檢查減量文件夾源文件夾是否存在 --> <target name="decrement_dir_check"> <available property="decrement_dir_check.value" file="${decrement.dest.path}/src" type="dir"> </available> </target> <!-- 利用JDT編譯減量文件 --> <target name="compile_decrement" depends="decrement_dir_check" if="decrement_dir_check.value"> <antcall target="compile_jdt"> <param name="dest_path" value="${decrement.dest.path}" /> <param name="dist_path" value="${decrement.dist.path}" /> <param name="jdt_buildpath" value="buildpath_old" /> </antcall> </target> <!-- 全部打包 --> <target name="war"> <echo>create war file.......</echo> <copy todir="${dist_path}" failonerror="false"> <fileset dir="${dest_path}/${webroot}" includes="**" /> </copy> <move todir="${dist_path}/WEB-INF/classes" failonerror="false"> <fileset dir="${dist_path}/classes" /> </move> <copy todir="${dist_path}/WEB-INF/classes" failonerror="false"> <fileset dir="${dest_path}/src/" includes="**/*.xml, **/*.properties, **/*.xsd" /> </copy> <!--得到當前日期--> <tstamp> <format property="DSTAMP" pattern="yyyyMMdd" locale="zh" /> <format property="TSTAMP" pattern="HHmmss" locale="zh" /> </tstamp> <war destfile="${export.svn}/${webapp}_${DSTAMP}_${TSTAMP}.war" basedir="${dist_path}" webxml="${dist_path}/WEB-INF/web.xml" /> </target> <!-- 移動減量包其他文件 --> <target name="create_decrement"> <echo>create decrement file.......</echo> <copy todir="${decrement.dist.path}" failonerror="false"> <fileset dir="${decrement.dest.path}/${webroot}" includes="**" /> </copy> <move todir="${decrement.dist.path}/WEB-INF/classes" failonerror="false"> <fileset dir="${decrement.dist.path}/classes" /> </move> <copy todir="${decrement.dist.path}/WEB-INF/classes" failonerror="false"> <fileset dir="${decrement.dest.path}/src/main/resources" includes="**/*.xml, **/*.properties, **/*.xsd" /> </copy> </target> <!-- 移動增量包其他文件 --> <target name="create_increment"> <echo>create increment file.......</echo> <copy todir="${increment.dist.path}" failonerror="false"> <fileset dir="${increment.dest.path}/${webroot}" includes="**" /> </copy> <move todir="${increment.dist.path}/WEB-INF/classes" failonerror="false"> <fileset dir="${increment.dist.path}/classes" /> </move> <copy todir="${increment.dist.path}/WEB-INF/classes" failonerror="false"> <fileset dir="${increment.dest.path}/src/main/resources" includes="**/*.xml, **/*.properties, **/*.xsd" /> </copy> </target> <!--檢出新版本--> <target name="checkout_new"> <antcall target="checkout"> <param name="dest_path" value="${dest.path}" /> <param name="svn_url" value="${svn.url}" /> <param name="svn_revision" value="${svn.new_revision}" /> </antcall> </target> <!--檢出舊版本--> <target name="checkout_old"> <antcall target="checkout"> <param name="dest_path" value="${bak_dest.path}" /> <param name="svn_url" value="${bak.svn.url}" /> <param name="svn_revision" value="${svn.old_revision}" /> </antcall> </target> <!-- 全部打包 --> <target name="war_svn"> <antcall target="war"> <param name="dest_path" value="${dest.path}" /> <param name="dist_path" value="${dist.path}" /> </antcall> </target> <!-- 全部打包 --> <target name="war_increment"> <copy todir="${increment.dist.path}/WEB-INF" file="${dest.path}/${webroot}/WEB-INF/web.xml" /> <antcall target="war"> <param name="dest_path" value="${increment.dest.path}" /> <param name="dist_path" value="${increment.dist.path}" /> </antcall> </target> <!-- 檢查減量文件列表文件夾是否存在 --> <target name="output_decrement_dir_check"> <available property="output_decrement_dir_check.value" file="${decrement.dist.path}" type="dir"> </available> </target> <!-- 輸出減量文件列表 --> <target name="output_decrement" depends="output_decrement_dir_check" if="output_decrement_dir_check.value"> <path id="decrement_file_paths"> <fileset dir="${decrement.dist.path}"> </fileset> </path> <pathconvert property="decrement_file_pathSum" pathsep="${line.separator}"> <path refid="decrement_file_paths"> </path> </pathconvert> <echo message="${decrement_file_pathSum}" file="${decrement.file.list}"> </echo> </target> <!-- svn 全量包 --> <target name="svn_war" depends="tool-available, checkout_new, compile_svn, war_svn" /> <!-- 增量包+減量文件夾 --> <target name="increment_war" depends="tool-available, checkout_old, checkout_new, increment, jar_old, jar, compile_increment, compile_decrement, war_increment, create_decrement" /> <!-- 增量文件夾+減量文件夾 --> <target name="patch_folder" depends="tool-available, checkout_old, checkout_new, increment, jar_old, jar, compile_increment, compile_decrement, create_increment, create_decrement, output_decrement" /> </project>
附上 build.properties
#項目名稱(這個配置將決定導出的文件夾名字和war包名字) webapp.name=mobile #目標項目的Web 名稱(WEB-INF上一級的目錄名稱) web.root=WebContent #svn項目新版本的路徑 svn._url=XXXXXXXXXXXXXXXXXXXXXXX #svn新版本的版本號 svn.new_revision=188 #svn項目舊版本的路徑 bak.svn._url=XXXXXXXXXX #svn舊版本的版本號 svn.old_revision=1 svn.username=XXXXX svn.password=XXXXXXXXXX #比較文件目錄 increment.file.path=D:/svnAnt #比較文件名 increment.file=patch.txt #svn導出包存放目錄 export.svn=D:/svnAnt #svn導出/切出舊版本文件存放目錄 export.bak_dest=D:/svnAnt/bak_dest #svn導出/切出舊版本文件編譯后存放目錄 export.bak_dist=D:/svnAnt/bak_dist #svn導出/切出新版本文件存放目錄 export.dest=D:/svnAnt/dest #svn導出/切出文件編譯后存放目錄 export.dist=D:/svnAnt/dist #svn增量文件保存目錄 export.increment_dest=D:/svnAnt/increment_dest #svn增量文件編譯后保存目錄 export.increment_dist=D:/svnAnt/increment_dist #svn減量文件保存目錄 export.decrement_dest=D:/svnAnt/decrement_dest #svn減量文件編譯后保存目錄 export.decrement_dist=D:/svnAnt/decrement_dist #減量文件編譯后文件列表信息目錄 export.decrement_files_list.path=D:/svnAnt #減量文件編譯后文件列表信息文件名 export.decrement_files_list=decrement_files_list.txt #svnAnt類庫的父級路徑 svnant.classpath=D:/apache-ant-1.9.6 #jdk類庫的父級路徑 jdk.classpath=C:/Program Files (x86)/Java/jdk1.7.0_13 javac.debuglevel=source,lines,vars javac.target=1.7 javac.source=1.7 javac.debug=true