使用 生成runnable jar

<?xml version="1.0" encoding="UTF-8"?>
<project name="ldapTool" default="all" basedir=".">
	<property name="src.dir" value="src" />
	<property name="src.test.dir" value="test" />
	<property name="classes.dir" value="WebRoot/WEB-INF/classes" />
	<property name="lib.dir" value="WebRoot/WEB-INF/lib" />
	<!-- 用于输出打包的文件夹 -->
	<property name="temp.dir" value="${java.io.tmpdir}/${ant.project.name}" />
	<property name="target.dir" value="target" />
	<property name="jar.CreateXmlFromLdap" value="CreateXmlFromLdap.jar" />
	<property name="jar.RegisterToLdap" value="RegisterToLdap.jar" />

	<!--构造打包时Class-Path需要的路径 -->
	<!--pathconvert用于对目录进行组合 property即这个组合的名字,pathsep作用是各个文件之间的分隔符,  
		如果不写,在windows平台默认是分号。但时在MANIFEST.MF这个文件中,各个jar包之间要用空格区分,  
		因此。这里就写成空格了  
		-->
	<pathconvert property="lib" pathsep=" ">
		<!--mapper,对路径组合方式进行控制-->
		<mapper>
			<!--chainedmapper 作用是联合多个mapper-->
			<chainedmapper>
				<!--过滤文件,将路径去掉,只保留文件名-->
				<flattenmapper />
				<!--过滤+转换器,将所有的文件名前面都加上一个lib,我们知道lib目录下面有jar包,  
		lib/*的作用其实是将jar包名与路径进行组合形成如:lib/google.jar这样的相对路径  
		-->
				<globmapper from="*" to="lib/*" />
			</chainedmapper>
		</mapper>
		<!--按照mapper定义的格式组合lib目录下面的所有jar文件,形成诸如lib/jar1.jar lib/jar2.jar的字符串-->
		<fileset dir="${lib.dir}">
			<include name="*.jar" />
		</fileset>
	</pathconvert>

	<!--组合各个路径,构成MANIFEST.MF文件中Class-Path所需的字符串" . " 表示当前目录-->
	<property name="libs" value=" . ${lib}" />
	<echo>libs ${lib}</echo>
	<!-- 定义classpath -->
	<path id="master-classpath">
		<fileset file="${lib.dir}/*.jar" />
		<pathelement path="${classes.dir}" />
	</path>

	<!-- 创建时间戳 -->
	<tstamp />
	<!-- clean -->
	<target name="clean">
		<delete dir="${classes.dir}" />
		<delete dir="${temp.dir}" />

		<delete file="${target.dir}/${ant.project.name}.jar" />
		<delete file="${target.dir}/${ant.project.name}.war" />
		<delete dir="${target.dir}" />
	</target>
	<!-- 初始化任务 -->
	<target name="init" depends="clean">
		<mkdir dir="${target.dir}" />
		<mkdir dir="${temp.dir}" />
		<mkdir dir="${classes.dir}" />
	</target>
	<!-- 编译 -->
	<target name="compile" depends="init" description="compile the source files">
		<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="true" encoding="UTF-8">
			<classpath refid="master-classpath" />
		</javac>
		<javac srcdir="${src.test.dir}" destdir="${classes.dir}" debug="true" encoding="UTF-8">
			<classpath refid="master-classpath" />
		</javac>
		<!--
		<copy todir="${classes.dir}" overwrite="true">
			<fileset dir="${src.dir}">
				<include name="**/*.xml" />
				<include name="**/*.properties" />
				<include name="**/*.bat" />
			</fileset>
		</copy>
		-->
	</target>
	<!--打jar包-->
	<target name="jar" depends="compile">
		<jar jarfile="${target.dir}/${jar.CreateXmlFromLdap}">
			<fileset dir="${classes.dir}">
				<include name="**/*" />
			</fileset>
			<!--为jar包指定manifest,当然,如果jar包不需要打成runnable的形式,manifest可以不要-->
			<manifest>
				<!--指定Class-Path-->
				<attribute name="Class-Path" value="${libs}" />
				<!--指定main-class-->
				<attribute name="Main-Class" value="com.hikvision.cms.ldap.test.CreateXmlFromLdap" />
			</manifest>
		</jar>
		<jar jarfile="${target.dir}/${jar.RegisterToLdap}">
			<fileset dir="${classes.dir}">
				<include name="**/*" />
			</fileset>
			<!--为jar包指定manifest,当然,如果jar包不需要打成runnable的形式,manifest可以不要-->
			<manifest>
				<!--指定Class-Path-->
				<attribute name="Class-Path" value="${libs}" />
				<!--指定main-class-->
				<attribute name="Main-Class" value="com.hikvision.cms.ldap.test.RegisterToLdap" />
			</manifest>
		</jar>
	</target>

	<!--打 zip 包之前-->
	<target name="preZIP" depends="jar">
		<copy todir="${temp.dir}" overwrite="true">
			<fileset dir="${target.dir}">
				<include name="*.jar" />
			</fileset>
			<fileset dir="${src.dir}">
				<include name="**/*.xml" />
				<include name="**/*.properties" />
				<include name="**/*.bat" />
			</fileset>
		</copy>
		<copy todir="${temp.dir}/lib" overwrite="true">
			<!--<fileset dir="${basedir}">
				<include name="${lib.dir}/*.jar" />
				<include name="index.html" />
				<include name="page/**/*.*" />
				<include name="WEB-INF/*.xml" />
			</fileset>-->
			<fileset dir="${lib.dir}">
				<include name="*.jar" />
			</fileset>
		</copy>
	</target>

	<!--运行一下jar包,试试看效果-->
	<target name="run" depends="preZIP">
		<!--其实这里就是运行jar命令,注意fork一定加上,不然不起作用-->
		<java jar="${temp.dir}/${jar.CreateXmlFromLdap}" fork="true">
		</java>
	</target>

	<!--打zip包-->
	<target name="zip" depends="preZIP">
		<jar jarfile="${target.dir}/${ant.project.name}.zip">
			<fileset dir="${temp.dir}">
				<include name="**/*.*" />
			</fileset>
		</jar>
	</target>

	<target name="all" depends="zip">
		<delete dir="${temp.dir}" />
	</target>
</project>

猜你喜欢

转载自fireye83.iteye.com/blog/1554989