ant打包_ant打包问题 - CSDN
精华内容
参与话题
  • Ant打包详解

    千次阅读 2010-03-24 16:51:00
    使用Ant打包是比较方便的,我们可以在项目根目录下建立一个名为build.xml的xml文件,然后再xml文件里面定义我们的打包任务,如下:

     

    使用Ant打包是比较方便的,我们可以在项目根目录下建立一个名为build.xmlxml文件,然后再xml文件里面定义我们的打包任务,如下:

     上面建立了一个名为HelloWorldAnt项目,default=”ejbjar”指定运行Ant时,如果没有给定任务名称,则默认执行ejbjar任务。Basedir=”.”指定项目的路径为build.xml文件所在的目录。

    <property environment=”env” />用于引用操作系统的环境变量。

    <property name=”jboss.home” value=”${env.JBOSS_HOME} />定义了一个名为jboss.home的属性,它的值引用名为JBOSS_HOME的环境变量(环境变量JBOSS_HOME是在安装jboss时设置的jboss主目录)。

    <property name=”build.dir” value=”${basedir}/build” />定义一个名为build.dir的属性,它的值指向项目路径下build/classes目录,该目录用于存放编译后的class文件。

    <path id=”build.classpath”>节点定义了一个idbuild.classpath的类路径,类路径包含[jboss安装目录]/client下的所有jar文件及/buile/classes下的所有类文件。

    <target name=”prepare” depends=”clean”>节点用于在项目路径下创建build/build/classes文件夹。该任务依赖clean任务,执行prepare任务前会先执行clean任务。

    <target name=”compile” depends=”prepare” description=”编译”>节点定义了一个编译任务,该任务调用javacsrc目录下的源文件进行编译。classpath引用idbuild.classpath的类路径。编译后的class文件存放在/build/classes目录,在任务执行前会先执行prepare任务。

    <target name=”ejbjar” depends=”compile” description=”创建EJB发布包”>节点定义了一个打包任务,该任务调用jar命令对/build/classes目录下的所有class文件进行打包,并且把src/META-INF目录下的所有xml文件打进jar文件的META-INF目录。生成后的jar文件存放在项目的根目录下,名为HelloWorld.jar。在任务执行前会先执行compile任务。

    上面主要是针对java工程打成jar包,下面简单讲一下对于web工程打成war包的过程

     

    发布一个web应用到jboss前,需要把它打成war文件,首先必须了解一个web应用应该具有哪些目录及文件,其中WEB-INF目录和web.xml文件是必须提供的,其它的目录和文件可以不存在。当你打成war文件后应检查war文件,如果根目录下没有WEB-INFWEB-INF下没有web.xml文件,那么在发布web应用时将会失败。

     

     

    展开全文
  • 使用ant打包WAR,超详细教程

    万次阅读 2017-11-21 09:12:26
    使用ant编译打成WAR包总体思路: 一、下载安装ant相关组件。 二、配置系统环境变量 三、创建build.xml 四、运行ant。备注:由于是自己查询大量文章才完成的,如果有写得错误的希望各位指出。以下操作是在windows系统...
                                                           使用ant编译打成WAR包
    总体思路:
    一、下载安装ant相关组件。
    二、配置系统环境变量
    三、创建build.xml
    四、运行ant。
    备注:由于是自己查询大量文章才完成的,如果有写得错误的希望各位指出。以下操作是在windows系统下。

    详细步骤:
    一、下载安装ant相关组件。
    (1)这里用到的版本1.8.4是http://archive.apache.org/dist/ant/binaries/apache-ant-1.8.4-bin.zip
    想了解ant的可以到官网看看:http://ant.apache.org/
    (2)下载后找个路径解压,我的是D:\kfSoft\apache-ant-1.8.4-bin
    二、配置系统环境变量
    ant_home:D:\kfSoft\apache-ant-1.8.4-bin\apache-ant-1.8.4
    PATH:D:\kfSoft\apache-ant-1.8.4-bin\apache-ant-1.8.4\bin
    三、创建build.xml
    我需要打包的java web路径:C:\Program Files\eclipseWCS\project\wcs-dev
    所以在这个目录先创建build.xml,当然可以在别的路径。只要相对应bulid.xml里面内容的路径取对就可以。
    以下是我的build.xml内容:
    <?xml version="1.0" encoding="UTF-8"?>  
    <project name="wcs" basedir="." default="wcs">  
    	<property name="classpath_lib" value="WebContent/WEB-INF/lib" />  
    	<property name="tomcat_classpath_lib" value="C:/Program Files/apache-tomcat-7.0.69-windows-x64/apache-tomcat-7.0.69/lib" /> 
    	<property name="jdk_classpath_lib" location="C:/Program Files/Java/jdk1.7.0_80/lib/missioncontrol/plugins" />  
    	<property name="eclipse_classpath_lib" location="C:/Program Files/eclipseWCS/plugins/org.junit_4.12.0.v201504281640" />  
    	<property name="WebContent" value="." />  
    
    	<target name="clean"  description="清除打包用临时文件">  
    		<delete dir="C:/Program Files/eclipseWCS/project/webapp"/>  
    
    		<mkdir dir="C:/Program Files/eclipseWCS/project/webapp" /> 		
    	</target>  
    
    	<!-- 编译需要的lib -->
    	<path id="classpath">    
    		<fileset dir="${classpath_lib}">    
    			<include name="*.jar"/>    
    		</fileset> 
    		<fileset dir="${tomcat_classpath_lib}">    
    			<include name="*.jar"/>    
    		</fileset> 	
    		<fileset dir="${jdk_classpath_lib}">    
    			<include name="*.jar"/>    
    		</fileset> 
    		<fileset dir="${eclipse_classpath_lib}">    
    			<include name="*.jar"/>    
    		</fileset> 
    
    	</path>    
    
    	<property name="debuglevel" value="source,lines,vars"/>  
    
    	<property name="target" value="1.6"/>  
    	<property name="source" value="1.6"/>  
    	<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /> 
    
    	<patternset id="no.java">  
    		<exclude name="WebContent/**/*.java" /> 
    		<exclude name="build/**/*.java" /> 
    		<exclude name="C:/Program Files/eclipseWCS/project/wcs-dev/fp.demo/**/*.java" /> 
    	</patternset>  
    
    	<target name="init" depends="clean">  
    		<property name="build" value="C:/Program Files/eclipseWCS/project/webapp"></property>  
    		<property name="src" value="."></property>  
    		<mkdir dir="${build}"/>  
    		<mkdir dir="${build}/WEB-INF"/>  
    		<mkdir dir="${build}/WEB-INF/classes"/>  
    		<mkdir dir="${build}/WEB-INF/lib"/>  
    		<copy todir="${build}">  
    			<fileset dir="${basedir}/WebContent">  
    				<include name="WEB-INF/**" />  
    				<include name="**" />  
    			</fileset>  
    		</copy>  
    		<copy todir="${build}/WEB-INF/classes">   
    			<fileset dir="${basedir}/resources">
    
    			</fileset>  
    		</copy> 
    	</target>  
    	<target name="complie" depends="init">    
    		<javac 
    		  nowarn="on"
    		  source="1.7"
    		  target="1.7"
    		  deprecation="true"
    		  debug="true" encoding="UTF-8"
    		  destdir="${build}/WEB-INF/classes"
    		  classpathref="classpath" includeantruntime="on"
    		   >
    			<src  path="${src}/bom"/>
    			<src  path="${src}/business.mail"/>
    			<src  path="${src}/resources"/>
    			<src  path="${src}/resources.i18n"/>
    			<src  path="${src}/resources.business"/>
    			<src  path="${src}/entity"/>
    			<src  path="${src}/framework"/>
    			<src  path="${src}/business.common"/>
    			<src  path="${src}/business.management"/>
    			<src  path="${src}/business.parammng"/>
    			<src  path="${src}/business.product"/>
    			<src  path="${src}/business.customer"/>
    			<src  path="${src}/business.project"/>
    			<src  path="${src}/business.finarpt"/>
    			<src  path="${src}/business.credit"/>
    			<src  path="${src}/business.loanapply"/>
    			<src  path="${src}/business.gage"/>
    			<src  path="${src}/business.col"/>
    			<src  path="${src}/business.postloan"/>
    			<src  path="${src}/business.postloanalter"/>
    			<src  path="${src}/business.npa"/>
    			<src  path="${src}/business.warning"/>
    			<src  path="${src}/business.workflow"/>
    			<src  path="${src}/business.inquiryprint"/>
    			<src  path="${src}/business.ace"/>
    			<src  path="${src}/business.archive"/>
    			<src  path="${src}/business.analyze"/>
    			<src  path="${src}/business.comm"/>
    			<src  path="${src}/fp.demo"/>
    			<src  path="${src}/business.grademodel"/>
    			<src  path="${src}/business.corpcredit"/>
    			<src  path="${src}/business.corploan"/>
    			<src  path="${src}/business.notarizeinfo"/>
    			<src  path="${src}/business.interface"/>
    			<src  path="${src}/business.coupon"/>
    			<src  path="${src}/business.questionnaire"/>
    			<src  path="${src}/business.app"/>
    		</javac>
    
    		<!-- srcdir 源目录(在这里为源代码目录)destdir目标目录 即编译完成后存放class文件的目录 -->
    	</target>  
    	<target name="wcs" depends="complie">  
    		<war warfile="${build}/wcs.war" webxml="${build}/WEB-INF/web.xml">    
    
    
    			<fileset dir="${build}"/>    
    		</war>    
    
    	</target> 
    
    </project>  


    需要注意的地方:
    1、<project name="wcs" basedir="." default="wcs">   这里basedir是路径,指build.xml所在路径。
    前面说到build放在不同地方就要注意修改对应路径。defalut指的是target标签的name。这里一定要写好,不然会报
      does not exist in the project
    2、由于我的项目文件是UTF-8,不是无BOM的编码格式。所以使用jdk去编译代码时会报错。
    报:编码 UTF8 的不可映射字符。解决办法是使用eclipse的jdt编译。
    (1)org.eclipse.jdt.compiler.tool_1.1.0.v20150513-2007.jar、org.eclipse.jdt.core_3.11.2.v20160128-0629.jar、 org.eclipse.jdt.debug.ui_3.7.101.v20160203-1236.jar、jdtCompilerAdapter.jar-这个jar在 org.eclipse.jdt.core_3.11.2.v20160128-0629.jar里面拿出来即可。
    以上3个jar在C:\Program Files\eclipseWCS\plugins。eclipse软件目录下。把他放在:D:\kfSoft\apache-ant-1.8.4-bin\apache- ant-1.8.4\lib ant的目录下。
    具体解决办法: http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E7%9F%A5%E8%AF%86%E5%BA%93/23434.shtml
    转载请注明出处:Ant编译utf-8非法字符:/65279 解决方法 - 博客园


    3、<src path="${src}/bom"/> 这行指定需要编译的目录。如果不知道可以看web项目下的.classpath文件,kind="src"这个就是
    所有需要编译的目录。
    kind="con"这个指需要用到的jar。这里是我的项目比较特殊,一般java web项目都在src目录下。但是我的项目没有src,都是和src同级。
    4、 <path id="classpath"> 这个是编译class时使用到的所有jar。classpath_lib指我项目本身用到的jar。tomcat_classpath_lib是tomcat7使用 的jar jdk_classpath_lib这个是jdk,我用的是1.7的版本。eclipse_classpath_lib是junit有些项目可能不用可以不引用。
    5、<patternset id="no.java">   本身是拿来排除不需要编译的地方。这里我没有测试。因为有些类不用的,但是编译时发现他引入的包或者继 承的类没有就是编译不过去。这样会使整个ant失败。
    6、<target name="wcs" depends="complie"> 这个是打war包命令。
    7、<property name="build" value="C:/Program Files/eclipseWCS/project/webapp"></property> 这个是需要打war路径。
    8、<target name="init"> 这个标签是复制一些必要的文件。如果不知道要复制什么文件可以到项目的.settings下的 org.eclipse.wst.common.component用文本打开。你就知道需要复制哪些文件了。deploy-path是目标路径,source-path这个是原路 径。把source-path的文件复制到deploy-path去。



    四、运行ant
    (1)win+r,

    打开cmd.
    (2)
    (3)切换到build.xm目录,如果是其他盘可以打:d:回车,在cd进目录。

    (4)敲ant回车,就会运行
    (5)正常的界面





    注明:后续可以添加上传server服务器,自动部署。




    展开全文
  • Ant实现自动打包部署

    千次阅读 2019-05-10 17:37:15
    1.安装ant,配置环境变量; 官网:https://ant.apache.org/bindownload.cgi Windows上安装配置: 下载apache-ant-1.10.5-bin.zip后解压,我的路径:D:\Java\ant1.10 配置环境变量: ANT_HOME D:\Java\ant1.10 ...

    1.安装ant,配置环境变量;

    官网:https://ant.apache.org/bindownload.cgi

    Windows上安装配置:

    下载apache-ant-1.10.5-bin.zip后解压,我的路径:D:\Java\ant1.10

    配置环境变量:

    ANT_HOME   D:\Java\ant1.10

    PATH                                %ANT_HOME\bin

    CLASSPATH                   %ANT_HOME\bin

    进入cmd中,输入ant -version 查看是否安装成功

    Linux上安装配置

    下载apache-ant-1.10.5-bin.tar.gz版本:在jdk安装目录执行如下语句

    sudo wget http://mirrors.shu.edu.cn/apache/ant/binaries/apache-ant-1.10.5-bin.tar.gz

    解压tar -vxzf apahce-ant-1.10.5-bin.tar.gz 

    配置环境变量:

    export ANT_HOME=/usr/java/apache-ant-1.10.5

    export PATH=$PATH:$ANT_HOME/bin

    使配置文件生效:source /etc/profile

    测试ant安装成功:ant -version

     

    2.部署项目,在rls项目中添加build.xml配置文件

    build.xml文件中有一行是关于tomcat的路径需要修改:

    Windows中tomcat的路径:

    <property name="tomcat" value="D:\Java\tomcat8.5" />

    Linux中tomcat的路径:

    <property name="tomcat" value="/usr/java/apache-tomcat-8.5.37"/>

    进入拥有build.xml所在的目录下,输入命令:ant

    成功后去tomcat的bin目录下,输入:./startup.sh启动tomcat;项目部署发布完成。

     

    build.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    
        <project name="rls" default="deleteWar" basedir=".">                      <!-- name:项目名 -->
    
            <property name="build" value="${basedir}/build" />
    
            <property name="build.class" value="${build}/classes" />
    
            <property name="webApp" value="${basedir}/WebContent" />
    
                    <property name="tomcat" value="D:\Java\tomcat8.5" />                <!-- 本机tomcat安装目录 -->
    
            <property name="lib" value="${webApp}/WEB-INF/lib" />       <!-- 该项目下lib中的jar包 -->
    
                    
    
                    <property name="tomcat.lib" value="${tomcat}\lib" />                 <!-- tomcat中lib文件夹下的jar包 -->
    
             
    
            <!--请将下面的路径改为你本地的路径-->
    
            <property name="webserver" value="${tomcat}\webapps" />
    
             
    
            <!--定义CLASSPACH,编译时用到你外部加入的包-->
    
            <path id="classpath">
    
                <fileset dir="${lib}" includes="***.jar" />
    
                            <fileset dir="${tomcat.lib}" includes="***.jar" />
    
            </path>
    
         
    
            <!--删除任务-->
    
            <target name="clean" description="删除">
    
                <echo message="删除目录" />
    
                <delete dir="${build}" />
    
            </target>
    
        
    
            
    
            <!--创建一个临时目录-->
    
            <target name="init" description="创建目录" depends="clean">
    
                <echo message="创建目录--以执行" />
    
                <mkdir dir="${build.class}" />
    
            </target>
    
           
    
         
    
            <!--编译java源文件-->
    
            <target name="compile" description="编译文件" depends="init">
    
                <echo message="编译文件" />
    
                <javac destdir="${build.class}" includeAntRuntime="false">
    
                                                    <src path="src" />                <!-- 多个src源文件 -->
    
                                                    <src path="src-mobile" />
    
                                                    <src path="src-reverse" />
    
                                                    <src path="src-ars" />
    
                                                    <src path="src-crq" />
    
                                                    <src path="src-oti" />
    
                                                    <src path="src_jbo_utf8" />
    
                                                    <src path="src-platform" />
    
                                                    <src path="src-re" />
    
                                                    <classpath refid="classpath" />
    
                                                    <compilerarg line="-encoding UTF-8" />
    
                                                    <compilerarg value="-XDignore.symbol.file" />
    
                </javac>
    
            </target>
    
         
    
            <!--打成WAR包-->
    
            <target name="generwar" depends="compile">
    
                <echo message="打成WAR" />
    
                <war destfile="${build}/${ant.project.name}.war" webxml="${webApp}/WEB-INF/web.xml">
    
                    <fileset dir="WebContent"/>  
    
                    <lib dir="${lib}" />
    
                    <classes dir="${build.class}" />
    
                </war>
    
            </target>
    
            <!--把WAR放到一个指定目录,这里是直接布署到TOMCAT服务器-->
    
            <target name="fabu" depends="generwar" description="发布">
    
                <copy file="${build}/${ant.project.name}.war" todir="${webserver}"/>
    
            </target>
    
      
    
            <!--把打好的WAR删除-->
    
            <target name="deleteWar" depends="fabu" description="删除服务器上的war">
    
                <delete dir="${build.class}" />                    <!--删除目录-->
    
                    <delete file="${build}/${ant.project.name}.war" /> <!--删除文件-->
    
            </target>
    
        </project>

     

    展开全文
  • Ant详细打包过程

    2016-04-12 14:11:40
    你可以手动打包、部署你的工程,但这不是最好的方法。最好的方式就是全自动化的方式。开发人员提交了代码后,可以自动构建、打包、部署到测试环境。测试通过后进入到模拟环境或是直接发布的生产环境,这个过程可以是...

    首先请允许我这样说,作为开发或测试,你一定要具备这种本领。你可以手动打包、部署你的工程,但这不是最好的方法。最好的方式就是全自动化的方式。开发人员提交了代码后,可以自动构建、打包、部署到测试环境。测试通过后进入到模拟环境或是直接发布的生产环境,这个过程可以是全自动的。但这个自动化的方式有一些公司用到了,但也有很多公司还不知道,他们的攻城师天天在做反复、没有多大意义的、浪费生命的事情。当然这种方式一般针对做自己的产品,如电商、通信行业。而给其他公司或企业做项目的比较少利用这种方式,当然也可以利用这种方式,只是不能直接发布到客户的服务器而已。当然有些公司是专门有人做这部分事情的!

    说了这么多也没有什么恶意,只是觉得这种方式可以大大提高效率,降低人力、物力、财力而已。勿喷,O(∩_∩)O哈哈~嘿嘿~

    在部署项目或打包项目中,通常大家都是手动部署或打包的多。很多公司把这一任务交个了我们做开发的,其实这部分应该谁做呢?本质上应该是测试的来完成,但一些公司的测试不会做这个,慢慢的就变成了开发的事情。有些公司是人手比较少、不健全,所以一部分人自己承担了这个事情。在我们手动打包的时,其实这是一个重复的、没有技术含量的、耗费体力的活儿。一般步骤就是更新svn上代码、修改好相关的配置、编译class、发布到tomcat(web工程)、测试启动无误、手动打包。

    而有一种比较简单快速的方式就是利用meven或ant来完成这些工作,只要我们编写好脚本后。给相关的工作人员去运行这部分脚本就可以完成打包,甚至是部署项目,这些都是so easy~!我个人也比较赞成使用这种方式,比较简单、快速、重用性好,最难的可能编写build脚本,但这个脚本其实也是很简单的,它就想dos命令行,只不过它是用xml方式来完成命令行的而已。所以测试会写ant的build脚本这个也是应该的,如果你不会的话,还是建议你学习学习。反正是百益无一害的事情,何乐而不为呢!

     

    一、基本流程

    利用ant打包项目或打增量包的基本流程

    image

    值得一提的是jar包这个部分,这个步骤是为下面编译增量包做准备的。因为增量包导出的增量文件,它依赖于整个项目的其他代码,如果没有这些代码的支持是编译不通过。然而又不能直接通过diff得到增量的class,所以只能导出增量文件后,通过引用全部工程的代码的class再进行编译即可。

     

    二、运行环境

    1、安装jdk,不会自己上网查其他的

    2、如果你还没有安装ant,那么你可以参考:http://www.cnblogs.com/hoojo/archive/2013/06/14/java_ant_project_target_task_run.html

    会介绍一下ant的安装和使用的方法。

    3、这里需要用到svn的ant相关工具包、命令支持。你需要下载svnant-1.3.1.zip,将里面的lib库放置在你的ant脚本的编译运行环境中。

    4、因为某些项目使用到了泛型、annotation注解,使用javac有些代码是编译不通过的,所以这里使用了jdt的编译方式。参考:使用eclipse JDT compile 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目录下,如果是利用eclipse运行脚本就需要把它加载到运行环境中。可以参考上面的:使用eclipse JDT compile class

     

    三、编写ant的build脚本

    1、首先看看ant工程的目录结构

    image

    简单介绍下目录结构:

    src下面的ExportIncrementFiles.java是导出增量文件要用的,它在build命令increment中执行。它会读取diff 比较后的文件中的内容,并导出文件

    dest 是checkout出来最新的svn的工程

    dist 是编译上面dest目录中的工程,也是svn全量war的工程目录和jar

    increment_dest 是增量工程,也就是上面的ExportIncrementFiles工具导出的工程

    increment_dist 是编译上面increment_dest 的工程,也是增量包的工程目录

    因为每个人的项目工程目录结构不一样,所以这个脚本并不会通用,我这里指针对自己的项目进行测试。

    lib中是运行环境需要的jar库,其中主要的就是svnlib 这个你可以去下载 svnant-1.3.1.zip 以及JDT编译class的jar包,这个可以通过eclipse中的plugin中的jar包找到,可以参考:使用eclipse JDT compile class

    increment.export.jar就是ExportIncrementFiles的class打成的jar包,这个是自己打的包,可以直接应用class也可以的,在increment命令引用,jar下载:http://download.csdn.net/detail/ibm_hoojo/6501165

    build.properties是当前build的配置文件

    build.xml就是主要的ant脚本

    选中部分是打的war包,这个就可以部署了

    patch.txt就是svn的diff 比较出的增量文件的目录路径列表

     

    2、ExportIncrementFiles.java 导出增量文件

    package com.hoo.util;
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FileReader;
     
    /**
     * <b>function:</b> 导出在增量的文件
     * @author hoojo
     * @createDate 2013-11-2 下午10:00:01
     * @file ExportIncrementFiles.java
     * @package com.hoo.util
     * @project AntTest
     * @blog http://blog.csdn.net/IBM_hoojo
     * @email hoojo_@126.com
     * @version 1.0
     */
    public class ExportIncrementFiles {
     
        /**
         * <b>function:</b> 导出增量文件
         * @author hoojo
         * @createDate 2013-11-2 下午10:15:43
         * @param configPath 增量文件路径配置目录
         * @param baseDir 基本路径 目标位置
         * @param destDir 增量文件保存位置
         * @throws Exception
         */
        private static void export(String configPath, String baseDir, String destDir) throws Exception {
            String srcFile = baseDir + configPath;
            String desFile = destDir + configPath;
            
            int lastIndex = desFile.lastIndexOf("/");
            String desPath = desFile.substring(0, lastIndex);
            
            File srcF = new File(srcFile);
            if(srcF.exists()){//如果不存在这样的源文件,就不再拷贝,这个用来解决版本之间有删除文件的情况。
                File desF = new File(desFile);
                File desP = new File(desPath);
                if(!desP.exists()) {
                    desP.mkdirs();
                }
                System.out.println(srcFile);
                FileInputStream fis = new FileInputStream(srcF);
                FileOutputStream fos = new FileOutputStream(desF);
                
                byte[] buf = new byte[1024];
                int len = 0;
                while((len = fis.read(buf)) != -1) {
                    fos.write(buf,0,len);
                }
                fos.flush();
                fos.close();
                fis.close();
            }
        }
        
        /**
         * <b>function:</b> 主函数 执行导出增量包任务
         * @author hoojo
         * @createDate 2013-11-2 下午10:00:01
         * @param args 参数1 增量包导出文件路径,参数2 要导出的文件的所在目标位置,参数3 增量包导出保存的位置路径
         */
        public static void main(String[] args) {
     
            if (args.length > 0) {
                if (args.length == 1 && "help".equals(args[0])) {
                    System.out.println("args[0] is Export Increment Files content path");
                    System.out.println("args[1] is Export Increment Files target path");
                    System.out.println("args[2] is Increment Files Export loaction");
                } else {
                    String configPath = args[0];
                    String baseDir = args[1];
                    String destDir = args[2];
                    
                    try {
                        BufferedReader br = new BufferedReader(new FileReader(configPath));
                        String s = null;
                        while((s = br.readLine()) != null) {
                            s = s.trim();//去掉路径前面的空格
                            String str = destDir + s;
                            if(!destDir.equals(str)){//过滤空行
                                export(s, baseDir, destDir);
                            }
                        }
                        br.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    main函数参数看注释,主要就是读取patch.txt增量文件路径,导出文件到指定目录的。

     

    3、build 脚本

    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- createDate 2013-10-28 -->
    <!-- author hoojo & http://blog.csdn.net/IBM_hoojo & http://hoojo.cnblogs.com -->
    <project default="checkout" basedir=".">
        <property file="build.properties"/>
        
        <!-- svn 比较项目最新路径 -->
        <property name="svn.url" value="${svn._url}"/>
        <!-- svn 备份路径-->
        <property name="bak.svn.url" value="${bak.svn._url}"/>
        
        <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}"/>
        
        <!-- svn导出/切出文件存放目录 -->
        <property name="dest.path" location="dest/${webapp}"/>
        <!-- svn导出/切出文件编译后存放目录 -->
        <property name="dist.path" location="dist/${webapp}"/>
        <!-- svn增量文件保存目录 -->
        <property name="increment.dest.path" location="increment_dest/${webapp}"/>
        <!-- svn增量文件编译后保存目录 -->
        <property name="increment.dist.path" location="increment_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="${basedir}">
                <include name="**/*.jar"/>
            </fileset>
        </path>
        
        <path id="buildpath">
            <fileset dir="${dest.path}">
                <include name="**/lib/*.jar"/>
            </fileset>
            <fileset dir="C:/Program Files/Java/jdk1.6.0_13">
                <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="${dest.path}" failonerror="false" deleteonexit="true" excludes="**/lib"/>
            <delete dir="${dist.path}" failonerror="false" deleteonexit="true" excludes="**/lib"/>
            <delete file="${compare.path.file}" failonerror="false"/>
            <delete dir="${increment.dest.path}" failonerror="false" deleteonexit="true"/>
            <delete dir="${increment.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="deff/compare project">
             <svn refid="svn.settings">
                <diffSummarize oldUrl="${bak.svn.url}" newUrl="${svn.url}" outFile="${compare.path.file}" recurse="true"/>
             </svn>
        </target>
            
        <!-- 下载 切成 导出 服务器上最新代码 -->
        <target name="checkout" depends="tool-available" description="checkout/export project code ${svn.url} ">
            <echo message="checkout/export project code ${svn.url}"></echo>
            <svn refid="svn.settings">
                 <export srcUrl="${svn.url}" destPath="${dest.path}" revision="HEAD" force="true"/>
            </svn>
       </target>
        
        <!-- javac编译 -->
        <target name="compile">
            <buildnumber/>
            <echo>compile ${dest.path} ......</echo>
            <delete dir="${dist.path}" failonerror="false" deleteonexit="true" excludes="**/lib"/>
            <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"/>
                <classpath refid="svnant.classpath"/>
            </javac>
        </target>
        
        <!-- 利用JDT编译 -->
        <target name="compile_jdt">
            <buildnumber/>
            <echo>compile ${dest_path} ......</echo>
            <delete dir="${dist_path}" failonerror="false" deleteonexit="true" excludes="**/lib"/>
            <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="512m" includeantruntime="false">
                <src path="${dest_path}/src"/>
                
                <classpath refid="buildpath"/>
                <classpath refid="svnant.classpath"/>
            </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}"/>
            </antcall>
        </target>
        
        <!-- 将全部项目的class 建立jar包 -->
        <target name="jar" depends="compile_svn">
            <jar destfile="${basedir}/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>
        
        <!-- 导出增量文件 -->
        <target name="increment" depends="diff">
            <java classname="com.hoo.util.ExportIncrementFiles" classpath="${basedir}/lib/increment.export.jar" fork="true">
                <arg value="${compare.path.file}"/>
                <arg value="${dest.path}/"/>
                <arg value="${increment.dest.path}/"/>
            </java>
        </target>
     
        <!-- 利用JDT编译增量文件 -->
        <target name="compile_increment">
            <antcall target="compile_jdt">
                <param name="dest_path" value="${increment.dest.path}"/>
                <param name="dist_path" value="${increment.dist.path}"/>
            </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/main/" includes="**/*.xml, **/*.properties, **/*.xsd"/>
                <fileset dir="${dest_path}/src/test/" includes="**/*.xml, **/*.properties, **/*.xsd"/>
                <fileset dir="${dest_path}/src/resource/" includes="**/*.xml, **/*.properties, **/*.xsd"/>
            </copy>
            
            <!--得到当前日期--> 
            <tstamp> 
                <format property="DSTAMP" pattern="yyyyMMdd" locale="zh"/> 
                <format property="TSTAMP" pattern="HHmmss" locale="zh"/> 
            </tstamp> 
            
            <war destfile="${basedir}/${webapp}_${DSTAMP}_${TSTAMP}.war" basedir="${dist_path}" webxml="${dist_path}/WEB-INF/web.xml"/>        
        </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>
        
        <!-- svn 全量包 -->
        <target name="svn_war" depends="checkout, compile_svn, war_svn"/>
        <!-- 增量包 -->
        <target name="increment_war" depends="checkout, increment, jar, compile_increment, war_increment"/>
    </project>

     

    4、build的配置文件内容

    #Mon, 04 Nov 2013 11:18:12 +0800
    svn._url=http://172.31.100.100/svn/iMVS_DataComm2
    bak.svn._url=http://172.31.100.100/svn/iMVS_DataComm
    svn.username=hoojo
    svn.password=mypass
    webapp.name=iMVS_DataComm
    web.root=WebRoot
    increment.file=patch.txt
     
    javac.debuglevel=source,lines,vars
    javac.target=1.6
    javac.source=1.6
    javac.debug=true

     

    运行svn_war任务可以打全部的包,也就是svn最新地址的项目工程包。

    运行increment_war任务可以打增量包,也会形成一个war文件。

    如果你需要发布到tomcat目录,可以写一个任务copy相关war包到tomcat的webapps的目录下,这个很简单~如果你需要调用tomcat的相关任务或命令,你需要在build脚本中加入

    <target name="_def_tomcat_tasks">
      <!-- tasks: deploy,undeploy,reload,stop,start,list,roles,resources -->
      <taskdef name="deploy"    classname="org.apache.catalina.ant.DeployTask" />
      <taskdef name="list"      classname="org.apache.catalina.ant.ListTask" />
      <taskdef name="reload"    classname="org.apache.catalina.ant.ReloadTask" />
      <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask" />
      <taskdef name="roles"     classname="org.apache.catalina.ant.RolesTask" />
      <taskdef name="start"     classname="org.apache.catalina.ant.StartTask" />
      <taskdef name="stop"      classname="org.apache.catalina.ant.StopTask" />
      <taskdef name="undeploy"  classname="org.apache.catalina.ant.UndeployTask" />
    </target>

    关于这些命令使用方法有兴趣的可以自己研究研究。

     

    亲历运作build.xml:


    <?xml version="1.0" encoding="UTF-8"?>
    <project name="SpringDemo" >
    <description>some task for SpringDemo</description>
    <property name="org.src" value="${basedir}/src"/> 
    <property name="org.resources" value="${basedir}/resources"/> 
    <property name="dir.classes" value="${basedir}/WebRoot/WEB-INF/classes" />
    <property name="build.classes" value="${basedir}/build/classes"/>
    <property name="build.resources" value="${build.classes}/resources"/>
    <property name="lib.dir" value="${basedir}/WebRoot/WEB-INF/lib"/>
    <property name="encoding" value="utf-8" />
    <property name="app.name" value="SpringDemo"/>
    <property name="jar.name" value="${app.name}.jar"/>
    <property name="war.name" value="${app.name}.war"></property>
    <property name="war.from" value="${basedir}/WebRoot"/>
    <property name="war.to" value="../${war.name}"/>
    <property name="main.classes" value="com.spring.alick"/>

    <path id="jarPath">  
            <fileset file="${lib.dir}/*.jar" />  
        </path> 

    <target name="clean" >
       <echo message="clean ${build.classes} begin" ></echo>
    <delete dir="${build.classes}"/>
    <delete dir="${build.resources}"/> 
    <delete dir="${dir.classes}"/>
    <delete file="${war.to}" failοnerrοr="false"/>
    <echo message="clean classes dir end" ></echo>
    </target>

    <target name="init" depends="clean">
    <echo message="init  ${build.classes} begin" ></echo>
    <mkdir dir="${build.classes}"/>
    <mkdir dir="${build.resources}"/>
    <mkdir dir="${dir.classes}"/>
    <echo message="init  ${build.classes} end" ></echo>
    </target>

    <!-- 编译 -->
    <target name="javac" depends="init">
    <echo message="javac src..."/>
    <javac encoding="${encoding}" srcdir="${org.src}" destdir="${build.classes}" includeAntRuntime="false" >
    <classpath refid="jarPath" />
    </javac>
    <copy  todir="${build.resources}">
    <fileset dir="${org.resources}" />
    </copy>
    </target>

    <target name="copy" depends="javac">
    <copy  todir="${dir.classes}">
    <fileset dir="${build.classes}"/>
    </copy>
    </target>

    <target name="jars" depends="javac">
    <pathconvert  property="mf.classpath" pathsep=",">
    <mapper> 
    <chainedmapper> 
    <flattenmapper /> 
    <globmapper from="*" to="${dir.classes}/lib/*" /> 
    </chainedmapper> 
    </mapper> 
    <path refid="jarPath"/>
    </pathconvert>

    <jar destfile="${dir.classes}/${jar.name}" basedir="${build.classes}">  
                <manifest>  
                    <attribute name="Main-class" value="${main.classes}"/>  
                    <attribute name="Class-Path" value="${mf.classpath}"/>  
                </manifest>  
            </jar>
    </target>

    <target name="wars" depends="javac">
    <war basedir="${war.from}" destfile="${war.to}" encoding="${encoding}" excludes="${ignore}" />
    </target>


    <target name="test">
    <echo message="${basedir}" />
    <echo message="${org.src}" />
    </target>


    </project>



    四、总结

    整个流程稍微有点复杂,只要思路清晰这个build脚本还是很容易编写的。前提是你要懂得Java发布、编译、部署的流程,很多人用eclipse或MyEclipse来发布工程,好像很简单。其实在工具背后也是使用这些脚本完成的,知道在用户目录下有一个 .m2的目录么,这个就是eclipse工具的meven的缓存和配置的内容。所以当我们不使用这些ide的情况下,你怎么编译、部署你的项目呢~!这篇文章只是一个抛砖引玉的效果,希望能给大家一个启示。在这之前,我在网上搜集了些资料也没有找到打增量包的比较好的方法,全都是手动方式。

    同时,在一些自动集成或持续集成的智能工具中,也大量的使用到了这方面的技术。如果你想更智能的完成这个项目的发布、部署的话,这里只是其中的第一步。有兴趣的朋友可以研究下Continuous integration或Hudson等相关自动化集成技术应用。

    展开全文
  • web项目ant打包完整案例

    千次阅读 2015-12-13 17:01:31
    前两周做的web项目要部署到服务器上去,为了后续升级部署方便,决定采用Ant进行(开发用的myeclipse 8.5),ant打包测试也是在myeclipse上进行,build.xml测试完成后地通过本地配置的ant进行手工打包:ant -buildfile...
  • ant打包

    2020-07-30 23:31:46
    NULL 博文链接:https://410063005.iteye.com/blog/1936326
  • 使用Ant打包工具

    千次阅读 2015-10-14 10:00:21
    由于使用java,javac,jar等工具进行编译打包,即繁琐低效又容易出错,因此Ant出现了。Ant的出现就是专门为了打包编译java代码的,使用之前得稍微学一下。Ant的运行起来主要是依靠配置文件(XML格式),通常命名为...
  • ant编译打包

    千次阅读 2018-04-12 19:59:00
    下面这个ant脚本是我自己写来用来打包最近在做的一个项目。过程中遇到一些问题,在此记录一下。 &lt;?xml version="1.0" encoding="GB2312" ?&gt; &lt;project name="...
  • 使用ant打包WAR

    千次阅读 2018-11-29 17:27:55
    一、下载安装ant相关组件。 二、配置系统环境变量 三、创建build.xml 四、运行ant。 备注:由于是自己查询大量文章才完成的,如果有写得错误的希望各位指出。以下操作是在windows系统下。 详细步骤: 一、下载...
  • ant打包开启debug功能

    万次阅读 2012-01-31 16:34:52
    ant脚本中需要将javac这个target的debug属性设置为on才能在debug引用该jar的工程时时debug到该jar包中的代码如: ${classes.dir}" source="1.5" target="1.5" debug="on" deprecation="false" optimize="false" ...
  • ant进行编译和打包

    万次阅读 2017-08-22 18:08:44
    ant是目前java环境下最好用的打包部署工具,其采用xml的格式进行编写,功能非常强大。 现介绍一下如何手工使用ant进行java程序的编译打包。 一、安装ant 1.下载并安装ant。 到官方主页http://ant.apache.org下载...
  • ant-design-pro-vue 打包问题

    千次阅读 热门讨论 2020-04-29 14:26:14
    由于以前一直使用iview,使用iview的...结果没想到打包时出了问题。 通过标题可以知道我使用的脚手架是ant-design-pro-vue,这个脚手架采用的vue-cli3.0。 下面说说遇到的问题,由于没有仔细看过vue-cli3.0的...
  • 首先在配置基本信息的
  • 使用Ant打包时出现程序包javax.servlet.http不存在的错误
  • https://blog.csdn.net/kang_kang_/article/details/73550382 亲测有效
  • eclipse用ant打包具体流程

    千次阅读 2018-06-29 10:45:43
    https://blog.csdn.net/javazejian/article/details/50579416
  • IDEA使用Ant打包报错解决方法

    千次阅读 2019-05-23 16:17:06
    在IDEA中项目使用Ant打包报错 报错如下: at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1365) at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:1070) at org.apache.tools.ant....
  • 一、生成build.xml ...Eclipse中使用Ant为Android打包并且签名 SDK自带文件 在tools/ant目录下这3个文件   其中build.xml和uibuild.xml中定义了大量基础构建方法和打包策略。我们只需要建立我
  • ant执行的日志输出到文本中

    千次阅读 2013-10-17 10:40:15
    需要在build.xml文本中配置
  • eclipse 用ant 进行打jar 包

    千次阅读 2018-05-18 15:23:23
    eclipse 已经集成了ant 所以用起来还是很方便的 不用再自己去写build.xml 了,所以简单很多下面开始打包啦:1、在你的项目上右键 选择export 2、在小框框中输入ant 会搜索出 ant buildfiles 选中他,点击next 在...
1 2 3 4 5 ... 20
收藏数 36,335
精华内容 14,534
关键字:

ant打包