◎筱米加步枪◎.Blog

Happy coding

Ant文件间脚本的调用

每个项目都有一个ant打包部署脚本,一个一个ant文件执行麻烦,需要有一个ant脚本统一调到这些ant文件,把这些ant文件给串起来.

贴个Ant文件间的调用脚本:(部分Ant脚本省略..有代表性的贴出些..)

svn.java.dir=.
svn.eframe.dir=${svn.java.dir}/EFrame
svn.workflow.dir=${svn.java.dir}/workflow
### jar dir ###
eframework.dir = ${svn.eframe.dir}/eframework
casclient.dir=${svn.eframe.dir}/casclient
### war dir  ###
CAS.dir = ${svn.eframe.dir}/CAS
e_workflowService.dir = ${svn.workflow.dir}/e_workflowService
<project basedir="." default="packageAll" name="allJar">
	<property environment="env" />
	<property file="build-all.properties" />
	
	<!-- 重建目录 -->
	<target name="rebuild">
		<delete dir="${basedir}/dist/lib" />
		<delete dir="${basedir}/dist/deploy"/>
		<mkdir dir="${basedir}/dist/lib"/>
		<mkdir dir="${basedir}/dist/deploy"/>
	</target>
	
	<!-- 调用其他项目的ant脚本(打jar包)-->
	<target name="packageJar" depends="rebuild">
		<ant antfile="build.xml" dir="${eframework.dir}"/>
		<ant antfile="build.xml" dir="${casclient.dir}"/>
	</target>
	
	<!-- 调用其他项目的ant脚本(打war包)-->
	<target name="packageWar" depends="packageJar">
		<ant antfile="build.xml" dir="${CAS.dir}"/>
		<ant antfile="build.xml" dir="${e_workflowService.dir}"/>
	</target>
	
	<target name="packageAll" depends="packageWar"/>
</project>

完毕..

使用Ant生成JBoss上部署项目的脚本

用Ant脚本打包部署项目,生成Jboss上部署后的文件信息.(跟MyEclipse部署到Jboss的效果一样)

搞了一天多..Ant不是很熟..贴个备忘下..

svn.lib.path=../../lib
svn.dist.path=../../dist
svn.target.lib=${svn.dist.path}/lib
svn.target.deploy=${svn.dist.path}/deploy
target.war.file=${svn.target.deploy}/EFrameWeb.war
busi.jars=e_workflowclient.jar,jbpmengineclient.jar
<project basedir="." default="deploy" name="EFrameWeb">
	<property environment="env" />
	<!-- 引用属性文件的属性定义 -->
	<property file="build.properties" />

	<property name="debuglevel" value="source,lines,vars" />
	<property name="target" value="1.6" />
	<property name="source" value="1.6" />
	<!-- 定义WebRoot路径 -->
	<property name="WebRoot.dir" value="${basedir}/WebRoot"/>
	<!-- 定义编译路径 -->
	<property name="compile.dir" value="${WebRoot.dir}/WEB-INF/classes"/>
	<!-- 定义源代码路径 -->
	<property name="src.dir" value="${basedir}/src"/>
	<!-- 定义项目所用到的其他包 -->
	<property name="lib.dir" value="${WebRoot.dir}/WEB-INF/lib"/>
	
	<!-- 定义生成的war包的classes路径 -->
	<property name="target.war.file.classes" value="${target.war.file}/WEB-INF/classes"/>
	<!-- 定义生成的war包的lib路径-->
	<property name="target.war.file.lib" value="${target.war.file}/WEB-INF/lib"/>
	
	
	<path id="appAPI.classpath">
		<!-- 包含项目中涉及到的业务包和工具包 -->
		<fileset dir="${svn.target.lib}">
			<include name="**/*.jar"/>
		</fileset>
		
		<!-- 包含项目中涉及到第三方开源包 -->
		<fileset dir="${svn.lib.path}">
			<include name="**/*.jar" />
		</fileset>
		
		<!-- 包含存在项目自身lib目录下的包 -->
		<fileset dir="${lib.dir}">
			<include name="**/*.jar" />
		</fileset>
	</path>
	<target name="clean">
		<delete dir="${compile.dir}" />
		<delete dir="${target.war.file}/" />
	</target>
	<target name="init" depends="clean">
		<mkdir dir="${target.war.file}" /> 
		<mkdir dir="${compile.dir}" />
		
		<!-- 属性信息 -->
		<echo message="${ant.project.name}: ${ant.file}" />
		
		<!-- 编译程序 -->
		<javac debug="true" 
			   includeantruntime="false" 
			   debuglevel="${debuglevel}" 
			   encoding="GBK" 
			   destdir="${compile.dir}" 
			   source="${source}" 
			   target="${target}">
			<src path="${src.dir}" />
			<classpath refid="appAPI.classpath" />
		</javac>
		
		<!-- 拷贝WebRoot下的东西 -->
		<copy includeemptydirs="false" todir="${target.war.file}">
			<fileset dir="${WebRoot.dir}">
				<exclude name="**/.svn" />
				<exclude name="**/*.launch" />
			</fileset>

		</copy>
		
		<!-- 拷贝项目classses非编译文件 -->
		<copy includeemptydirs="false" todir="${target.war.file.classes}">
			<fileset dir="${src.dir}">
				<exclude name="**/*.launch" />
				<exclude name="**/*.java" />
				<exclude name="**/.svn" />
			</fileset>
		</copy>

		<!-- 拷贝项目所依赖的业务包 -->
		<copy includeemptydirs="false" todir="${target.war.file.lib}">
			<fileset dir="${svn.target.lib}" includes="${busi.jars}"/>
		</copy>
	</target>

	<target name="deploy" depends="init"></target>
</project>

 

使用Ant编译出现“找不到符号”错误原因与解决方法

这两天做写Ant脚本打包和部署项目.期间遇到一个问题,花了两三个小时解决.真郁闷..笔记下下.
问题描述如下:
使用Ant脚本编译打包程序时出错,出错信息:“找不到符号”,检查编译程序出来的代码无误,也确保需要的jar包已经引入。
后来偶然发现目录中存在一个早期版本打成的一个同名的jar包.而我写的ant脚本加载器又是优先加载旧版本的jar包.因此识别到的类没有新项目中所用的方法.自然就报"找不到符号"的错误了.
解决方法:
1.最根本的办法:就是去除旧版本的包,然后重新编译即可.
2.不除去旧版本包,可以优先加载新版本的jar程序.

Ant学习笔记

看Hibernate的时候发现Ant这个东东,花了3个小时查了些资料,并总结如下:

Ant是用来编译/运行/测试java程序

Ant可用于项目管理。

Ant还提供了打包,生成API文档等多功能。

总之,Ant可提高程序员的开发效率。

使用MyEcipse创建build.xml文件(如果自己写比较麻烦的话,可以用工具帮你生成,不过感觉有挺多垃圾信息)

具体方法如下:

【项目右键】>>【Export】>>【General】>>【 Ant Buildfiles】>>【 next】>>【 finish】即可

贴个下午写的一个 build.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
    <!--  
          <project>构建文件对应的一个项目
            属性介绍:
                 basedir表示项目的基准目录
                 basedir="."表示基准目录为src目录 
                 default表示默认的运行目标(必须)
                 name表示项目名
      -->
	<project basedir="." default="build" name="Ant">
    <property environment="env"/>
	<!-- 
	     <property>定义属性以及于其对应的值
	     通常:src存放java源代码文件
	         classes存放java编译后的文件
	         lib存放要用到的第三方jar包
	         dist存放打包后的jar包
	         doc存放API文档
	  -->
    <property name="src.dir" value="src/com/shine/ant"/>
    <property name="classes.dir" value="bin/com/shine/ant"/>
    <property name="lib.dir" value="lib"/>
    <property name="dist.dir" value="dist"/>
	<property name="doc.dir" value="doc"/>
	
	<!--
	    <path>定义类路径,其中值指向classes.dir
	-->
    <path id="Ant.classpath">
        <pathelement location="${classes.dir}"/>
    </path>
		
	<!-- 初始化操作 -->
    <target name="init">
    	<!--
    	     <delete>标签表示删除一个或一组文件
    	      属性介绍:
    	         dir表示要删除的目录
    	  -->

    	<delete dir="${classes.dir}" />
    	<!--
    	     <mkdir>标签表示创建目录
    	      属性介绍:
    	          dir表示要创建的目录
    	  -->
        <mkdir dir="${classes.dir}"/>
    	<!--
    	     <copy>标签用于文件或文件集的拷贝
    	     属性介绍:
    	           includeemptydirs表示制定是否拷贝空目录
    	           				    默认值为拷贝,此处不拷贝
    	           todir表示目标目录
    	-->
        <copy includeemptydirs="false" todir="${classes.dir}">
            <!--
               <fileset>表示了一组文件信息
                        属性介绍:
                        dir表示基目录
                        excludes表示需要派出的文件模式的文件列表
            -->
        	<fileset dir="${src.dir}" 
        		     excludes="**/*.launch,**/*.java"/>
        </copy>
    </target>
	<!-- 清除操作 -->
    <target name="clean">
        <delete dir="${classes.dir}"/>
    </target>
	<!--
	    <target>标签表示你要做的操作
	      		属性name表示目标的名字,起到识别作用
	      		depends表示依赖,就是要先执行clean才可以执行
	  -->
	<!-- 清除所有 -->
    <target depends="clean" name="cleanall"/>
	
    <target depends="build-project" name="build"/>
	<!-- 建立工程 -->
    <target depends="init" name="build-project">
    	<!--
    	    <javac>标签用于编译一个或一组java文件
    	             属性介绍:
    	               debug表示包含的调试信息
    	               srcdir表示源文件
    	               destdir表示class文件的输出目录
    	-->
        <javac debug="true" 
        	   srcdir="${src.dir}"  
        	   destdir="bin" >
        </javac>
    </target>
	
	<!-- 打包成jar包 -->
	<target name="pack">
		<mkdir dir="${dist.dir}"/>
		<!--
		   <jar>文件用来生成一个jar文件
		   属性介绍:
		        destfile表示生成的jar文件名
		        basedir表示被打包的文件名
		-->
		<jar destfile="${dist.dir}/ant.jar" 
			 basedir="${classes.dir}">
		    <!--
		        <exclude>表示被排除的文件
		      -->
			<exclude name="**/*.java"/>
		</jar>
    </target>
	
	<!-- 生成API文档 -->
	<target name="doc">
		<delete dir="${doc.dir}"/>
		<mkdir dir="${doc.dir}"/>
		<!--
		     <javadoc>标签用于生成javadoc-API文档
		      属性介绍:
		         destdir表示要输出的目录
		  -->
		<javadoc destdir="${doc.dir}">
			<!-- 
			    指定要被包含的文件 为src/com/shine/ant下的所有类 
			-->
			<packageset dir="src" defaultexcludes="yes">
			    <include name="com/shine/ant/**"/>
			</packageset>
		</javadoc>
	</target>
</project>

完毕~~~