自動生成 manifest
<?xml version="1.0"?>
<project name="LineNotify" default="jar">
<target name="init">
<property file="build.properties"/>
<property name="name" value="LineNotify"/>
<property name="src.dir" value="src"/>
<property name="lib.dir" value="lib"/>
<property name="build.dir" value="build"/>
<property name="build.classes.dir" value="${build.dir}/classes"/>
<property name="build.dest.dir" value="${build.dir}/dest"/>
<property name="jar.dir" value="${build.dest.dir}/${name}.jar"/>
<property name="jar.to.dir" value="${lib.dir}"/>
<property name="target" value="1.8"/>
<property name="source" value="1.8"/>
<property name="encoding" value="UTF-8"/>
<path id="classpath" >
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<pathconvert property="manifestClassPath" pathsep=" ">
<mapper>
<chainedmapper>
<!-- 移除絕對路徑 -->
<flattenmapper />
<!-- 加上 lib 相對路徑 -->
<globmapper from="*" to="../lib/*" />
</chainedmapper>
</mapper>
<path refid="classpath" />
</pathconvert>
</target>
<!-- =================================================================== -->
<!-- Clean up. -->
<!-- =================================================================== -->
<target name="clean" depends="init">
<delete dir="${build.classes.dir}"/>
</target>
<!-- =================================================================== -->
<!-- Prepares the build directory -->
<!-- =================================================================== -->
<target name="build-prepare">
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.classes.dir}"/>
<mkdir dir="${build.dest.dir}"/>
</target>
<!-- ====================================================================== -->
<!-- Compiles the source directory omitting files depending on jars present -->
<!-- ====================================================================== -->
<target name="compile" depends="clean, build-prepare">
<javac srcdir="${src.dir}" source="${source}" target="${target}" destdir="${build.classes.dir}" debug="on" encoding="${encoding}">
<classpath refid="classpath"/>
<exclude name="**/._*"/>
</javac>
</target>
<target name="jar" depends="init, compile">
<copy todir="${build.classes.dir}">
<fileset dir="${src.dir}">
<exclude name="**/*.properties"/>
<exclude name="**/*.java"/>
<!-- 排除 nls package 的所有内容 -->
<exclude name="nls/**"/>
</fileset>
</copy>
<jar jarfile="${jar.dir}" compress="true" basedir="${build.classes.dir}">
<!-- 動態生成 Class-Path -->
<manifest>
<!-- 主程入口 -->
<attribute name="Main-Class" value="com.ddim.linenotify.job.LineNotifyJob"/>
<attribute name="Class-Path" value="${manifestClassPath}"/>
</manifest>
</jar>
</target>
</project>