打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
weblogic下ant 的使用

weblogic下ant 的使用

2005/03/01  作者:yonge   心情:
  星期二 (10:09)

关于ant的好处,不多说,大家去http://ant.apache.org去看看就知道了。目前ant支持很多种语言,而且几乎所有的Java开发工具都提供了ant的支持。比如我用的最多的JBuilder和Eclipse都对ant提供了很好的支持。ant使用一个xml文件来描述需要做的事情,然后通过ant的工具包运行这个xml文件来实现我们需要实现的功能。一般情况下,这个xml文件取名叫build.xml。也可以是其它名字,但是必须要在编译的时候指定文件名。

ant功能非常强大,也是XP(极限编程)所推崇的一个工具。就我们用的最多的功能,就是编译.java文件,打包成.jar文件,编译EJB,生成war,生成ear,生成报告等等。前面几种功能用的非常多,但是生成报告和相应的xml/HTML文件报告的功能也是非常有好处的。但是本文不准备做这方面的介绍。(还记得吴忠宪的经典语录吧:“接下来大家一定以为我采访下一个小马,错~我要采访我们的吉他手,这才是我们节目的精髓,让你永远想不到我们要做什么(走到吉他手旁边)现在我站在吉他手旁边,(转向鼓手)那么请鼓手谈谈想法~~但是他的看法我们不care~~(然后走开)”)我们主要介绍前面说道的几种常用的命令。嘿嘿~

首先,需要说明一下build.xml文件的一些信息,build.xml文件是通过一系列的property、target、path等组织起来的。property可以用来保存一些常量信息,比如JAVA_HOME路径、BEA_HOME路径、src的路径、build的临时目录的路径等等。然后在其它地方使用${propertyName}的方式进行引用。这样就可以避免要修改一个路径需要通篇修改build.xml文件的问题。path是一些路径信息,比如我们可以指定编译我们的应用需要的一些jar包的位置信息,举例说明一下

  <path id="project.class.path">
    <pathelement location="${dest}"/>
    <fileset dir="${WebLogic}" includes="**/*.jar"/>
    <fileset dir="${strus1.1-final.home}" includes="**/*.jar"/>
    <fileset dir="${jdk.home}/jre/lib" includes="**/*.jar"/>
    <fileset dir="${jdk.home}/lib" includes="**/*.jar"/>
  </path>

这里,我把所有需要用来编译应用的包都放到一起,取名叫project.class.path,然后在编译的时候,提供给ant 命令当作参数来使用。最后一个就是target,一个target就是我们的一个目标,整个build.xml是由很多的target组织起来的,比如我们的init的target,我们的compile的target,比如我们的编译ejb的target,比如我们打包的ear的target等等。这些target之间可以存在一个依赖关系,也就是,一个target的执行,必须在另外一个target的执行之后,才能执行。比如
 <target depends="cleanxml,cleanclass" name="clean"/>
 其意义是说,当前的target名字是clean,它的执行必须先执行名字叫cleanxml和cleanclass的target。关于其它更详细的信息,比如可以在一个xml中引用另一个xml文件等等,因为和我们介绍的内容关系不大,就不一一详细列举了。

可能我们在使用ant的时候,需要用到一些系统变量,比如我们设置的JAVA_HOME、PROJECT_HOME等等。如何在ant中得到这些内容呢?其实说穿了,so so eary。在你的build.xml文件中建立一个property就可以了。

 <property environment="env"/>
 <property name="jdk.home" value="${env.JAVA_HOME}"/>

 OK,现在jdk.home的属性里边就保存了我们在系统中设置的JAVA_HOME的值了。是不是非常简单。

因为我们是要在weblogic下发布和运行我们的应用,所以这里需要得到weblogic的一些jar包的路径信息。

 <property name="WebLogic" value="${env.WEBLOGIC_HOME}/weblogic81/server/lib"/>

一.使用ant来编译.java文件,这是最常用的功能。

  <target name="compile">
    <javac excludes="$(xml.home)" bootclasspathref="project.class.path" classpathref="j2ee.path" debug="true" deprecation="true" destdir="${dest}" nowarn="false" source="1.4">
      <src path="${src}"/>
    </javac>
  </target>

关于其中的javac命令和相应的属性意义,我们就不一一介绍了。当我们执行ant compile的时候,就会把src目录下的所有java文件编译成class文件,放到${dest}目录下。这里需要说明一点,如果你的应用中含有assert这种语句。那么一定要设定javac的属性source为1.4,否则会报错。错误信息如下:

 warning: as of release 1.4, assert is a keyword, and may not be used as an identifier

其实在JBuilder9和Eclipse中,默认的编译选项都会存在这个问题。Eclipse中,我们只需要在Windows-preferences-java-compiler-compliance and classfiles下面,去掉Use defalut compliance settings前面的选择,然后在下面相应的选项中选择1.4就可以了。同理,在JBuider9中选中项目,然后右键选择属性,在其中有一个enable assert keyword,选中就可以了(JBuilderx还没有用过)

二.使用ant打包成jar文件

很多的时候,我们的应用都要打包进行发布,这样不至于源文件过于分散。打包的理由就不详细说明了。

 <jar jarfile="temp.jar" basedir="${dest}">
  <zipfileset src="${lib.home}/commons-logging.jar"/>
  <zipfileset src="${lib.home}/junit.jar"/>
  <zipfileset src="${lib.home}/log4j-1.2.8.jar"/>
  <fileset dir="${src}" includes="**/*.properties"/>
 </jar>
  

这里需要说明一下,这里使用的zipfileset,主要是在程序打包的时候,把相应的包也一起打包成一个整体。一般情况下,这是不需要的,因为你所打包的东西是可以和别的jar包一起来使用运行。但是我发现,如果你使用了EJB,可能会有些麻烦。
 举例来说,我的ejb文件中的打印信息,我都采用了log4j来处理。如果这里打包不包含这些jar包,那么编译后的ejb在执行的时候,会不停的抛出java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory,就算你吧相应的jar包都和所有的ejb包组合在一起打包成一个ear来执行都不行。非常奇怪,只能在初次打包的时候就加入进去,然后编译ejb,再执行。

三.使用ant编译基于Weblogic的ejb

在编译ejb之前,首先需要把相应的源文件先打包成一个临时的jar文件(执行二),要保证相应的xml文件都正确无误。xml文件主要包括ejb-jar.xml、weblogic-ejb-jar.xml、weblogic-cmp-rdbms-jar.xml、weblogic-cmp-extras.xml。后两个xml文件是在有cmp的情况下才使用的。关于这些文件的具体配置,在此不详述。

 <java classname="weblogic.appc" failonerror="true" fork="true" jvm="${jdk.home}/bin/java">
  <classpath>
   <fileset dir="${WebLogic}" includes="**/*.jar"/>
   <fileset dir="${lib.home}" includes="**/*.jar"/>
  </classpath>
  <arg value="-keepgenerated"/>
  <arg value="-forceGeneration"/>
  <arg value="-compiler"/>
  <arg value="${jdk.home}/bin/javac"/>
  <arg value="temp.jar"/>
  <arg value="-output"/>
  <arg value="ejb.jar"/>
 </java>
 

这其实是简单的通过java来调用Weblogic提供的一个编译ejb的程序,来编译并且打包我们的ejb应用。这里的classpath是我们在编译过程中,需要用到的jar包的集合。关于这个命令的详细的说明,大家可以参考bea文档库的说明。http://e-docs.bea.com/wls/docs81/ejb/appc_ejbc.html
 这个命令通过简单的调用weblogic.appc和刚才编译好的temp.jar文件和一些配置来生成最终的ejb.jar文件。这一步就编译出来我们真正可以执行的ejb了。看来也很简单啊!

四.打包war应用

通过ant来打包war应用,可以使用ant提供的标准war命令来实现。

 <target depends="resource" name="war">
  <war compress="false" destfile="myapp.war" webxml="myapp/WEB-INF/web.xml">
   <!-- 所有app应用的class文件 -->
   <classes dir="${src.home}">
    <patternset refid="dest.exclude"/>
    <include name="**/*.*"/>
   </classes>
   <!-- 所有的应用需要的文件.js、jsp、properties、jpeg等等 -->
   <fileset dir="csm">
           <include name="**/*.class"/>
    <include name="**/*.config"/>
    <include name="**/*.ear"/>
    <include name="**/*.gif"/>
    <include name="**/*.htm"/>
    <include name="**/*.html"/>
    <include name="**/*.jar"/>
    <include name="**/*.jnlp"/>
    <include name="**/*.jpe"/>
    <include name="**/*.jpeg"/>
    <include name="**/*.jpg"/>
    <include name="**/*.JPG"/>
    <include name="**/*.js"/>
    <include name="**/*.jsp"/>
    <include name="**/*.properties"/>
    <include name="**/*.war"/>
    <include name="**/*.xml"/>
    <include name="**/*.zip"/>
    <exclude name="WEB-INF/web.xml"/>
    <exclude name="WEB-INF/lib/"/>
    <exclude name="WEB-INF/classes/"/>
   </fileset>
   <!-- WEB-INF下面的文件,注意不要包含web.xml文件 -->
   <fileset dir="csm">
    <exclude name="WEB-INF/web.xml"/>
    <include name="WEB-INF/*.*"/>
   </fileset>
   <!-- 所有需要用到的lib包 -->
   <lib dir="${lib.home}">
    <include name="commons-beanutils.jar"/>
    <include name="commons-collections.jar"/>
    <include name="commons-digester.jar"/>
    <include name="commons-fileupload.jar"/>
    <include name="commons-lang.jar"/>
    <include name="commons-logging.jar"/>
    <include name="commons-validator.jar"/>
    <include name="log4j-1.2.8.jar"/>
    <include name="struts.jar"/>
    <include name="tclcsm.jar"/>
   </lib>
  </war>
 </target>

五.打包为ear

我们的应用都可以打包成一个ear文件。注意,需要提供一个application.xml文件。这里只是简单的举例说明,把ejb打包成一个ear,没有太大的实际意义。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "
http://java.sun.com/dtd/application_1_3.dtd">
<application>
  <display-name>Myapp</display-name>
  <module>
    <ejb>ejb.jar</ejb>
  </module>
</application>
 相应的ant命令如下:
    <ear appxml="${ear.home}/META-INF/application.xml" compress="false" destfile="Myapp.ear">
      <fileset dir="${ear.home}" includes="ejb.jar"/>
    </ear>
  </target>

六.在WebLogic上发布和更新ejb

需要先说明一下,发布ejb和更新ejb的命令,ant的标准文档上提供了一个命令叫serverdeploy,他提供了一个专门针对weblogic的发布方法。同时,WebLogic也提供了一个服务weblogic.Deployer也可以用来发布更新和取消发布,很遗憾,我试用了一下,不好使,可能我使用的参数有问题,大家可以自行研究一下。
 另外,如果应用是第一次发布,也就是说你的WebLogic上面还没有这个应用名字,可能需要使用deploy,而重新发布,必须使用update。我试用了一下,用undeploy,然后再用deploy好像会出问题。一直没有搞懂是怎么回事。

  <target name="deploy">
    <serverdeploy action="deploy" source="ejb.jar">
        <weblogic application="myejb"
            server="t3://localhost:7001"
     classpath="${WebLogic}/weblogic.jar"
            username="weblogic"
            password="xxxxxxxx"
            component="myejb:myserver"
            debug="true"/>
    </serverdeploy>
  </target>
  <target name="update">
    <serverdeploy action="update" source="ejb.jar">
        <weblogic application="myejb"
            server="t3://localhost:7001"
            classpath="${WebLogic}/weblogic.jar"
            username="weblogic"
            password="xxxxxxxx"
            component="myejb:myserver"
            debug="true"/>
    </serverdeploy>
  </target>

还需要说明一下,如果你在使用这两个命令,一定要注意修改用户名和密码,同时要修改server和component等参数。我曾经试过,把用户名和密码写在一个properties中,但是在发布和update的时候,总是提示认证不通过的问题,有谁知道,可以告诉我。

七.在WebLogic上发布和更新war

发布war和发布ejb基本上没有太大变化,只是修改一下source参数即可。

等我写完了,我才发现,这篇文章跟WebLogic没有太大关系,嘿嘿

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
XDoclet:EJB开发好帮手
无所不能的“蚂蚁”--Ant(一)(二)(三)(四)
Ant 的安装
Jmeter默认报告优化
Ant的使用
ant 使用指南
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服