使用Ant打包是比较方便的,我们可以在项目根目录下建立一个名为build.xml的xml文件,然后再xml文件里面定义我们的打包任务,如下:
<!-- Build classpath -->
<path id="build.classpath">
<fileset dir="${jboss.home}/client">
<include name="*.jar"/>
</fileset>
<pathelement location="${build.classes.dir}"/>
</path>
<target name="prepare" depends="clean">
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.classes.dir}"/>
</target>
<target name="compile" depends="prepare" description="编译">
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="**">
<classpath refid="build.classpath"/>
</javac>
</target>
<target name="ejbjar" depends="compile" description="创建EJB发布包">
<jar destfile="${build.dir}/${ant.project.name}.jar">
<fileset dir="${build.dir}">
<include name="**/*.class"/>
</fileset>
<metainf dir="${src.dir}/META-INF">
<include name="*.xml"/>
</metainf>
</jar>
</target>
<target name="deploy" depends="ejbjar" description="发布EJB">
<copy file="${build.dir}/${ant.project.name}.jar" todir="${jboss.home}/server/${jboss.server.config}/deploy"/>
</target>
<target name="undeploy" depends="deploy" description="卸载EJB">
<delete file="${jboss.home}/server/${jboss.server.config}/deploy/${ant.project.name}.jar"/>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
</project>
上面建立了一个名为HelloWorld的Ant项目,default=”ejbjar”指定运行Ant时,如果没有给定任务名称,则默认执行ejbjar任务。Basedir=”.”指定项目的路径为build.xml文件所在的目录。
<property environment=”env”
/>用于引用操作系统的环境变量。
<property name=”jboss.home”
value=”${env.JBOSS_HOME} />定义了一个名为jboss.home的属性,它的值引用名为JBOSS_HOME的环境变量(环境变量JBOSS_HOME是在安装jboss时设置的jboss主目录)。
<property name=”build.dir”
value=”${basedir}/build” />定义一个名为build.dir的属性,它的值指向项目路径下build/classes目录,该目录用于存放编译后的class文件。
<path id=”build.classpath”>节点定义了一个id为build.classpath的类路径,类路径包含[jboss安装目录]/client下的所有jar文件及/buile/classes下的所有类文件。
<target name=”prepare”
depends=”clean”>节点用于在项目路径下创建build和/build/classes文件夹。该任务依赖clean任务,执行prepare任务前会先执行clean任务。
<target name=”compile”
depends=”prepare” description=”编译”>节点定义了一个编译任务,该任务调用javac对src目录下的源文件进行编译。classpath引用id为build.classpath的类路径。编译后的class文件存放在/build/classes目录,在任务执行前会先执行prepare任务。
<target name=”ejbjar”
depends=”compile” description=”创建EJB发布包”>节点定义了一个打包任务,该任务调用jar命令对/build/classes目录下的所有class文件进行打包,并且把src/META-INF目录下的所有xml文件打进jar文件的META-INF目录。生成后的jar文件存放在项目的根目录下,名为HelloWorld.jar。在任务执行前会先执行compile任务。
上面主要是针对java工程打成jar包,下面简单讲一下对于web工程打成war包的过程
发布一个web应用到jboss前,需要把它打成war文件,首先必须了解一个web应用应该具有哪些目录及文件,其中WEB-INF目录和web.xml文件是必须提供的,其它的目录和文件可以不存在。当你打成war文件后应检查war文件,如果根目录下没有WEB-INF或WEB-INF下没有web.xml文件,那么在发布web应用时将会失败。