关于ant打包应用程序(整理)
2011-09-10 09:43
148 查看
要发布EJB 时必须把她打成*.jar 文件,一个EJB 打包后的目录结构如下:
打包的方式有很多,如:jar 命令行、集成开发环境的打包向导和Ant 任务。下面介绍Elispse 打包向导和Ant 打
包任务。
1. Elispse 打包向导
在Elispse 开发环境下,可以通过向导进行打包。右击项目名称,在跳出的菜单中选择“导出”,在“导出”对话
框选择“Jar 文件”,在“选择要导出的资源”时,选择源目录和用到的资源。然后选择一个存放目录及文件名。
点“完成”就结束了打包。
2. Ant 打包任务
采用Ant 进行打包是比较方便的,也是作者推荐的打包方式。下面我们看一个简单的打包任务。
上面建立了一个名为jartest 的Ant 项目,默认的任务为default="jar",项目的路径为build.xml 文件所在目录
basedir="." 。应用编绎过后的class 文件已经存在于应用的/build/classes/目录下。Ant 定义了一个属性
“build.classes.dir”,他指向应用的/build/classes/目录。
<target name="jar" description="打包成Jar">定义了一个名叫jar 的任务,description 是描述信息。任务中使用jar
命令把/build/classes/目录下的所有class 文件打包进jar 文件,同时也把应用下的META-INF 目录下的所有文件打
包进jar 文件的META-INF 目录。打包后的jar 文件存放在应用目录下。文件名为:ejbfile.jar
如何进行WEB 应用打包
WEB 应用根目录
1.在命令行下用jar 命令进行war 文件打包
在打包前把文件存成上面的目录结构:
在Dos 窗口中进入到WEB 应用根目录下,执行如下命令
jar cvf EJBTest.war *
此命令把WEB 应用根目录下的所有文件及文件夹打包成EJBTest.war 文件
例如WEB 应用根目录在: D:\java\webapp\ ,命令输入如下:
D:\java\webapp> jar cvf EJBTest.war *
2.在Ant 任务中进行war 文件打包
如果文件存放的结构如下面所示:
那么Ant 的war 文件打包任务如下:
<target name="war" description="创建WEB 发布包"> 定义一个名叫war 的任务。任务中执行war 打包操作,
在war 节点中,通过webxml 指明web.xml 的位置, 通过<classes dir="${basedir}/WEB-INF/classes">指明web
的classes 目录位置,通过<lib dir="${basedir}/WEB-INF/lib">指明web 的lib 目录位置,通过<webinf
dir="${basedir}/WEB-INF">指明web 的WEB-INF 目录位置。如何进行企业应用打包
如何进行企业应用打包
一个完整的企业应用包含EJB 模块和WEB 模块,在发布企业应用时,我们需要把它打成*.ear 文件,在打包前我
们必须配置application.xml 文件,该文件存放于打包后的META-INF 目录。我们在application.xml 文件中需要指
定EJB 模块和WEB 模块的信息,一个application.xml 配置例子如下:
上面<web>指定Web 模块,<ejb>指定EJB 模块,Web 模块或者EJB 模块都可以存在多个。
不管你使用何种方式打包,一个企业应用打包后的目录结构应该如下:
使用了第三方类库的EJB 如何打包
在实际项目中,我们经常需要使用第三方的类库。这些类库应该放在哪里?EJB 应用一般都有被“卸出”(这里
指装入的反向过程)的能力,这种能力由部署时装入它们的类装载器支持。如果我们把第三方类库放入应用服务
器的标准类路径([jboss 安装目录]\server\default\lib),这些类很可能完全失去被卸出的能力。这样,如果EJB 应
用要更新某个第三方类库的版本,重新部署EJB 应用时,第三方类库也要重新部署。在这种情形下,把第三方类
库放入应用服务器标准类路径很不方便,因为每次部署EJB 应用时,都要重新启动整个应用服务器,这显然不是
理想的选择。适合放入应用服务器类路径的第三方类库通常是一些通用类库,如JDBC 驱动。
对于针对特定应用的第三方类库,最理想的选择是把他们放入EJB Jar 文件中。每一个JAR 文件里都有一个
manifest 文件,这个文件由jar 工具自动创建,默认名字是MANIFEST.MF。我们可以在manifest 文件中加入一个
Class-Path 属性,引用它所依赖的JAR 文件。我们可以手工编辑manifest.mf 文件,在原有内容的基础上,添加
Class-Path 属性。Class-Path 属性的值是用来搜索第三方类库的相对URL。这个URL 总是相对于包含Class-Path
属性的组件。单个Class-Path 属性内可以指定多个URL,一个manifest 文件可以包含多个Class-Path 属性。
假设本例EJB 使用了两个第三方类库,名为:Upload.jar,Socket.jar,修改后的manifest.mf 文件内容如下:
注意:Class-Path: 与Upload.jar 之间有一空格分隔(缺少了空格就会发生找不到jar 文件),多个jar 文件之间需
要用空格分隔。Class-Path 所在行还需要进行回车换行。
下面是打完包后的目录结构:
共用了第三方类库的J2EE 应用如何打包
一个J2EE 项目通常由多个EJB 和Web 应用构成,如果多个EJB 及Web 应用共用了一个第三方类库,我们又如
何打包呢?按照上节介绍的内容,我们会把第三方类库打进每个EJB Jar 文件及放在Web 应用的/WEB-INF/lib 目
录下。虽然这种方案也能解决问题,但它明显地不够完善。封装JAR 文件的目的是为了提高应用的模块化程度,
把同一个类库放入多个JAR 文件正好是背其道而行之。此外,多次放置同一个类库无谓地加大了应用的体积。最
后,即使只改变一个类库的版权,每一个EJB JAR 文件也都要重新构造,从而使构造过程复杂化。
下面的方案很好地解决了上面的问题
假设一个J2EE 项目含有两个EJB 及一个Web 应用,他们的文件名分别为:HelloWorld.jar,HelloChina.jar,
MyEJBTest.war。这三个模块都使用了一个第三方类库,名为:Tools.jar
现在我们要做的是编辑这三个模块的manifest.mf 文件,在原有内容的基础上,添加Class-Path 属性。
三个模块的jar 文件修改后的manifest.mf 文件内容如下:
注意:Class-Path: 与Tools.jar 之间有一空格分隔(缺少了空格就会发生找不到jar 文件),Class-Path 所在行还需
要进行回车换行。
各个模块通过manifest.mf 文件都能找到其所依赖的Tools.jar 文件。
下面是打完包后的目录结构:
把第三方类库和EJB 模块并排打进jar 包,如果第三方类库很多的情况下,显的有些零乱而不雅观。在此建议大家建个文件夹专门用来存放第三方类库。如建个lib 文件夹,把第三方类库放在此文件夹下。然后修改J2EE各模块的manifest.mf 文件内容,修改后的内容如下:
J2EE 应用的文件后缀为ear, 应用使用到的各模块在application.xml 文件中定义,本例的application.xml 内容如下:
因为EJB 打进了EAR 文件,在访问EJB 时,JNDI 名应为以下格式:
访问本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local
访问远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote
例:如果上面J2EE 应用打成MyJ2EE.ear 文件,访问HelloWorld EJB 远程接口的JNDI 名是:
MyJ2EE/HelloWorldBean/remote
EJB 应用根目录 | -- com (你的.class 文件) | -- META-INF | -- MANIFEST.MF (如果使用工具打包,该文件由工具自动生成)
打包的方式有很多,如:jar 命令行、集成开发环境的打包向导和Ant 任务。下面介绍Elispse 打包向导和Ant 打
包任务。
1. Elispse 打包向导
在Elispse 开发环境下,可以通过向导进行打包。右击项目名称,在跳出的菜单中选择“导出”,在“导出”对话
框选择“Jar 文件”,在“选择要导出的资源”时,选择源目录和用到的资源。然后选择一个存放目录及文件名。
点“完成”就结束了打包。
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 文件所在目录
basedir="." 。应用编绎过后的class 文件已经存在于应用的/build/classes/目录下。Ant 定义了一个属性
“build.classes.dir”,他指向应用的/build/classes/目录。
<target name="jar" description="打包成Jar">定义了一个名叫jar 的任务,description 是描述信息。任务中使用jar
命令把/build/classes/目录下的所有class 文件打包进jar 文件,同时也把应用下的META-INF 目录下的所有文件打
包进jar 文件的META-INF 目录。打包后的jar 文件存放在应用目录下。文件名为:ejbfile.jar
如何进行WEB 应用打包
WEB 应用根目录
| -- **/*. jsp | -- WEB-INF | -- web.xml | -- lib | -- *.* | -- classes | -- **/*.class
1.在命令行下用jar 命令进行war 文件打包
在打包前把文件存成上面的目录结构:
在Dos 窗口中进入到WEB 应用根目录下,执行如下命令
jar cvf EJBTest.war *
此命令把WEB 应用根目录下的所有文件及文件夹打包成EJBTest.war 文件
例如WEB 应用根目录在: D:\java\webapp\ ,命令输入如下:
D:\java\webapp> jar cvf EJBTest.war *
2.在Ant 任务中进行war 文件打包
如果文件存放的结构如下面所示:
WEB 应用根目录 |-- build.xml |--**/*.jsp |-- WEB-INF | -- web.xml | -- lib | -- *.* | -- classes | -- **/*.class
那么Ant 的war 文件打包任务如下:
<target name="war" description="创建WEB 发布包"> 定义一个名叫war 的任务。任务中执行war 打包操作,
在war 节点中,通过webxml 指明web.xml 的位置, 通过<classes dir="${basedir}/WEB-INF/classes">指明web
的classes 目录位置,通过<lib dir="${basedir}/WEB-INF/lib">指明web 的lib 目录位置,通过<webinf
dir="${basedir}/WEB-INF">指明web 的WEB-INF 目录位置。如何进行企业应用打包
如何进行企业应用打包
一个完整的企业应用包含EJB 模块和WEB 模块,在发布企业应用时,我们需要把它打成*.ear 文件,在打包前我
们必须配置application.xml 文件,该文件存放于打包后的META-INF 目录。我们在application.xml 文件中需要指
定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>
上面<web>指定Web 模块,<ejb>指定EJB 模块,Web 模块或者EJB 模块都可以存在多个。
不管你使用何种方式打包,一个企业应用打包后的目录结构应该如下:
ear 应用根目录 | -- ejb3.jar (你的EJB 模块) | -- web.war (你的WEB 模块) | -- META-INF | -- MANIFEST.MF (如果使用工具打包,该文件由工具自动生成) | -- application.xml
使用了第三方类库的EJB 如何打包
在实际项目中,我们经常需要使用第三方的类库。这些类库应该放在哪里?EJB 应用一般都有被“卸出”(这里
指装入的反向过程)的能力,这种能力由部署时装入它们的类装载器支持。如果我们把第三方类库放入应用服务
器的标准类路径([jboss 安装目录]\server\default\lib),这些类很可能完全失去被卸出的能力。这样,如果EJB 应
用要更新某个第三方类库的版本,重新部署EJB 应用时,第三方类库也要重新部署。在这种情形下,把第三方类
库放入应用服务器标准类路径很不方便,因为每次部署EJB 应用时,都要重新启动整个应用服务器,这显然不是
理想的选择。适合放入应用服务器类路径的第三方类库通常是一些通用类库,如JDBC 驱动。
对于针对特定应用的第三方类库,最理想的选择是把他们放入EJB Jar 文件中。每一个JAR 文件里都有一个
manifest 文件,这个文件由jar 工具自动创建,默认名字是MANIFEST.MF。我们可以在manifest 文件中加入一个
Class-Path 属性,引用它所依赖的JAR 文件。我们可以手工编辑manifest.mf 文件,在原有内容的基础上,添加
Class-Path 属性。Class-Path 属性的值是用来搜索第三方类库的相对URL。这个URL 总是相对于包含Class-Path
属性的组件。单个Class-Path 属性内可以指定多个URL,一个manifest 文件可以包含多个Class-Path 属性。
假设本例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
注意:Class-Path: 与Upload.jar 之间有一空格分隔(缺少了空格就会发生找不到jar 文件),多个jar 文件之间需
要用空格分隔。Class-Path 所在行还需要进行回车换行。
下面是打完包后的目录结构:
EJB 应用根目录 | -- com (注:ejb 类包) | -- Upload.jar (注:第三方类库) | -- Socket.jar (注:第三方类库) | -- META-INF | -- MANIFEST.MF (注:加入了Class-Path 属性)
共用了第三方类库的J2EE 应用如何打包
一个J2EE 项目通常由多个EJB 和Web 应用构成,如果多个EJB 及Web 应用共用了一个第三方类库,我们又如
何打包呢?按照上节介绍的内容,我们会把第三方类库打进每个EJB Jar 文件及放在Web 应用的/WEB-INF/lib 目
录下。虽然这种方案也能解决问题,但它明显地不够完善。封装JAR 文件的目的是为了提高应用的模块化程度,
把同一个类库放入多个JAR 文件正好是背其道而行之。此外,多次放置同一个类库无谓地加大了应用的体积。最
后,即使只改变一个类库的版权,每一个EJB JAR 文件也都要重新构造,从而使构造过程复杂化。
下面的方案很好地解决了上面的问题
假设一个J2EE 项目含有两个EJB 及一个Web 应用,他们的文件名分别为:HelloWorld.jar,HelloChina.jar,
MyEJBTest.war。这三个模块都使用了一个第三方类库,名为:Tools.jar
现在我们要做的是编辑这三个模块的manifest.mf 文件,在原有内容的基础上,添加Class-Path 属性。
三个模块的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 所在行还需
要进行回车换行。
各个模块通过manifest.mf 文件都能找到其所依赖的Tools.jar 文件。
下面是打完包后的目录结构:
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>
因为EJB 打进了EAR 文件,在访问EJB 时,JNDI 名应为以下格式:
访问本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local
访问远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote
例:如果上面J2EE 应用打成MyJ2EE.ear 文件,访问HelloWorld EJB 远程接口的JNDI 名是:
MyJ2EE/HelloWorldBean/remote
相关文章推荐
- 使用Ant命令给应用程序编译和打包
- 关于Ant打包APK的记录
- ant-build.xml打包应用程序
- 主题:用Ant 来编译打包您的Anroid应用程序。
- 关于 ant 不同渠道自动打包的笔记
- 关于IDEA的基本环境配置以及快速使用(git拉载程序,Jdk安装,tomcat部署,应用程序打包运行)
- 转载关于使用Ant打包Flex的一些脚本
- 关于ArcGIS Engine应用程序打包
- 关于rpmbuild打包整理(一次记录)
- 关于C#winform应用程序打包(包括数据库的安装)的问题!
- Myeclipse中创建第一个Ant应用程序 (网上资料整理)
- 关于ANT打包实际操作的记录
- ant-build.xml打包应用程序
- 整理一个ANT在J2EE项目中的应用,含预编译JSP和打包WAR/EAR文件!
- 使用ant编译打包应用程序
- 求教关于ant引用android第三方工程打包的问题
- 关于Java使用Ant打包,编译AIDL时出错的问题
- 关于iOS打包上传到iTunesconnect的失败原因做了一些整理,有问题,可留言,相互学习
- 使用ant编译打包应用程序
- 关于C#winform应用程序打包(包括数据库的安装)的问题