ant的配置文件build.xml实例详解

原创
2015/01/13 16:55
阅读数 6.7K

针对项目结构如下的例子

第一个是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>


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部