要发布EJB 时必须把她打成*.jar 文件,一个EJB 打包后的目录结构如下:
EJB 应用根目录 | -- com (你的.class 文件) | -- META-INF | -- MANIFEST.MF (如果使用工具打包,该文件由工具自动生成)
点“完成”就结束了打包。
2. Ant 打包任务采用Ant 进行打包是比较方便的,也是作者推荐的打包方式。下面我们看一个简单的打包任务。
<?xml version="1.0"?> <project name="jartest" default="jar" basedir="."> <property name="build.dir" value="${basedir}/build" /> <property name="build.classes.dir" value="${build.dir}/classes" /> <target name="jar" description="打包成Jar"> <jar jarfile="${basedir}/ejbfile.jar"> <fileset dir="${build.classes.dir}"> <include name="**/*.class" /> </fileset> <metainf dir="${basedir}/META-INF "> <include name="**" /> </metainf> </jar> </target> </project>上面建立了一个名为jartest 的Ant 项目,默认的任务为default="jar",项目的路径为build.xml 文件所在目录
包进jar 文件的META-INF 目录。打包后的jar 文件存放在应用目录下。文件名为:ejbfile.jar
如何进行WEB 应用打包
WEB 应用根目录| -- **/*. jsp | -- WEB-INF | -- web.xml | -- lib | -- *.* | -- classes | -- **/*.class
例如WEB 应用根目录在: D:\java\webapp\ ,命令输入如下:
D:\java\webapp> jar cvf EJBTest.war *如果文件存放的结构如下面所示:
WEB 应用根目录 |-- build.xml |--**/*.jsp |-- WEB-INF | -- web.xml | -- lib | -- *.* | -- classes | -- **/*.class
那么Ant 的war 文件打包任务如下:
<target name="war" description="创建WEB 发布包"> 定义一个名叫war 的任务。任务中执行war 打包操作,dir="${basedir}/WEB-INF">指明web 的WEB-INF 目录位置。如何进行企业应用打包
如何进行企业应用打包
一个完整的企业应用包含EJB 模块和WEB 模块,在发布企业应用时,我们需要把它打成*.ear 文件,在打包前我定EJB 模块和WEB 模块的信息,一个application.xml 配置例子如下:
<application xmlns="http://java.sun.com/xml/ns/j2ee" version="1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"> <display-name>EJB3 Sample Application</display-name> <module> <web> <web-uri>web.war</web-uri> <context-root>web</context-root> </web> </module> <module> <ejb>ejb3.jar</ejb> </module> </application>
ear 应用根目录 | -- ejb3.jar (你的EJB 模块) | -- web.war (你的WEB 模块) | -- META-INF | -- MANIFEST.MF (如果使用工具打包,该文件由工具自动生成) | -- application.xml
使用了第三方类库的EJB 如何打包
在实际项目中,我们经常需要使用第三方的类库。这些类库应该放在哪里?EJB 应用一般都有被“卸出”(这里假设本例EJB 使用了两个第三方类库,名为:Upload.jar,Socket.jar,修改后的manifest.mf 文件内容如下:
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.6.5 Created-By: 1.5.0_01-b08 (Sun Microsystems Inc.) Class-Path: Upload.jar Socket.jar
下面是打完包后的目录结构:
EJB 应用根目录 | -- com (注:ejb 类包) | -- Upload.jar (注:第三方类库) | -- Socket.jar (注:第三方类库) | -- META-INF | -- MANIFEST.MF (注:加入了Class-Path 属性)
共用了第三方类库的J2EE 应用如何打包
一个J2EE 项目通常由多个EJB 和Web 应用构成,如果多个EJB 及Web 应用共用了一个第三方类库,我们又如三个模块的jar 文件修改后的manifest.mf 文件内容如下:
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.6.5 Created-By: 1.5.0_01-b08 (Sun Microsystems Inc.) Class-Path: Tools.jar注意:Class-Path: 与Tools.jar 之间有一空格分隔(缺少了空格就会发生找不到jar 文件),Class-Path 所在行还需
下面是打完包后的目录结构:
J2EE 应用根目录 | -- HelloWorld.jar | -- META-INF | -- MANIFEST.MF (注:加入了Class-Path 属性, 引用它所依赖的Tools.jar) | -- HelloChina.jar | -- META-INF | -- MANIFEST.MF (注:加入了Class-Path 属性, 引用它所依赖的Tools.jar) | -- MyEJBTest.war | -- META-INF | -- MANIFEST.MF (注:加入了Class-Path 属性, 引用它所依赖的Tools.jar) | -- Tools.jar (注:第三方类库) | -- META-INF | -- application.xml | -- MANIFEST.MF (注:由工具自动生成,没有加入Class-Path 属性)
把第三方类库和EJB 模块并排打进jar 包,如果第三方类库很多的情况下,显的有些零乱而不雅观。在此建议大家建个文件夹专门用来存放第三方类库。如建个lib 文件夹,把第三方类库放在此文件夹下。然后修改J2EE各模块的manifest.mf 文件内容,修改后的内容如下:
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.6.5 Created-By: 1.5.0_01-b08 (Sun Microsystems Inc.) Class-Path: lib/Tools.jar
J2EE 应用的文件后缀为ear, 应用使用到的各模块在application.xml 文件中定义,本例的application.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?> <application xmlns="http://java.sun.com/xml/ns/j2ee" version="1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com /xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"> <display-name>EJB3Trail</display-name> <description>J2EE Made Easy Trail Map</description> <module> <ejb>HelloWorld.jar</ejb> </module> <module> <ejb> HelloChina.jar</ejb> </module> <module> <web> <web-uri>MyEJBTest.war</web-uri> <context-root>MyEJBTest</context-root> </web> </module> </application>