针对项目结构如下的例子
第一个是ant典型的例子,项目可以直接复制过去使用。 第二个是复杂一点的例子。
<?xml version="1.0" encoding="UTF-8"?>
<!-- storm项目名称,ant默认动作-->
<project name="storm_transactional_count" default="buildJar" basedir=".">
<property file="build.properties" />
<property name="version" value="1.0.0"/>
<property name="lib.dir" value="lib"/>
<property name="src.dir" value="src"/>
<property name="resources.dir" value="resources"/>
<property name="classes.dir" value="bin"/>
<property name="output.dir" value="out"/>
<property name="jarname" value="${ant.project.name}"/>
<property name="mainclass" value="com.ck.MainTopoCount"/>
<property name="jdk.version" value="1.7"/>
<!-- 第三方jar包的路径 -->
<path id="lib-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<!-- 初始化工作,如创建目录等 -->
<target name="init">
<delete dir="${output.dir}" includes="*.*" />
<mkdir dir="${classes.dir}"/>
<mkdir dir="${output.dir}"/>
</target>
<!-- 编译 -->
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${classes.dir}" source="${jdk.version}" target="${jdk.version}" >
<compilerarg line="-encoding UTF-8"/>
<classpath refid="lib-classpath"/>
</javac>
</target>
<!--拷贝properties和XML文件到classes目录-->
<target name="copyPropAndXML" depends="compile">
<copy todir="${classes.dir}" overwrite="true">
<fileset dir="${resources.dir}">
<include name="*.xml" />
<include name="*.properties" />
</fileset>
</copy>
</target>
<!--打包开始,名字为jar,依赖任务为copyPropAndXML-->
<target name="buildJar" depends="copyPropAndXML">
<pathconvert property="mf.classpath" pathsep=" ">
<mapper>
<chainedmapper>
<!-- jar包文件只留文件名,去掉目录信息 -->
<flattenmapper/>
<!-- add lib/ prefix -->
<globmapper from="*" to="lib/*"/>
</chainedmapper>
</mapper>
<path refid="lib-classpath"/>
</pathconvert>
<!-- jar文件的输出路径,jar包名字 -->
<jar destfile="${output.dir}/${jarname}.jar"><!-- basedir属性和下面的fileset功能是一样的 basedir="${classes.dir}" -->
<manifest>
<attribute name="Main-class" value="${mainclass}"/>
<attribute name="Class-Path" value="."/>
</manifest>
<!-- jar包包含的文件夹-->
<fileset dir="${classes.dir}"/>
<!-- 定义哪些jar包需要一起打包,这个包可以在任何位置-->
<zipfileset excludes="META-INF/*.SF" src="${lib.dir}/mysql-connector-java-5.1.28.jar"/>
<zipfileset excludes="META-INF/*.SF" src="${lib.dir}/rabbitmq-client.jar"/>
</jar>
</target>
<!--运行一下jar包,试试看效果-->
<target name="runJar" >
<!--其实这里就是运行jar命令,注意fork一定加上,不然不起作用-->
<java jar="${jarfilename}" fork="true"/>
</target>
<!-- 清理 -->
<target name="clean">
<delete dir="${output.dir}"/>
<delete dir="${classes.dir}"/>
</target>
<!-- 此文件几个地方要注意改:项目名称,jdk版本,文件夹路径,主类名,需要打的包等等 -->
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project name="storm" default="compile" basedir=".">
<property file="build.properties" />
<property name="version" value="1.0.1" />
<property name="lib.dir" value="lib"/>
<property name="src.dir" value="src"/>
<property name="resources.dir" value="resources"/>
<property name="classes.dir" value="bin"/>
<property name="output.dir" value="out"/>
<property name="jarname" value="${ant.project.name}"/>
<property name="mainclass" value="com.cmsz.storm.MainTopology"/>
<property name="jdk.version" value="1.6"/>
<!-- 第三方jar包的路径 -->
<path id="lib-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<!-- 初始化工作,如创建目录等 -->
<target name="init">
<delete dir="${output.dir}" includes="*.*" />
<mkdir dir="${classes.dir}"/>
<mkdir dir="${output.dir}"/>
</target>
<!-- 编译 -->
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${classes.dir}" source="${jdk.version}" target="${jdk.version}" >
<compilerarg line="-encoding UTF-8"/>
<classpath refid="lib-classpath"/>
</javac>
</target>
<!--拷贝properties和XML文件到classes目录-->
<target name="copyPropAndXML" depends="compile">
<copy todir="${classes.dir}" overwrite="true">
<fileset dir="${resources.dir}">
<include name="*.xml" />
<include name="*.properties" />
<exclude name="config-dev.properties" />
<exclude name="config-test.properties" />
</fileset>
</copy>
</target>
<!--生成开发环境的 properties文件-->
<target name="replaceDevPropAndXML" depends="copyPropAndXML">
<delete dir="${classes.dir}" includes="storm_config.properties" />
<copy file="${resources.dir}/config_dev.properties" todir="${classes.dir}" overwrite="true"/>
<move file="${classes.dir}/config_dev.properties" tofile="${classes.dir}/storm_config.properties" />
</target>
<!--生成测试环境的 properties文件-->
<target name="replaceTestPropAndXML" depends="copyPropAndXML">
<delete dir="${classes.dir}" includes="storm_config.properties" />
<copy file="${resources.dir}/config_test.properties" todir="${classes.dir}" overwrite="true"/>
<move file="${classes.dir}/config_test.properties" tofile="${classes.dir}/storm_config.properties" />
</target>
<!--打包开始,名字为jar,依赖任务为compile-->
<target name="buildDevJar" depends="replaceDevPropAndXML">
<!--Create a property containing all .jar files,
prefix lib/, and seperated with a space-->
<pathconvert property="mf.classpath" pathsep=" ">
<mapper>
<chainedmapper>
<!-- jar包文件只留文件名,去掉目录信息 -->
<flattenmapper/>
<!-- add lib/ prefix -->
<globmapper from="*" to="lib/*"/>
</chainedmapper>
</mapper>
<path refid="lib-classpath"/>
</pathconvert>
<!-- jar文件的输出路径 -->
<jar destfile="${output.dir}/${jarname}_dev.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${mainclass}"/>
<attribute name="Class-Path" value="${mf.classpath}"/>
</manifest>
</jar>
</target>
<!--打包开始,名字为jar,依赖任务为compile-->
<target name="buildTestJar" depends="replaceTestPropAndXML">
<!--Create a property containing all .jar files,
prefix lib/, and seperated with a space-->
<pathconvert property="mf.classpath" pathsep=" ">
<mapper>
<chainedmapper>
<!-- jar包文件只留文件名,去掉目录信息 -->
<flattenmapper/>
<!-- add lib/ prefix -->
<globmapper from="*" to="lib/*"/>
</chainedmapper>
</mapper>
<path refid="lib-classpath"/>
</pathconvert>
<!-- jar文件的输出路径 -->
<jar destfile="${output.dir}/${jarname}_test.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-class" value="${mainclass}"/>
<attribute name="Class-Path" value="${mf.classpath}"/>
</manifest>
</jar>
</target>
<!--运行一下jar包,试试看效果-->
<target name="runJar" >
<!--其实这里就是运行jar命令,注意fork一定加上,不然不起作用-->
<java jar="${jarfilename}" fork="true"/>
</target>
<!-- 清理 -->
<target name="clean">
<delete dir="${output.dir}"/>
<delete dir="${classes.dir}"/>
</target>
</project>