Profilo di heFotoBlogElenchi Strumenti Guida

23 giugno

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

zz from http://changkunyang.javaeye.com/blog/376582

 

    花了一天时间研究ANT,做了一个简单的demo,本着分享快乐的初衷,现在将部分代码贴出来,希望给有需要的朋友一些帮助,也给自己备个份。
    笔者无意在这里讨论ANT的详细信息,所以这里我们假设你至少已经知道ANT是什么、有什么用。
    笔者使用的IDE是Eclipse+myEclipse,所以这里都将以该环境做介绍。
    1、工程目录图:

    在工程的根目录下我们建了一个build.xml文件。之所以把此文件放在根目录下,是为了便于打包时找到路径,建议你也放在该目录下。文件内容如下:

Java代码 复制代码

  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2. <project name="struts2_demo" default="deploy" basedir="." >   
  3.     <description>用ANT将struts2_demo发布成WAR</description>   
  4.     <!-- 定义发布需要用到的属性 -->   
  5.     <!-- WEB容器需要用到的属性 -->   
  6.     <property name="tomcat.home" value="D:/devolepment/apache-tomcat-6.0.18"></property>   
  7.     <property name="webapps.home" value="D:/devolepment/apache-tomcat-6.0.18/webapps"></property>   
  8.     <!-- 定义打包需要涉及的本地工程目录 属性 -->   
  9.     <property name="app.home" value="."></property>   
  10.     <property name="app.name" value="struts2_demo"></property>   
  11.     <property name="javadoc.pkg" value="help"></property>   
  12.     <property name="src.home" value="${app.home}/src"></property>   
  13.     <property name="web.home" value="${app.home}/WebRoot"></property>   
  14.     <property name="lib.home" value="${web.home}/WEB-INF/lib"></property>   
  15.     <property name="classes.home" value="${web.home}/WEB-INF/classes"></property>   
  16.     <property name="doc.home" value="${app.home}/doc"></property>   
  17.     <!-- 定义构建WEB应用的良好的文件目录 属性 -->   
  18.     <property name="build.home" value="${app.home}/build"></property>   
  19.     <property name="build.classes" value="${build.home}/WEB-INF/classes"></property>   
  20.     <property name="build.lib" value="${build.home}/WEB-INF/lib"></property>   
  21.     <!-- 定义发布目录 最后工程将WAR文件COPY在该目录下,发布的时候只要将此文件拷贝到${webapps.home}指定的目录下 -->   
  22.     <property name="deploy.home" value="${app.home}/deploy"></property>   
  23.     <!-- 应用需要用到的类库支持文件 包括工程本身lib目录下的所有.jar和web容器中lib目录下的所有.jar文件 -->   
  24.     <path id="compile.classpath">   
  25.         <pathelement location="${classes.home}" />   
  26.         <fileset dir="${lib.home}">   
  27.             <include name="*.jar" />   
  28.             <include name="*.zip" />   
  29.         </fileset>   
  30.         <fileset dir="${tomcat.home}/lib">   
  31.             <include name="*.jar"/>   
  32.         </fileset>   
  33.         <pathelement location="${tomcat.home}/classes"/>         
  34.     </path>   
  35.     <!-- 删除历史发布痕迹 -->        
  36.     <target name="clean_all">   
  37.         <delete dir="${build.home}"></delete>   
  38.         <delete dir="${classes.home}"></delete>   
  39.         <delete dir="${deploy.home}"></delete>   
  40.         <delete dir="${webapps.home}/${app.name}" failonerror="false"></delete>   
  41.         <delete dir="${webapps.home}/${app.name}.war"></delete>   
  42.         <delete dir="${doc.home}"></delete>   
  43.     </target>   
  44.     <!-- 创建新的发布所涉及的路径 它取决于clean_all这个target,也就是说如果要执行它,首先得等clean_all执行完毕 -->   
  45.     <target name="prepare" depends="clean_all">   
  46.         <echo message="Tomacat Home=${tomcat.home}"></echo>   
  47.         <echo message="webapps Home=${webapps.home}"></echo>   
  48.         <mkdir dir="${classes.home}"/>   
  49.         <mkdir dir="${deploy.home}"/>   
  50.         <mkdir dir="${doc.home}"/>   
  51.         <mkdir dir="${doc.home}/api"/>   
  52.         <mkdir dir="${build.home}"/>   
  53.         <mkdir dir="${build.home}/WEB-INF"/>   
  54.         <mkdir dir="${build.home}/WEB-INF/classes"/>   
  55.         <mkdir dir="${build.home}/WEB-INF/lib"/>   
  56.     </target>   
  57.     <!-- 编译工程目录【${src.home}】下的所有java文件,并将编译好的class文件放在【${classes.home}】下面。编译的时候需要类库的支持 -->       
  58.     <target name="compile" depends="prepare">   
  59.         <javac srcdir="${src.home}" destdir="${classes.home}" debug="yes">   
  60.             <classpath refid="compile.classpath"></classpath>   
  61.         </javac>   
  62.     </target>   
  63.     <!-- 构建良好的WEB application结构。将工程目录下的对应的文件COPY构建目录下 -->   
  64.     <target name="build" depends="compile">   
  65.         <copy todir="${build.home}">   
  66.             <fileset dir="${web.home}"></fileset>   
  67.         </copy>   
  68.         <copy todir="${build.classes}">   
  69.             <fileset dir="${classes.home}"></fileset>   
  70.         </copy>   
  71.         <copy todir="${build.classes}">   
  72.             <!-- 打包工程目录下的所有资源文件。如果存在不同后缀名的资源文件则在include里面引入 -->   
  73.             <fileset dir="${src.home}">   
  74.                 <include name="**/*.properties" />   
  75.                 <include name="**/*.xml" />   
  76.             </fileset>   
  77.         </copy>   
  78.         <copy todir="${build.lib}">   
  79.             <fileset dir="${lib.home}"></fileset>   
  80.         </copy>   
  81.         <!-- 打包BUILD目录下的文件成为一个WAR文件 -->   
  82.         <jar jarfile="${deploy.home}/${app.name}.war"
  83.             basedir="${build.home}">   
  84.         </jar>   
  85.     </target>   
  86.     <!-- 发布,直接将${deploy.home}/${app.name}.war拷贝至web容器下的发布目录 -->   
  87.     <target name="deploy" depends="build">   
  88.         <copy todir="${webapps.home}" file="${deploy.home}/${app.name}.war"></copy>   
  89.     </target>   
  90.     <!-- 生成发布文档 -->   
  91.     <target name="javaDoc" depends="compile">   
  92.         <javadoc source="${src.home}"
  93.                 destdir="${doc.home}/api"
  94.                 packagenames="%{javadoc.pkg}.*">   
  95.         </javadoc>   
  96.     </target>   
  97. </project> 
<?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、那么,我们怎么知道运行成功与否?看控制台,运行后,控制台会输出如下信息:

Java代码 复制代码

  1. Buildfile: D:\devolepment\eclipse\workspace\struts2_demo\build.xml   
  2. clean_all:   
  3.    [delete] Deleting directory D:\devolepment\eclipse\workspace\struts2_demo\WebRoot\WEB-INF\classes   
  4. prepare:   
  5.      [echo] Tomacat Home=D:/devolepment/apache-tomcat-6.0.18
  6.      [echo] webapps Home=D:/devolepment/apache-tomcat-6.0.18/webapps   
  7.     [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\WebRoot\WEB-INF\classes   
  8.     [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\deploy   
  9.     [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\doc   
  10.     [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\doc\api   
  11.     [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\build   
  12.     [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\build\WEB-INF   
  13.     [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\build\WEB-INF\classes   
  14.     [mkdir] Created dir: D:\devolepment\eclipse\workspace\struts2_demo\build\WEB-INF\lib   
  15. compile:   
  16.     [javac] Compiling 21 source files to D:\devolepment\eclipse\workspace\struts2_demo\WebRoot\WEB-INF\classes   
  17.     [javac] 注意:D:\devolepment\eclipse\workspace\struts2_demo\src\com\yck\demo\util\database\ConnectionManage.java 使用了未经检查或不安全的操作。   
  18.     [javac] 注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。   
  19. build:   
  20.      [copy] Copying 125 files to D:\devolepment\eclipse\workspace\struts2_demo\build   
  21.      [copy] Copied 50 empty directories to 2 empty directories under D:\devolepment\eclipse\workspace\struts2_demo\build   
  22.      [copy] Copying 2 files to D:\devolepment\eclipse\workspace\struts2_demo\build\WEB-INF\classes   
  23.       [jar] Building jar: D:\devolepment\eclipse\workspace\struts2_demo\deploy\struts2_demo.war   
  24. deploy:   
  25.      [copy] Copying 1 file to D:\devolepment\apache-tomcat-6.0.18\webapps   
  26. BUILD SUCCESSFUL 
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应用目录了。

22 marzo

使用Lucene对SQL server数据库建立索引的日志(2)

继续

使用Lucene对SQL server数据库建立索引的日志(1)

==========================

2009-3-20 20:49:17 205720
2009-3-20 20:58:22 206928
2009-3-20 23:28:43 223457
2009-3-21 00:05:16 223759
2009-3-21 00:21:13 223861
2009-3-21 02:40:06 224839
2009-3-21 3:43:43 225145 error outofmemory

2009-3-21 9:07:40 begin 200000-220000
2009-3-21 9:19:40 212751
2009-3-21 9:41:17 done 877MB

2009-3-21 10:21:53 begin 220000-240000
2009-3-21 10:30:16 231481
2009-3-21 10:50:01 done 953MB

2009-3-21 11:01:53 begin 240000-280000
2009-3-21 11:29:06 259203
2009-3-21 11:51:35 265687
2009-3-21 12:20:25 272190
2009-3-21 12:47:34 277146
2009-3-21 13:12:36 done 1.09GB

2009-3-21 13:19:08 begin 280000-300000
2009-3-21 13:43:58 297982
2009-3-21 13:53:43 done 1.18GB

2009-3-21 14:01:45 begin 300000-340000
2009-3-21 14:28:44 322203
2009-3-21 14:54:33 331642
2009-3-21 15:34:56 done

2009-3-21 16:04:10 begin 340000-400000
2009-3-21 17:37:10 381092
2009-3-21 19:02:34 error zerosize

2009-3-21 19:13:26 begin 340000-360000
2009-3-21 19:21:19 351747
2009-3-21 19:39:39 done

2009-3-21 19:42:23 begin 360000-380000
2009-3-21 19:46:29 367900
2009-3-21 20:10:05 done

2009-3-21 20:46:44 begin 380000-387000
2009-3-21 20:54:30 done

2009-3-21 21:26:35 400000 1.58GB
2009-3-21 22:12:04 410000 1.63GB

2009-3-21 22:26:07 begin 410000-420000
2009-3-21 22:37:21 419922
2009-3-21 22:38:30 done

2009-3-21 23:19:26 begin 420000-435161
2009-3-21 23:42:42 done

20 marzo

使用Lucene对SQL server数据库建立索引的日志(1)

操作系统:Microsoft Windows Server 2003 R2 Enterprise Edition Service Pack 2
硬件:Intel (R) Pentiun (R) Dual CPU E2180 @2.00GHz 2.00 GHz,1.99 GB内存
RDBMS: Microsoft SQL Server, version: Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)
JDBC driver: SQLServer, version: 2.2.0022

LOG

MAX id:435075
COUNT :372930

2009-3-19 ?:??:?? begin 64911-120000
2009-3-20 0:27:09 87628
2009-3-20 0:27:56 87929
2009-3-20 0:28:56 88129
2009-3-20 0:40:15 90538
2009-3-20 1:05:16 95457
2009-3-20 4:57:21 done

2009-3-20 9:27:20 begin 120001-140000
2009-3-20 10:00:33 done

2009-3-20 10:33:44 begin 140000-160000
2009-3-20 14:47:05 fxxking error!
2009-3-20 14:47:12 copy & do 140000-160000
2009-3-20 14:54:46 149960
2009-3-20 15:06:57 150061
2009-3-20 15:15:42 done

2009-3-20 15:32:46 begin 160000-200000
2009-3-20 15:34:53 close 140000file.size()>160000file.size() error? do again

2009-3-20 15:35:40 begin 140000-160000 140000file.size()=529,750KB
2009-3-20 15:41:42 140102
2009-3-20 15:52:39 152485
2009-3-20 16:11:53 159968
2009-3-20 16:19:32 done 634,375KB

2009-3-20 16:21:30 begin 160000-200000
2009-3-20 16:32:45 170374
2009-3-20 16:43:25 174712
2009-3-20 18:45:03 done 815,404KB

2009-3-20 20:09:34 begin 200000-240000
2009-3-20 20:34:07 203608

绝望的项目(2)

还是英文严谨

做一个装修,需要选某种颜色的材料。
设计院提供了两个差不多的颜色C1和C2,说颜色在这二者之间选(此文件经三方确认)
然后施工单位就做了,颜色是某种C3
现在情况是:按照明亮程度来说C3是在C1和C2之间的。
但是,设计院主张,之间是指的 one of the two
施工单位主张,之间说得是  bettwen

需求人士通常在没看到任何成果之前会给项目组很大的自由.但是当他能够用眼睛看到东西的时候,所有他没明确指出的东西最好都做好修改的准备.