日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

weblogic下ant 的使用

 iversion 2007-09-11

weblogic下ant 的使用

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

關于ant的好處,不多說,大家去http://ant.去看看就知道了。目前ant支持很多種語言,而且?guī)缀跛械腏ava開發(fā)工具都提供了ant的支持。比如我用的最多的JBuilder和Eclipse都對ant提供了很好的支持。ant使用一個xml文件來描述需要做的事情,然后通過ant的工具包運行這個xml文件來實現(xiàn)我們需要實現(xiàn)的功能。一般情況下,這個xml文件取名叫build.xml。也可以是其它名字,但是必須要在編譯的時候指定文件名。

ant功能非常強大,也是XP(極限編程)所推崇的一個工具。就我們用的最多的功能,就是編譯.java文件,打包成.jar文件,編譯EJB,生成war,生成ear,生成報告等等。前面幾種功能用的非常多,但是生成報告和相應的xml/HTML文件報告的功能也是非常有好處的。但是本文不準備做這方面的介紹。(還記得吳忠憲的經典語錄吧:“接下來大家一定以為我采訪下一個小馬,錯~我要采訪我們的吉他手,這才是我們節(jié)目的精髓,讓你永遠想不到我們要做什么(走到吉他手旁邊)現(xiàn)在我站在吉他手旁邊,(轉向鼓手)那么請鼓手談談想法~~但是他的看法我們不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 命令當作參數(shù)來使用。最后一個就是target,一個target就是我們的一個目標,整個build.xml是由很多的target組織起來的,比如我們的init的target,我們的compile的target,比如我們的編譯ejb的target,比如我們打包的ear的target等等。這些target之間可以存在一個依賴關系,也就是,一個target的執(zhí)行,必須在另外一個target的執(zhí)行之后,才能執(zhí)行。比如
 <target depends="cleanxml,cleanclass" name="clean"/>
 其意義是說,當前的target名字是clean,它的執(zhí)行必須先執(zhí)行名字叫cleanxml和cleanclass的target。關于其它更詳細的信息,比如可以在一個xml中引用另一個xml文件等等,因為和我們介紹的內容關系不大,就不一一詳細列舉了。

可能我們在使用ant的時候,需要用到一些系統(tǒng)變量,比如我們設置的JAVA_HOME、PROJECT_HOME等等。如何在ant中得到這些內容呢?其實說穿了,so so eary。在你的build.xml文件中建立一個property就可以了。

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

 OK,現(xiàn)在jdk.home的屬性里邊就保存了我們在系統(tǒng)中設置的JAVA_HOME的值了。是不是非常簡單。

因為我們是要在weblogic下發(fā)布和運行我們的應用,所以這里需要得到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命令和相應的屬性意義,我們就不一一介紹了。當我們執(zhí)行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文件

很多的時候,我們的應用都要打包進行發(fā)布,這樣不至于源文件過于分散。打包的理由就不詳細說明了。

 <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包一起來使用運行。但是我發(fā)現(xiàn),如果你使用了EJB,可能會有些麻煩。
 舉例來說,我的ejb文件中的打印信息,我都采用了log4j來處理。如果這里打包不包含這些jar包,那么編譯后的ejb在執(zhí)行的時候,會不停的拋出java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory,就算你吧相應的jar包都和所有的ejb包組合在一起打包成一個ear來執(zhí)行都不行。非常奇怪,只能在初次打包的時候就加入進去,然后編譯ejb,再執(zhí)行。

三.使用ant編譯基于Weblogic的ejb

在編譯ejb之前,首先需要把相應的源文件先打包成一個臨時的jar文件(執(zhí)行二),要保證相應的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./wls/docs81/ejb/appc_ejbc.html
 這個命令通過簡單的調用weblogic.appc和剛才編譯好的temp.jar文件和一些配置來生成最終的ejb.jar文件。這一步就編譯出來我們真正可以執(zhí)行的ejb了??磥硪埠芎唵伟?

四.打包war應用

通過ant來打包war應用,可以使用ant提供的標準war命令來實現(xiàn)。

 <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./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上發(fā)布和更新ejb

需要先說明一下,發(fā)布ejb和更新ejb的命令,ant的標準文檔上提供了一個命令叫serverdeploy,他提供了一個專門針對weblogic的發(fā)布方法。同時,WebLogic也提供了一個服務weblogic.Deployer也可以用來發(fā)布更新和取消發(fā)布,很遺憾,我試用了一下,不好使,可能我使用的參數(shù)有問題,大家可以自行研究一下。
 另外,如果應用是第一次發(fā)布,也就是說你的WebLogic上面還沒有這個應用名字,可能需要使用deploy,而重新發(fā)布,必須使用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等參數(shù)。我曾經試過,把用戶名和密碼寫在一個properties中,但是在發(fā)布和update的時候,總是提示認證不通過的問題,有誰知道,可以告訴我。

七.在WebLogic上發(fā)布和更新war

發(fā)布war和發(fā)布ejb基本上沒有太大變化,只是修改一下source參數(shù)即可。

等我寫完了,我才發(fā)現(xiàn),這篇文章跟WebLogic沒有太大關系,嘿嘿

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多