Ant实战篇 (二)

类别:Java 点击:0 评论:0 推荐:

Ant实战篇 (二)

                                                                             作  者:黄 凯        

E_mail:[email protected]

前 言

由于现在公司进行Unit Test Case的整理阶段,所以抽空对Ant和Junit技术进行了一下了解,以下是集合了众家所长之精华(考虑到是按我的思路总结的,也许不能完全表述原作者的思路,所以在参考中我把所有参考过的文章网址或书籍都罗列了出来,大家有时间不妨去看看原文)。

如果对Ant部分参数不明白的话,请参看《Ant理论篇》系列或ant自带的文档。

 

在这里要特别感谢我的同事王万鹏为本文档提供demoEJB实例,促使本文档提前完成。同时也要感谢一直以来给以我帮助的葛威龙同事,因为本人英文水准不高,很多不解的地方都得到了他大力的协助。在此特对他们表示衷心的谢意!!!

 

目 录

一、 Ant使用实例

   1.1 通过Antcopt task将当前目录下最近更新的文件(按系统时间来区分)文件提交至指定目录

   1.2 用Ant开发java程序

    1.3 ant结合junit进行软件自动测试

    1.4 ant开发和部署web应用程序

    1.5 ant打包(jar应用程序

    1.6 ant开发EJB应用程序

参考

 

1.5 ant打包(jar应用程序

1> 前提:

本例使用的目录结构如下:

D:\ age

     src  java源文件目录

     META-INF 配置文件目录

2> 在src目录下创建VirtualAge.java和MyVirtualAge.java文件。

VirtualAge.java内容如下:

public final class VirtualAge

{

    public static int yeasOld(int i)

     {

         return i+1;

    }

}

MyVirtualAge.java内容如下:

public class MyVirtualAge

{

     public static void main(String[] args)

     {

        int myAge= 10;

         System.out.println("My Age is "+myAge);

        System.out.println("My Virtual Age is "+VirtualAge.yeasOld(myAge));

    }

}

3> 在age目录下建立build.properties和build.xml文件。

build.properties文件内容如下:

src=src

classes=classes

jar=jar

manifest=META-INF

author.name=Kay

build.xml文件内容如下:

<?xml version="1.0"?>
<project default="help" basedir=".">
 
    <property file="build.properties"/>

    <target name="init">
        <mkdir dir="${classes}"/>    
        <mkdir dir="${jar}"/>     
    </target> 
    
    <target name="build" depends="init">
        <javac destdir="${classes}">
            <src path="${src}"/>
        </javac>
    </target>
    
    <target name="jar" depends="build">
        <jar destfile="${jar}/age.jar">
            <fileset dir="${classes}"/>
         <manifest>
          <attribute name="Built-By" value="${author.name}"/>
       <attribute name="Main-Class" value="MyVirtualAge"/>
         </manifest>
        </jar>
    </target>
    
    <target name="run" depends="jar">
        <java classname="MyVirtualAge"
         fork="true"
         failonerror="true">
         <arg value="-jar"/>
         <classpath>
          <pathelement location="${jar}/age.jar"/>
         </classpath>
        </java>
    </target>
    
    <target name="runjar" depends="jar">
        <java jar="${jar}/age.jar"
         fork="true"
         failonerror="true">
         <arg value="-jar"/>
         <classpath>
          <pathelement location="${jar}/age.jar"/>
         </classpath>
        </java>
    </target>

 <target name="clean">
     <delete includeEmptyDirs="true">
            <fileset dir="${classes}"/>
            <fileset dir="${jar}"/>
       </delete>
   </target>
   
   <target name="help">
       <echo message="init             Initialization"/>
       <echo message="build            Compiler the java build class"/>
       <echo message="jar              Make JAR Archive file"/>
       <echo message="run              Run JAR Archive file with a appointed class entry"/>
       <echo message="runjar           Run JAR Archive file with a Main-Class entry"/>
       <echo message="clean            Clean the ant create's file and directory"/>
       <echo message="help             Prints this message"/>
   </target>

</project>
4> 在age目录下运行ant runjar查看结果(也可以试试运行ant run,结果是一样的)。

 

1.6 ant开发EJB应用程序

1> 本例使用的目录结构如下:

D:\ demoEJB

     src  java源文件目录

     conf 配置文件目录

2> 在src目录下创建ConverterEJB.java、ConverterHome.java、Converter.java和Client.java文件。

ConverterEJB.java文件内容如下:

import java.rmi.RemoteException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

import java.math.*;

 

public class ConverterEJB implements SessionBean {

    BigDecimal yenRate = new BigDecimal("121.6000");

    BigDecimal euroRate = new BigDecimal("0.0077");

 

    public BigDecimal dollarToYen(BigDecimal dollars) {

        BigDecimal result = dollars.multiply(yenRate);

        return result.setScale(2,BigDecimal.ROUND_UP);

    }

 

    public BigDecimal yenToEuro(BigDecimal yen) {

        BigDecimal result = yen.multiply(euroRate);

        return result.setScale(2,BigDecimal.ROUND_UP);

    }

 

    public ConverterEJB() {}

    public void ejbCreate() {}

    public void ejbRemove() {}

    public void ejbActivate() {}

    public void ejbPassivate() {}

    public void setSessionContext(SessionContext sc) {}

}

ConverterHome.java文件内容如下:

import javax.ejb.EJBHome;

 

import java.io.Serializable;

import java.rmi.RemoteException;

import javax.ejb.CreateException;

import javax.ejb.EJBHome;

 

public interface ConverterHome extends EJBHome {

    Converter create() throws RemoteException, CreateException;

}

Converter.java文件内容如下:

import javax.ejb.EJBObject;

import java.rmi.RemoteException;

import java.math.*;

 

public interface Converter extends EJBObject {

    public BigDecimal dollarToYen(BigDecimal dollars) throws RemoteException;

    public BigDecimal yenToEuro(BigDecimal yen) throws RemoteException;

}

Client.java文件内容如下:

import java.rmi.RemoteException;

import java.util.Collection;

import java.util.Hashtable;

import java.util.Properties;

import java.util.Vector;

import java.util.Iterator;

import javax.ejb.CreateException;

import javax.ejb.DuplicateKeyException;

import javax.ejb.FinderException;

import javax.ejb.ObjectNotFoundException;

import javax.ejb.RemoveException;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.rmi.PortableRemoteObject;

import java.math.BigDecimal;

 

public class Client {

    private static Context getInitialContext() throws NamingException {

        try {

            Properties h = new Properties();

            h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");

            h.put(Context.PROVIDER_URL, "t3://localhost:7001");

            return new InitialContext(h);

        } catch (NamingException ne) {      

            throw ne;

        }

    }

    public static void main(String[] args) {

        try {

            Context initial = getInitialContext();

            Object objref = initial.lookup("ejb/session/converter");

            ConverterHome home =(ConverterHome)PortableRemoteObject.narrow(objref,ConverterHome.class);

            Converter currencyConverter = home.create();

 

            BigDecimal param = new BigDecimal ("100.00");

            BigDecimal amount = currencyConverter.dollarToYen(param);

            System.out.println(amount);

            amount = currencyConverter.yenToEuro(param);

            System.out.println(amount);

           

            System.exit(0);

        } catch (Exception ex) {

            System.err.println("Caught an unexpected exception!");

            ex.printStackTrace();

        }

    }

}

3> 在demoEJB目录下建立build.properties和build.xml文件。

build.properties文件内容如下:

src=src

conf=conf

classes=classes

manifest=classes/META-INF

jar=jar

weblogic.lib=c:/bea/weblogic700/server/lib

author.name=Kay

username=training

user.password=training

ejb.name=demoEJB

weblogic.deploy.dir=C:/bea/user_projects/mydomain/myserver/upload

build.xml文件内容如下:

<?xml version="1.0"?>
<project default="help" basedir=".">
 
    <property file="build.properties"/>
    
    <path id="bea.class.path">
        <fileset dir="${weblogic.lib}">
            <include name="weblogic.jar"/>
        </fileset>
    </path>

    <target name="init">
        <mkdir dir="${classes}"/>  
        <mkdir dir="${manifest}"/> 
        <mkdir dir="${jar}"/> 
        <copy todir="${manifest}">
            <fileset dir="${conf}">
                <include name="ejb-jar.xml"/>
                <include name="weblogic-ejb-jar.xml"/>
            </fileset>
        </copy>   
    </target> 
    
    <target name="build" depends="init">
        <javac srcdir="${src}" destdir="${classes}" includes="*.java">
            <classpath refid="bea.class.path"/>
        </javac>
    </target>
    
    <target name="jar" depends="build">
        <jar destfile="${jar}/${ejb.name}.jar">
            <fileset dir="${classes}"/>
            <manifest>
          <attribute name="Built-By" value="${author.name}"/>
       <attribute name="Main-Class" value="Client"/>
         </manifest>
        </jar>
    </target>
    
    <target name="deploy" depends="jar">
     <serverdeploy action="deploy" source="${jar}/${ejb.name}.jar">
         <weblogic application="${ejb.name}"
          server="t3://127.0.0.1:7001"
          classpath="${weblogic.lib}/weblogic.jar"
          username="${username}"
          password="${user.password}"  
          component="${ejb.name}:myserver"    
          debug="true"/>
        </serverdeploy>
    </target>
    
    <target name="redeploy" depends="jar">
     <serverdeploy action="update" source="${jar}/${ejb.name}.jar">
         <weblogic application="${ejb.name}"
          server="t3://127.0.0.1:7001"
          classpath="${weblogic.lib}/weblogic.jar"
          username="${username}"
          password="${user.password}"  
          component="${ejb.name}:myserver"    
          debug="true"/>
        </serverdeploy>
    </target>
    
    <target name="undeploy">
     <serverdeploy action="undeploy">
         <weblogic application="${ejb.name}"
          server="t3://127.0.0.1:7001"
          classpath="${weblogic.lib}/weblogic.jar"
          username="${username}"
          password="${user.password}"   
          debug="true"/>
        </serverdeploy>
    </target>
    
    <target name="delete">
        <serverdeploy action="delete">
         <weblogic application="${ejb.name}"
          server="t3://127.0.0.1:7001"
          classpath="${weblogic.lib}/weblogic.jar"
          username="${username}"
          password="${user.password}"/>
        </serverdeploy>
    </target>
    
    <target name="run">
        <java classname="Client"
         fork="true"
         failonerror="true">
         <classpath refid="bea.class.path"/>
         <classpath>            
          <pathelement location="${weblogic.deploy.dir}/${ejb.name}/${ejb.name}.jar"/>
         </classpath>
        </java>
    </target>

 <target name="clean">
     <delete includeEmptyDirs="true">
            <fileset dir="${classes}"/>
            <fileset dir="${jar}"/>
            <fileset dir="${weblogic.deploy.dir}/${ejb.name}"/>
       </delete>
   </target>
   
   <target name="help">
       <echo message="init             Initialization"/>
       <echo message="build            Compiler the java build class"/>
       <echo message="jar              Make JAR Archive file"/>
       <echo message="deploy           Deploy the JAR Archive file"/>
       <echo message="redeploy         Redeploy the JAR Archive file"/>
       <echo message="undeploy         Undeploy the JAR Archive file"/>
       <echo>delete           Delete the JAR Archive file's location from Web
                 application</echo>
       <echo message="run              Run JAR Archive file with a appointed class entry"/>
       <echo message="clean            Clean the ant create's file and directory"/>
       <echo message="help             Prints this message"/>
   </target>

</project>

4> 启动Weblogic server,然后在age目录下首先运行ant deploy部署,然后运行ant run查看结果。

 

参考

Ant 的使用

作者:不详

原址:http://php.igt.com.tw/unit_116.htm

 

使用 ANT 开发 Java 程序

作者:cinc

原址:http://www.douzhe.com/bbsjh/14/434.html

 

利用Ant实现项目自动构建测试备份并发布到项目web

作者:beyondii

原址:http://www.csdn.net/Develop/Read_Article.asp?Id=20443

      http://www.csdn.net/Develop/Read_Article.asp?Id=20444

      http://www.csdn.net/Develop/Read_Article.asp?Id=20445

      http://www.csdn.net/Develop/Read_Article.asp?Id=20446

 

让编译和测试过程自动化

作者:Erik Hatcher

原址:http://www-900.ibm.com/developerWorks/cn/java/j-junitmail/

 

《J2EE应用开发(Weblogic+JBuilder)》

出版社: 电子工业出版社

 

《The BestBook Advanced Programmer Java2》

作者:张洪斌

出版社:不详

本文地址:http://com.8s8s.com/it/it17075.htm