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>
完毕~~~