@DingCao-HJJ
2015-09-01T01:53:30.000000Z
字数 3365
阅读 1786
编程工具/环境
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/profile
ANT_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.java
import 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.java
import static org.junit.Assert.*;
import org.junit.Test;
public class HelloWorldTest {
public HelloWorld helloworld = new HelloWorld();
@Test
public 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>