项目结构:
project
---src
---------com.anyservice
------------------MainClass.java
------------------config_export.properties
---lib
<?xml version='1.0' encoding='utf-8'?>
<project name="export" default="all" basedir=".">
<!-- 1. 初始化 -->
<target name="init">
<!-- 设置属性 -->
<property name="home" value="." />
<property name="class.version" value="1.7" />
<property name="cfg.jar" value="export.jar" />
<property name="cfg.zip" value="export.zip" />
<!-- 创建目录 -->
<mkdir dir="${home}/build" />
<mkdir dir="${home}/build/classes" />
<!-- 时间戳 -->
<tstamp>
<format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<!-- 第三方jar包的路径 -->
<path id="lib-classpath">
<fileset dir="${home}/lib">
<include name="**/*.jar"/>
</fileset>
</path>
</target>
<!-- 2. 清理 -->
<target name="clean" depends="init">
<delete dir="${home}/build" />
</target>
<!-- 3. 编译 -->
<target name="compile" depends="init">
<mkdir dir="${home}/build/classes" />
<javac srcdir="${home}/src" destdir="${home}/build/classes" target="${class.version}" source="${class.version}" includes="com/anyservice/**" encoding="UTF-8" debug="true" debuglevel="lines,vars,source" includeantruntime="on">
<!-- 编译依赖的第三方jar包 -->
<classpath refid="lib-classpath"/>
</javac>
</target>
<!-- 4. 构建jar -->
<target name="jar" depends="init,compile">
<!-- 复制配置文件到jar -->
<copy todir="${home}/build">
<fileset dir="${home}/src/com/anyservice">
<include name="config_export.properties" />
</fileset>
</copy>
<!-- 复制第三方jar包 -->
<copy todir="${home}/build/lib">
<fileset dir="${home}/lib"/>
</copy>
<!-- 第三方jar包路径转换成可被Class-Path引用的形式 -->
<pathconvert property="quote.classpath" pathsep=" ">
<mapper>
<chainedmapper>
<!-- jar包文件只留文件名,去掉目录信息 -->
<flattenmapper/>
<!-- add lib/prefix -->
<globmapper from="*" to="lib/*"/>
</chainedmapper>
</mapper>
<path refid="lib-classpath"/>
</pathconvert>
<!-- build jar -->
<jar jarfile="${home}/build/${cfg.jar}">
<fileset dir="${home}/build/classes" />
<manifest>
<attribute name="Target-Java" value="${class.version}" />
<attribute name="Build-Time" value="${TODAY}" />
<attribute name="Main-Class" value="com.anyservice.MainClass" />
<attribute name="Class-Path" value="${quote.classpath}" />
</manifest>
</jar>
<!-- delete classes -->
<delete dir="${home}/build/classes" />
</target>
<!-- 5. zip -->
<target name="zip" depends="jar">
<zip destfile="${home}/build/${cfg.zip}" basedir="${home}/build" encoding="UTF-8" />
</target>
<!-- 6. 入口 -->
<target name="all" depends="clean,zip" />
</project>
-
<target name="all" depends="clean,zip" />
是打包脚本入口 - 执行某个target前,会先执行其depends里依赖的target
- 打入第三方jar包,需要在MANIFEST.MF文件的Class-Path中加入相应路径
<attribute name="Class-Path" value="${quote.classpath}" />
- 第三方jar包的路径需要利用
pathconvert
转换得到
最终打包成:

网友评论