ant部署 简单入门

     通过一个build.xml脚本进行ant部署的示例,主要执行了下面5个步骤:
 
1.定义变量
   build.xml脚本定义了整个脚本将使用的大量变量;
  
<project name="helloservlet" default="deploy" basedir=".">    <description>        build file to compile, package and deploy helloservlet    </description>    <property name="servlet-name" value="helloservlet"/>    <property name="weblogic.user" value="weblogic"/>    <property name="weblogic.password" value="weblogic"/>    <property name="weblogic.adminurl" value="t3://localhost:7001"/>
 
2.创建目录
    build.xml脚本为helloservlet.class文件创建一个类目录,weblogic server在这个目录中查找已编译的java类。
   
<target name="init">        <mkdir dir="web-inf/classes"/></target>
 
3.编译java文件
   build.xml脚本调用java编译器javac,把java文件编译到目录web-inf \ class下,
        以后weblogic server将在这里查找它们。
  
<target name="compile" depends="init">        <javac srcdir="." destdir="web-inf/classes"/></target>
 
4.使用jar创建新的.war包(应用程序包);
  
<target name="package" depends="compile">        <war destfile="${servlet-name}.war" webxml="web-inf/web.xml">            <fileset dir=".">                <exclude name="${servlet-name}.war"/>                <exclude name="web-inf/web.xml"/>                <exclude name="meta-inf/manifest.mf"/>            </fileset>        </war></target>
 
5.部署.war包
   调用weblogic的deployer工具进行组件的部署。
   <target name="deploy" depends="package">        <wldeploy action="deploy"           source="${servlet-name}.war"          user="${weblogic.user}" password="${weblogic.password}"           adminurl="${weblogic.adminurl}" />    </target>    </project>
 
 
<span style="color: #ff6600;">简单详述ant</span>
 
ant的组成(主要由三部分组成:project、target、task):
   1、project(项目)
        基本属性:name、default、basedir。
        一个build.xml只能存在一个project工程。<br>     
      name :项目名称<br>      default :缺省开始执行的target<br>      basedir :用于计算所有其他路径的基路径。<br>    
 2、target
      一个项目可以定义一个或多个target;
      一个target是一系列你想要执行的任务,如编译任务、打包任务、混淆任务。<br>  <br>       target的基本属性:
             name:target的名字
             depends:该target依赖关系
             description: target的描述信息
     
    ant  在执行时以target为单位,执行顺序是从下至上,依次执行,
           但是target 的 depends属性 可以决定了哪个target先执行,因此我们可以通过target来构造编译顺序。
           假如某个target没有depends属性,那么就按顺序执行。
 
3、task
     ant 执行的一系列任务是由target构成的,而target又是由数个小的task构成的,
      task 任务是最小的运行单位,我们可以把copy、delete、mkdir等操作认为是一个小任务。
<br>   (1)copy任务
<br>      a.拷贝单个文件:          
<copy file="demo/manifest.mf" todir="temp/build/meta-inf" /> 
          <span style="color: #ff0000;"> 解释:把一个文件拷贝到拷贝相关文件夹中。</span>
<br>     b.拷贝文件夹:       
<copy todir="temp/build">     <fileset dir="temp/classes"/></copy> 
            <span style="color: #ff0000;"> 解释:把temp/build目录下的所有文件,拷贝到temp/classes目录中去</span>
<br>      c.替换拷贝       
<copy todir="temp/build">   <fileset dir="temp/classes" includes="*.class" />   <filterset>        <filter token="@time@" value="${app.time}"/>   </filterset></copy> 
           <span style="color: #ff0000;">  解释:<filterset>过滤集,可以将temp/classes文件夹下的存在@time@标记的文件,</span>
<span style="color: #ff0000;">                                                        替换为变量${app.time}值。这样在完成拷贝的同时也完成了替换任务。</span><br>   (2)mkdir任务和delete任务
<br>      a.单独的delete和mkdir任务     
//删除 <delete dir="temp/src"/>  <delete file="temp/build/thumbs.db" />//创建<mkdir dir="temp/src"/>
    <br>      b. 带有条件的删除任务       
<delete>         <fileset dir="store" includes="*.*"/>         <fileset dir="source" excludes="*.java"/>                                  </delete>       
      <span style="color: #ff0000;">  解释:include表示要删除哪些文件;而excludes表示排除的文件;</span>
<br>   (3)replace替换任务
<br>       a.替换某一文件中的字符串        
<replace file ="base/testing.txt">     token="@temp@"      value="${newstring}"</replace>
         <span style="color: #ff0000;"> 解释:token是需要替换的标记;value是新值,将testing.txt文件中的@temp@替换为新值。</span>
<br>            b.替换某个文件夹中存在特定标记的文件   
<replace dir="temp" token="@charset@" value="${webapp.charset}"/> 
          <span style="color: #ff0000;">解释:temp目录中文件,如果有存在@charset@标记的,将被替换为${webapp.charset}变量值。</span>
<br>            c.批量替换
<replace dir="dist" includes="${app.project}.jad" encoding="utf-8">     <replacefilter token="@name@" value="${app.name}"/>     <replacefilter token="@vendor@" value="${app.vendor}"/>     <replacefilter token="@midlet@" value="${app.midlet}"/>     <replacefilter token="@jar@" value="${app.project}"/>     <replacefilter token="@filesize@" value="${size}"/>     <replacefilter token="@description@" value="${app.description}"/>                  <replacefilter token="@price@" value="${app.price}"/></replace>
 <br>   (4) javac任务 ,编译源程序 
<target name="compile" description="compile java source files">    <javac srcdir="src"               destdir="temp/classes"               bootclasspath="${compile.classpath}"               target="1.1"               debug="on"               deprecation="on"               includes="*.java"               optimize="true"               encoding="utf-8"     /> </target>
 <span style="color: #ff0000;">     解释:bootclasspath参数(启动类库):它已经包含了jre/lib目录下的rt.jar,以及我们自定义的类库。</span>
<span style="color: #ff0000;">              如果使用classpath参数,仅指我们定义的类库;</span>
 
    (5) java任务
            为运行java应用程序,需要使用java任务
           a.运行一个类      
<target name="run" description="run the program">     <java classname="${main}" classpath="${classpath}"/></target>
         <span style="color: #ff0000;">解释:classname表示要运行的主类。<br></span><br>           b.运行某一特定类,并加上运行参数。
<java fork="true" classname="proguard.proguard" classpath="${proguard.classpath}">             <arg line="-libraryjars ${proguard.classpath}"/>             <arg line="-injars temp/${app.project}_tmp.jar"/>             <arg line="-outjar temp/${app.project}_obf.jar"/>             <arg line="-defaultpackage ''"/>             <arg line="-dontusemixedcaseclassnames"/>             <arg line="-keep public class ${app.midlet}"/></java>
        <span style="color: #ff0000;">解释:fork参数:为true时,在新的jvm实例中运行,不影响当前jvm工作<br></span>
   <span style="color: #ff0000;"> 如何减少文件的size?</span><br>        使用3.3.2版本的proguard.jar,然后在混淆参数中添加两行代码:
<arg line = "-overloadaggressively"/>                   <arg line="-keepclasseswithmembers public class ${app.midlet} {public void startapp();public void destroyapp(boolean);}"/>
       这样可以保证startapp和destroyapp不被打上final修饰符,同时还能更大的压缩代码,
        不过要求midlet类中startapp和destroyapp方法保持上面的形式。
<br>(6)jar任务<br>        将编译好的class文件打成jar包,这是jar任务的工作:       
<target name="jar" depends="compile" description="build jar file">  <jar jarfile="dist/${name}.jar"         basedir="${tmp/class}"         manifest="tmp/res/manifest.mf"         manifestencoding="utf-8">    <fileset dir="res" includes="*.*"/>    <!-- 将res目录中的文件也打进jar包 -->  </jar></target>
 
(7)exec任务,用以调用外部程序
<exec executable="${lib_path}/preverify.exe">    <arg line="-classpath ${compile.classpath} -d temp/build temp/obfuscate"/></exec>
 
 

你可能感兴趣的:(java,工作)