[关闭]
@DingCao-HJJ 2015-09-01T09:53:30.000000Z 字数 3365 阅读 1690

使用Ant编Java程序

编程工具/环境 Java ant


配置Java环境请参考这里

简介

Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。

为什么用ant

与基于shell命令的扩展模式不同(如makefile),Ant用Java的类来扩展。(用户)不必编写shell命令,配置文件是基于XML的,通过调用target树,就可执行各种task。每个task由实现了一个特定Task接口的对象来运行。

必须承认,这样做,在构造shell命令时会失去一些特有的表达能力。但却给了你跨平台的能力-你可以在任何地方工作。

如何用ant

下载安装

  1. ant的官网下载一份ant,选择zip版本的ant即可

  2. 解压到你想要安装的目录下,我们得到ant的根目录文件夹(如楼主得到的是apache-ant-1.9.6)

  3. 配置环境变量:

    • windows下:(假定我解压到了C:/apache-ant-1.9.6
      前往配置环境变量:我的电脑->属性->高级->环境变量,添加如下变量(路径根据自己的安装路径而改变)。

      ANT_HOME C:/apache-ant-1.9.6
      path C:/apache-ant-1.9.6/bin
      classpath C:/apache-ant-1.9.6/lib
      或者:
      ANT_HOME C:/apache-ant-1.9.6
      path %ANT_HOME/bin
      classpath %ANT_HOME/lib

    • linux下:(假定我解压到了/usr/apache-ant-1.9.6)

      • 运行sudo gedit /etc/profile
      • 然后在文件末尾添加

        ANT_HOME=/usr/apache-ant-1.9.6
        PATH = %ANT_HOME%\bin; %ANT_HOME%\lib

      • 运行source /etc/profile令文件生效

  4. 验证是否成功安装:
    打开命令行/终端,敲击ant命令,如果出现以下内容,则安装成功(因为还没有新建buildfile)。

    Buildfile: build.xml does not exist!
    Build failed

建立buildfile

文件目录

一个好的文件目录架构能帮助我们理解项目的架构。

构建文件可以放在任何的位置。一般做法是放在项目顶层目录中,这样可以保持项目的简洁和清晰。下面是一个典型的项目层次结构。
(1) src存放源文件。
(2) class存放编译后的文件。
(3) lib存放第三方JAR包。
(4) dist存放打包,发布以后的代码。

常用标签

标签 属性 功能
<project> 工程的标签,一个buildfile里面唯一
name 工程名字
default ant时默认运行的task/target
description 项目的描述
<target> 要运行的功能/任务
name 任务名称
depends 依赖项,在当前target执行前要先执行的target。一次ant里只执行一次
<javac> 编译操作,和命令行的javac相同
srcdir 源文件目录
destdir 生成文件目录
classpathref 要编译时依赖的第三方jar包或者其他文件,可以用相对路径
includeantruntime 显示ant运行时间,一般设置为true即可
<java> java的运行命令
fork 是否另外新建一个JVM来运行程序
classname 要运行的java文件,应该是带有main函数
<classpath> <javac>classname属性一样
path 要用到的类所在的目录
<junit> junit单元测试
printsummary 是否输出测试概要
<path> 设置常用的路径/文件包,可用<pathelement>来设置多个,在<junit>标签里的<classpath>下使用为依赖包。
id 索引值
refid 表示该path引用索引为id的path
<property> 设置常用的路径/文件包

以HelloWorld为例子

文件目录
/HelloWorld
  |-- build.xml
  |-- src
        |-- HelloWorld.java
        |-- HelloWorldTest.java
  |-- lib
        |-- junit-4.9.jar
  |-- build
        |-- classes
              |-- HelloWorld.class
              |-- HelloWorldTest.class
源码
  1. // HelloWorld.java
  2. import java.util.*;
  3. public final class HelloWorld {
  4. private String str;
  5. public static void main(String[] args) {
  6. HelloWorld hw = new HelloWorld();
  7. hw.hello();
  8. System.out.println(hw.str);
  9. }
  10. public void hello() {
  11. str = "Hello World!";
  12. }
  13. public String getStr() {
  14. return str;
  15. }
  16. }
  1. // HelloWorldTest.java
  2. import static org.junit.Assert.*;
  3. import org.junit.Test;
  4. public class HelloWorldTest {
  5. public HelloWorld helloworld = new HelloWorld();
  6. @Test
  7. public void testHello() {
  8. helloworld.hello();
  9. assertEquals("Hello World!", helloworld.getStr());
  10. }
  11. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- the only mark of project -->
  3. <project name="HelloWorld" default="run">
  4. <!-- essential properties to refer to -->
  5. <property name="build.classes.dir" location="build/classes"/>
  6. <property name="src.dir" location="src" />
  7. <property name="lib.dir" location="lib" />
  8. <path id="compile.path">
  9. <pathelement location="${lib.dir}/junit-4.9.jar" />
  10. </path>
  11. <!-- target is a task, can build, change directory, Junit and so on -->
  12. <!-- clean up the class files that compiled last time -->
  13. <target name="clean">
  14. <delete dir="${build.classes.dir}" />
  15. <mkdir dir="${build.classes.dir}"/>
  16. </target>
  17. <target name="compile">
  18. <javac srcdir="${src.dir}" destdir="${build.classes.dir}" classpathref="compile.path" includeantruntime="true">
  19. </javac>
  20. </target>
  21. <!-- auto run after a compilation -->
  22. <target name="run" depends="clean, compile">
  23. <java fork="true" classname="HelloWorld">
  24. <classpath path="${build.classes.dir}" />
  25. </java>
  26. </target>
  27. <!-- tests the methods in HelloWorld.java -->
  28. <target name="junit" depends="compile">
  29. <junit printsummary="true">
  30. <classpath path="${build.classes.dir}">
  31. <path refid="compile.path" />
  32. </classpath>
  33. <test name="HelloWorldTest" />
  34. </junit>
  35. </target>
  36. </project>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注