`
changkunyang
  • 浏览: 30401 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用ANT打包Struts2项目并发布到tomcat里

阅读更多
   花了一天时间研究ANT,做了一个简单的demo,本着分享快乐的初衷,现在将部分代码贴出来,希望给有需要的朋友一些帮助,也给自己备个份。
    笔者无意在这里讨论ANT的详细信息,所以这里我们假设你至少已经知道ANT是什么、有什么用。
    笔者使用的IDE是Eclipse+myEclipse,所以这里都将以该环境做介绍。
    1、工程目录图:
       
   
    在工程的根目录下我们建了一个build.xml文件。之所以把此文件放在根目录下,是为了便于打包时找到路径,建议你也放在该目录下。文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<project name="struts2_demo" default="deploy" basedir="." >
	<description>用ANT将struts2_demo发布成WAR</description>
	
	<!-- 定义发布需要用到的属性 -->
	<!-- WEB容器需要用到的属性 -->
	<property name="tomcat.home" value="D:/devolepment/apache-tomcat-6.0.18"></property>
	<property name="webapps.home" value="D:/devolepment/apache-tomcat-6.0.18/webapps"></property>
	
	<!-- 定义打包需要涉及的本地工程目录 属性 -->
	<property name="app.home" value="."></property>
	<property name="app.name" value="struts2_demo"></property>
	<property name="javadoc.pkg" value="help"></property>
	
	<property name="src.home" value="${app.home}/src"></property>
	<property name="web.home" value="${app.home}/WebRoot"></property>
	<property name="lib.home" value="${web.home}/WEB-INF/lib"></property>
	<property name="classes.home" value="${web.home}/WEB-INF/classes"></property>
	<property name="doc.home" value="${app.home}/doc"></property>
		
	<!-- 定义构建WEB应用的良好的文件目录 属性 -->
	<property name="build.home" value="${app.home}/build"></property>
	<property name="build.classes" value="${build.home}/WEB-INF/classes"></property>
	<property name="build.lib" value="${build.home}/WEB-INF/lib"></property>
		
	<!-- 定义发布目录 最后工程将WAR文件COPY在该目录下,发布的时候只要将此文件拷贝到${webapps.home}指定的目录下 -->
	<property name="deploy.home" value="${app.home}/deploy"></property>
	
	<!-- 应用需要用到的类库支持文件 包括工程本身lib目录下的所有.jar和web容器中lib目录下的所有.jar文件 -->
	<path id="compile.classpath">
		<pathelement location="${classes.home}" />
		<fileset dir="${lib.home}">
			<include name="*.jar" />
			<include name="*.zip" />
		</fileset>
		
		<fileset dir="${tomcat.home}/lib">
			<include name="*.jar"/>
		</fileset>
		<pathelement location="${tomcat.home}/classes"/>		
	</path>
	
	<!-- 删除历史发布痕迹 -->		
	<target name="clean_all">
		<delete dir="${build.home}"></delete>
		<delete dir="${classes.home}"></delete>
		<delete dir="${deploy.home}"></delete>
		
		<delete dir="${webapps.home}/${app.name}" failonerror="false"></delete>
		<delete dir="${webapps.home}/${app.name}.war"></delete>
		
		<delete dir="${doc.home}"></delete>
	</target>
	
	<!-- 创建新的发布所涉及的路径 它取决于clean_all这个target,也就是说如果要执行它,首先得等clean_all执行完毕 -->
	<target name="prepare" depends="clean_all">
		<echo message="Tomacat Home=${tomcat.home}"></echo>
		<echo message="webapps Home=${webapps.home}"></echo>
		
		<mkdir dir="${classes.home}"/>
		<mkdir dir="${deploy.home}"/>
		<mkdir dir="${doc.home}"/>
		<mkdir dir="${doc.home}/api"/>
		
		<mkdir dir="${build.home}"/>
		<mkdir dir="${build.home}/WEB-INF"/>
		<mkdir dir="${build.home}/WEB-INF/classes"/>
		<mkdir dir="${build.home}/WEB-INF/lib"/>
	</target>
			
	<!-- 编译工程目录【${src.home}】下的所有java文件,并将编译好的class文件放在【${classes.home}】下面。编译的时候需要类库的支持 -->	
	<target name="compile" depends="prepare">
		<javac srcdir="${src.home}" destdir="${classes.home}" debug="yes">
			<classpath refid="compile.classpath"></classpath>
		</javac>
	</target>
				
	<!-- 构建良好的WEB application结构。将工程目录下的对应的文件COPY构建目录下 -->
	<target name="build" depends="compile">
		<copy todir="${build.home}">
			<fileset dir="${web.home}"></fileset>
		</copy>
		
		<copy todir="${build.classes}">
			<fileset dir="${classes.home}"></fileset>
		</copy>
		<copy todir="${build.classes}">
			<!-- 打包工程目录下的所有资源文件。如果存在不同后缀名的资源文件则在include里面引入 -->
			<fileset dir="${src.home}">
				<include name="**/*.properties" />
				<include name="**/*.xml" />
			</fileset>
		</copy>
		
		<copy todir="${build.lib}">
			<fileset dir="${lib.home}"></fileset>
		</copy>
		<!-- 打包BUILD目录下的文件成为一个WAR文件 -->
		<jar jarfile="${deploy.home}/${app.name}.war" 
			basedir="${build.home}">
		</jar>
	</target>
	
	<!-- 发布,直接将${deploy.home}/${app.name}.war拷贝至web容器下的发布目录 -->
	<target name="deploy" depends="build">
		<copy todir="${webapps.home}" file="${deploy.home}/${app.name}.war"></copy>
	</target>
	
	<!-- 生成发布文档 -->
	<target name="javaDoc" depends="compile">
		<javadoc source="${src.home}"
				destdir="${doc.home}/api"
				packagenames="%{javadoc.pkg}.*">
		</javadoc>
	</target>

</project>

   2、根据【<project name="struts2_demo" default="deploy" basedir="." >】,我们知道如果运行这个build文件,它会从“deploy”这个target 开始执行。那么怎么执行?在eclipse里在该文件上右键单击。会出现如下图所示的操作:
    
直接点击运行即可。
    3、那么,我们怎么知道运行成功与否?看控制台,运行后,控制台会输出如下信息:
Buildfile: D:\devolepment\eclipse\workspace\struts2_demo\build.xml
clean_all:
   [delete] Deleting directory D:\devolepment\eclipse\workspace\struts2_demo\WebRoot\WEB-INF\classes
prepare:
     [echo] Tomacat Home=D:/devolepment/apache-tomcat-6.0.18
     [echo] webapps Home=D:/devolepment/apache-tomcat-6.0.18/webapps
    [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\WebRoot\WEB-INF\classes
    [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\deploy
    [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\doc
    [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\doc\api
    [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\build
    [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\build\WEB-INF
    [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\build\WEB-INF\classes
    [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\build\WEB-INF\lib
compile:
    [javac] Compiling 21 source files to D:\devolepment\eclipse\workspace\struts2_demo\WebRoot\WEB-INF\classes
    [javac] 注意:D:\devolepment\eclipse\workspace\struts2_demo\src\com\yck\demo\util\database\ConnectionManage.java 使用了未经检查或不安全的操作。
    [javac] 注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
build:
     [copy] Copying 125 files to D:\devolepment\eclipse\workspace\struts2_demo\build
     [copy] Copied 50 empty directories to 2 empty directories under D:\devolepment\eclipse\workspace\struts2_demo\build
     [copy] Copying 2 files to D:\devolepment\eclipse\workspace\struts2_demo\build\WEB-INF\classes
      [jar] Building jar: D:\devolepment\eclipse\workspace\struts2_demo\deploy\struts2_demo.war
deploy:
     [copy] Copying 1 file to D:\devolepment\apache-tomcat-6.0.18\webapps
BUILD SUCCESSFUL

如果你看见了“BUILD SUCCESSFUL”,说明项目已经发布成功。
    4、此时,你刷新项目,会发现项目下对了几个文件夹。
      
打开这些文件夹,会看见如下信息:
      
    5、这个时候,你在回过头去看看build.xml文件的一些配置,有没有恍然大悟?至少更明白为什么build.xml文件里的各属性为什么要那么配置,对吧。
     6、关于配置的一些信息已经在build.xml里面做了注释,使用不再赘述。其实如果只想用ANT打包发布你的项目,上面的这些信息已经能应付简单的工作了。说到低,就是要将你的项目文件重新组织成一个良好的WEB应用目录,然后将这个目录打包并拷贝到WEB容器的发布目录下去,如果你留心,就会发现,我们打包后在项目文件里,多出来了一些这样的文件:
     
不错,上图所示的其实已经是一个普通的WEB应用目录了。
4
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics