上回给大家分享了一种解决方案(以下简称方案一),但该方案存在一个弊端:第一次编译时需要编译工程中所有的java文件,包括跟该SourceFolder中源码无关的java文件。为解决这一问题,我又研究了ant的使用,最终找到了如下解决方案(以下简称方案二)。方案二与方案一思路基本一致,区别仅在于第一次编译。在方案二中,第一次编译时,我配置了sourcepath。这样,当ant编译指定目录下的文件时如果需要引用的java文件不在该SourceFolder目录下,就可以去配置的sourcepath中查找编译。下面贴出配置信息:
<?xml version= "1.0"?>
<project default="clean" basedir=".">
<property name="base" value="." />
<property name="src.1.dir" value="src1" />
<property name="src.2.dir" value="src2" />
<property name="src.3.dir" value="src3" />
<property name="classes.1.dir" value="bin1" />
<property name="temp.dir" value="temp" />
<property name="jarFile" value="D:/hello.jar" />
<!-- 初始化,创建两个临时文件 -->
<target name="init">
<!-- 用于存储指定目录编译后产生的class文件 -->
<mkdir dir="${classes.1.dir}"/>
<!-- 用于存储指定目录编译后产生的class文件以及相关class文件 -->
<mkdir dir="${temp.dir}"/>
</target>
<!-- 编译java文件 -->
<target name="compile" depends="init">
<!-- 编译指定目录下的java文件及其相关文件 -->
<javac srcdir="${src.1.dir}" destdir="${temp.dir}">
<sourcepath path="${src.2.dir}"></sourcepath>
<sourcepath path="${src.3.dir}"></sourcepath>
</javac>
<!-- 使用临时目录中的class文件编译指定目录下的java文件 -->
<javac srcdir="${src.1.dir}" destdir="${classes.1.dir}">
<classpath>
<pathelement location="${temp.dir}"/>
</classpath>
</javac>
</target>
<!-- 打包class文件 -->
<target name="package" depends="compile">
<jar destfile="${jarFile}" basedir="${classes.1.dir}">
</jar>
</target>
<!-- 清理,删除临时文件 -->
<target name="clean" depends="package">
<delete dir="${classes.1.dir}" />
<delete dir="${temp.dir}" />
</target>
</project>
项目结构:
项目源码(包含上述配置信息):点击下载(http://download.youkuaiyun.com/detail/binbinxyz/4152665)