将一个简单的类(Sample)进行编译、打包、运行(传参数)。
1 源文件
Java源文件:Sample.java
package powerwind;
import javax.swing.*;
public class Sample {
public static void main(String[] args) throws Exception {
if (args.length > 0)
JOptionPane.showMessageDialog(null, args[0]);
else
JOptionPane.showMessageDialog(null, "HelloWorld");
}
}
ant文件:build.xml
注重:encoding="GBK" 设置后才可以有中文注释
<?xml version="1.0" encoding="GBK" ?>
<!-- ===================================== -->
<!-- 周健兴 2006/10/18 -->
<!-- ===================================== -->
<project name="sample" default="run" basedir=".">
<description>用于学习的简单ant工程文件</description>
<!--属性设置-->
<property environment="env" />
<property file="build.properties" />
<property name="src.dir" value="${basedir}/src" />
<property name="java.lib.dir" value="${env.JAVA_HOME}/lib" />
<property name="build.dir" value="${basedir}/build" />
<property name="classes.dir" value="${build.dir}/classes" />
<property name="dist.dir" value="${basedir}/dist" />
<!-- 基本编译路径设置 -->
<path id="compile.classpath">
<fileset dir="${java.lib.dir}">
<include name="tools.jar" />
</fileset>
</path>
<!-- 运行路径设置 -->
<path id="run.classpath">
<path refid="compile.classpath" />
<pathelement location="${classes.dir}" />
</path>
<!-- 排除java源文件的模式集 -->
<patternset id="no.java">
<exclude name="**/*.java" />
</patternset>
<!-- 初始化,建立目录,复制文件 -->
<target name="init" description="初始化,建立目录,复制文件">
<mkdir dir="${classes.dir}" />
<mkdir dir="${dist.dir}" />
<copy todir="${classes.dir}">
<fileset dir="${src.dir}">
<patternset refid="no.java" />
</fileset>
</copy>
</target>
<!-- 清理,删除临时目录 -->
<target name="clean" description="清理,删除临时目录">
<delete dir="${build.dir}" />
<delete dir="${dist.dir}" />
<echo level="info">清理完毕</echo>
</target>
<!-- 编译源文件-->
<target name="compile" depends="init" description="编译源文件">
<javac srcdir="${src.dir}" destdir="${classes.dir}" source="1.5" target="1.5">
<classpath refid="compile.classpath" />
</javac>
</target>
<!-- 打包类文件 -->
<target name="jar" depends="compile" description="打包类文件">
<jar jarfile="${dist.dir}/${jar.file}" manifest="${src.dir}/${manifest.file}">
<fileset dir="${classes.dir}" includes="**/*.*" />
</jar>
</target>
<!-- 从打包后jar的文件里运行 -->
<target name="runjar" depends="jar" description="运行jar">
<java jar="${dist.dir}/${jar.file}" fork="yes" dir="${basedir}" />
</target>
<!-- 运行 -->
<target name="run" depends="compile" description="运行">
<java classname="powerwind.Sample" fork="yes" dir="${basedir}">
<classpath refid="run.classpath" />
<arg line="${param.msg}" />
</java>
</target>
</project>
属性文件:build.properties
manifest.file = manifest.txt
jar.file = sample.jar
列表文件:manifest.txt (最后的回车不能少)
Main-Class: powerwind.Sample
文件结构:
E:\JAVA\SAMPLE
│ build.properties
│ build.xml
│
└─src
│ manifest.txt
│
└─powerwind
Sample.java
可以不事先创建manifest.txt 文件,而在build.xml文件中加入一个任务
<!-- 创建清单文件 -->
<target name="create.manifest" description="创建清单文件">
<manifest file="${src.dir}/${manifest.file}">
<attribute name="Built-By" value="${user.name}" />
<attribute name="Main-Class" value="powerwind.Sample" />
</manifest>
</target>
<!-- 这里的依靠关系加上create.manifest -->
<target name="jar" depends="compile,create.manifest" …>
同样,假如全部属性在build.xml文件中设置,也不用build.properties这个属性文件了。
但是,假如属性较多,放在其它文件中是比较方便的。属性文件可以用XML文件来替代
props.xml 文件
<properties>
<manifest>
<file>manifest.txt</file>
</manifest>
<jar>
<file>sample.jar</file>
</jar>
</properties>
这样,将原来的${manifest.file}改成${properties.manifest.file} ,${jar.file} 改成${properties.jar.file}即可。
当然,加载属性文件的<property file="build.properties" />也要改成<xmlproperty file="props.xml" />