1、源码放在多个源码目录(source floder)下,而且其中的代码存在相互引用,这样按正常的方法编译的时候就会存在问题
处理方法:
在init的时候创建一个临时的源码目录src,使用copy方法将多个源码目录的内容复制在src中,然后使用这个src进行编译就可以了。
代码段落:
<copy todir="${src.dir}">
<fileset dir="${basedir}/[源码目录1]">
<include name="**/*.java"/>
</fileset>
</copy>
<copy todir="${src.dir}">
<fileset dir="${basedir}/[源码目录2]">
<include name="**/*.java"/>
</fileset>
</copy>
2、ant中排除文件夹的方法
<fileset dir="${webcontent.dir}">
<exclude name="**/*.classes" />
<exclude name="**/config.properties" />
<exclude name="WEB-INF/conf/**"/>
<exclude name="WEB-INF/modules/**"/>
<exclude name="WEB-INF/services/**"/>
<exclude name="WEB-INF/lib/**"/>
</fileset>
要排除文件夹的话,就使用 "目录/" 或者 "目录/**"
"目录/*.*" 是排除目录下所有的文件
以下是我编写的build.xml 例子:
<?xml version="1.0"?> <project default="localDeployWar" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant"> <echo message="pulling in property files" /> <property file="build.properties" /> <!-- 定义项目名称 --> <property name="project.name" value="[项目名称/war包名称]" /> <!-- 源代码路径 --> <property name="src.dir" value="${basedir}/target/src" /> <property name="src.dir1" value="${basedir}/target/src" /> <!-- 定义jar包名称 --> <!--<property name="jar.name" value="com.xx" />--> <!-- 定义war名称 --> <property name="war.name" value="${project.name}" /> <!-- 定义 web 容器的部署路径 --> <property name="localWebServer.home" value="D:\apache-tomcat-7/" /> <!-- 定义 文件输出路径 --> <property name="outFileDir" value="war包目录" /> <!-- 编译的目标路径 --> <property name="dist.dir" value="${basedir}/target" /> <property name="dist.classes.dir" value="${dist.dir}/classes" /> <property name="dist.jar.dir" value="${dist.dir}/jar" /> <property name="dist.war.dir" value="${dist.dir}/war" /> <!-- WebContent 结构下的几个路径 --> <property name="webcontent.dir" value="./WebContent" /> <property name="webcontent.webinf.dir" value="${webcontent.dir}/WEB-INF" /> <!-- 加载ivy文件 --> <ivy:settings file="ivysettings.xml" /> <target name="resolve" description="--> parse ivy.xml"> <ivy:resolve file="ivy.xml" conf="*" /> <ivy:cachepath pathid="ivy.libs.compile" type="jar,bundle" conf="default" /> <ivy:cachepath pathid="ivy.libs.test" type="jar,bundle" conf="default" /> <ivy:cachepath pathid="ivy.libs.runtime" type="jar,bundle" conf="default" /> </target> <!-- 定义 classpath 路径,抽象定义,可以多处引用 --> <path id="classpath"> <!-- 项目的jar包--> <!-- <fileset dir="${webcontent.webinf.dir}/lib"> <include name="**/*.jar" /> </fileset> --> <!-- 项目的classes文件--> <pathelement location="${webcontent.webinf.dir}/classes " /> <!-- web 服务器的jar包--> <!-- <fileset dir="${localWebServer.home}/lib"> <include name="**/*.jar" /> </fileset> --> </path> <!-- 初始化删除、创建 classes 路径 --> <target name="init"> <echo message=" ====== 初始化创建build.dir编译目录 ======" /> <delete dir="${dist.dir}" /> <delete dir="${src.dir}" /> <mkdir dir="${dist.dir}" /> <mkdir dir="${dist.jar.dir}" /> <mkdir dir="${dist.war.dir}" /> <mkdir dir="${src.dir}"/> <copy todir="${src.dir}"> <fileset dir="${basedir}/[源码目录]"> <include name="**/*.java"/> </fileset> </copy> <echo message=" ====== 初始化WebContent.classes创建编译目录 ======" /> <!-- WebContent 下的 classes --> <mkdir dir="${dist.classes.dir}" /> </target> <!-- 编译 java 文件,编译到 dist.classes 下--> <target name="compile" depends="init,resolve"> <echo message=" ====== 编译源代码 复制到 dist.classes 目录 ======" /> <javac encoding="utf-8" srcdir="${src.dir}" destdir="${dist.classes.dir}" fork="yes" executable="C:/Program Files/Java/jdk1.7.0_45/bin/javac" debug="on" includeantruntime="on" deprecation="false" optimize="true" failonerror="true"> <compilerarg value="-Xlint:unchecked" /> <compilerarg value="-Xlint:deprecation" /> <classpath> <path refid="ivy.libs.compile" /> </classpath> </javac> <!-- 格式 二 <javac srcdir="${src.dir} " destdir="${build.classes.dir}" classpathref="classpath" /> --> <echo message=" ====== 将重新编译的classes文件复制到classes目录下 ======" /> <copy todir="${webcontent.webinf.dir}/classes"> <fileset dir="${dist.classes.dir}"> <exclude name="**/*Test*.*" /> </fileset> </copy> </target> <target name="test" depends="compile" description="Junit 测试,暂无"> <echo message=" ====== Junit 测试,暂无 ======" /> </target> <!--6、打成WAR包 --> <target name="buildwar" depends="compile"> <echo message="====== 打 war 包 ======" /> <war destfile="${dist.war.dir}/${war.name}.war" webxml="${webcontent.dir}/WEB-INF/web.xml"> <fileset dir="${webcontent.dir}"> <exclude name="**/*.classes" /> <exclude name="**/config.properties" /> <exclude name="WEB-INF/conf/**"/> <exclude name="WEB-INF/modules/**"/> <exclude name="WEB-INF/services/**"/> <exclude name="WEB-INF/lib/**"/> </fileset> <classes dir="${dist.classes.dir}" /> <mappedresources> <restrict> <path refid="ivy.libs.runtime" /> <type type="file" /> </restrict> <chainedmapper> <flattenmapper /> <globmapper from="*" to="WEB-INF/lib/*" /> </chainedmapper> </mappedresources> </war> </target> <target name="localDeployWar" depends="buildwar" description="将war包复制到指定文件夹"> <echo message="将war包复制到指定文件夹" /> <copy todir="${outFileDir}" overwrite="true"> <fileset file="${dist.war.dir}/${war.name}.war" /> </copy> <echo message="删除临时文件" /> <delete dir="${basedir}/target/"></delete> </target> <!-- <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" /> <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask" /> --> </project>