如何使用ant从多个Source Folder的项目中导出jar包?

最近在修改公司的一个旧项目,经常需要修改其中一个Source Folder里面的部分java代码。修改完成后还要编译打包。最后再把jar包上传到服务器,重启服务器以进行调试。本来任务不难,但里面代码有点儿复杂。这样修改调试就显得十分繁琐。在尝试使用ant自动打包的过程中,我遇到了如下的问题:项目下有多个Source Folder,现在只需要将其中一个Source Folder下面的所有java文件编译并打成jar包。而这些java文件有可能依赖于其他Source Folder里面的类。想了半天没有结果,我又找同学请教、上网搜索。经过一系列不懈努力,我终于完成了该任务。

主要思路是:分两次编译。第一次编译所有java文件并将class文件保存在临时目录,第二次引用临时目录中的class文件来编译指定目录下的java文件以生成需要的class文件,最后把这些class文件打包。任务分解成这三步之后,每一步都挺简单的了。

下面贴出该任务的代码:

<?xml version= "1.0"?> <project default="defaultTarget" basedir="."> <!-- 基本属性定义 --> <property name="base" value="." /> <!-- 该项目是WEB项目,第三方jar包默认保存在该路径下 --> <property name="lib" value="WebRoot/WEB-INF/lib" /> <!-- javaEE包 --> <property name="javaeeLib" value="D:/soft/lib/javaee/javaee.jar" /> <!-- 指定的Source Folder,即:将该目录下的类对应的class文件打包 --> <property name="src.1.dir" value="vendue-src" /> <property name="src.2.dir" value="${base}" /> <property name="classes.1.dir" value="vendue-classes" /> <property name="classes.2.dir" value="other-classes" /> <!-- jar文件的保存位置,这里暂时保存在桌面,可以根据自己需要重新指定 --> <property name="jarFile" value="C:/Documents and Settings/Administrator/桌面/vendue_KernlEngine.jar" /> <!-- 定义编译时需要的第三方jar包 --> <path id="Third-Part Lib"> <fileset dir="${lib}"> <include name="**/*.jar" /> </fileset> </path> <!-- 初始化:创建两个临时目录 --> <target name="init"> <mkdir dir="${classes.1.dir}" /> <mkdir dir="${classes.2.dir}" /> </target> <!-- 编译所有java文件,供第二次编译时引用 --> <target name="compileAll" depends="init"> <javac srcdir="${src.2.dir}" destdir="${classes.2.dir}" encoding="gbk"> <classpath refid="Third-Part Lib"> </classpath> <classpath path="${javaeeLib}"> </classpath> </javac> </target> <!-- 编译指定源文件夹下的java文件 --> <target name="compile" depends="compileAll"> <javac srcdir="${src.1.dir}" destdir="${classes.1.dir}" encoding="gbk"> <classpath refid="Third-Part Lib" /> <classpath path="${classes.2.dir}" /> <classpath> <fileset dir="${baseLib}"> <include name="**/*.jar" /> </fileset> </classpath> </javac> </target> <!-- 打包生成jar文件--> <target name="defaultTarget" depends="compile"> <jar destfile="${jarFile}" basedir="${classes.1.dir}" /> </target> <!-- 清理临时目录以及该目录下的所有临时文件 --> <target name="clean"> <delete dir="classes.1.dir" /> <delete dir="classes.2.dir" /> </target> </project>

参考文章

标题:Multiplesource folders: Avoid implicit compilation with Ant

地址:http://stackoverflow.com/questions/4627913/multiple-source-folders-avoid-implicit-compilation-with-ant

截图: