@DingCao-HJJ
2015-09-01T01:53:30.000000Z
字数 3365
阅读 1897
编程工具/环境 Java ant
配置Java环境请参考这里
Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。
与基于shell命令的扩展模式不同(如makefile),Ant用Java的类来扩展。(用户)不必编写shell命令,配置文件是基于XML的,通过调用target树,就可执行各种task。每个task由实现了一个特定Task接口的对象来运行。
必须承认,这样做,在构造shell命令时会失去一些特有的表达能力。但却给了你跨平台的能力-你可以在任何地方工作。
解压到你想要安装的目录下,我们得到ant的根目录文件夹(如楼主得到的是apache-ant-1.9.6)
配置环境变量:
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/profileANT_HOME=/usr/apache-ant-1.9.6
PATH = %ANT_HOME%\bin; %ANT_HOME%\lib
source /etc/profile令文件生效验证是否成功安装:
打开命令行/终端,敲击ant命令,如果出现以下内容,则安装成功(因为还没有新建buildfile)。
Buildfile: build.xml does not exist!
Build failed
一个好的文件目录架构能帮助我们理解项目的架构。
构建文件可以放在任何的位置。一般做法是放在项目顶层目录中,这样可以保持项目的简洁和清晰。下面是一个典型的项目层次结构。
(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
|-- build.xml
|-- src
|-- HelloWorld.java
|-- HelloWorldTest.java
|-- lib
|-- junit-4.9.jar
|-- build
|-- classes
|-- HelloWorld.class
|-- HelloWorldTest.class
// HelloWorld.javaimport java.util.*;public final class HelloWorld {private String str;public static void main(String[] args) {HelloWorld hw = new HelloWorld();hw.hello();System.out.println(hw.str);}public void hello() {str = "Hello World!";}public String getStr() {return str;}}
// HelloWorldTest.javaimport static org.junit.Assert.*;import org.junit.Test;public class HelloWorldTest {public HelloWorld helloworld = new HelloWorld();@Testpublic void testHello() {helloworld.hello();assertEquals("Hello World!", helloworld.getStr());}}
<?xml version="1.0" encoding="UTF-8"?><!-- the only mark of project --><project name="HelloWorld" default="run"><!-- essential properties to refer to --><property name="build.classes.dir" location="build/classes"/><property name="src.dir" location="src" /><property name="lib.dir" location="lib" /><path id="compile.path"><pathelement location="${lib.dir}/junit-4.9.jar" /></path><!-- target is a task, can build, change directory, Junit and so on --><!-- clean up the class files that compiled last time --><target name="clean"><delete dir="${build.classes.dir}" /><mkdir dir="${build.classes.dir}"/></target><target name="compile"><javac srcdir="${src.dir}" destdir="${build.classes.dir}" classpathref="compile.path" includeantruntime="true"></javac></target><!-- auto run after a compilation --><target name="run" depends="clean, compile"><java fork="true" classname="HelloWorld"><classpath path="${build.classes.dir}" /></java></target><!-- tests the methods in HelloWorld.java --><target name="junit" depends="compile"><junit printsummary="true"><classpath path="${build.classes.dir}"><path refid="compile.path" /></classpath><test name="HelloWorldTest" /></junit></target></project>