ant构建java项目

Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。

1. 用java命令编译,打包java文件

  • 无包结构的java源代码
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World, this is a class without package");
    }
}

javac编译

E:\ant\SpaceMgt\src>javac Hello.java

E:\ant\SpaceMgt\src>java Hello
Hello World, this is a class without package

这时会发现在当前目录下会出现 Hello.class文件,说明java代码已经编译成字节码class

  • 有包结构的java源代码
package com.rick;

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World, this is a class with package");
    }
}

javac编译

E:\ant\SpaceMgt\src>javac -d . Hello.java

E:\ant\SpaceMgt\src>java com.rick.Hello
Hello World, this is a class with package

这时会发现在当前目录下新建目录com/rick/Hello.class文件,说明java代码已经编译成字节码class,同时在包中

jar打包

E:\ant\SpaceMgt\src>jar -cvf hello.jar com
已添加清单
正在添加: com/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: com/rick/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: com/rick/Hello.class(输入 = 454) (输出 = 317)(压缩了 30%)

运行jar文件
如果这个是个可执行的jar,可以这么运行

E:\ant\SpaceMgt\src>java -jar hello.jar
hello.jar中没有主清单属性

因为hello.jar不是可执行的jar,所以会抛出错误:hello.jar中没有主清单属性。可以通过以下两种方式执行jar文件中的main方法

E:\ant\SpaceMgt\src>set classpath=hello.jar

E:\ant\SpaceMgt\src>java com.rick.Hello
Hello World, this is a class with package

E:\ant\SpaceMgt\src>java -cp hello.jar com.rick.Hello
Hello World, this is a class with package

如何让jar成为可执行的jar呢?编辑jar中META-INF/MANIFEST.MF,添加一行

Main-Class: com.rick.Hello

2. 用ant编译,打包jar文件

检查ant环境

E:\ant\SpaceMgt\src>ant -version
Apache Ant(TM) version 1.9.6 compiled on June 29 2015

项目的目录结构:

    SpaceMgt
        build
        src
            |com
            |rick
                |Hello.java
        build.xml        

ant需要配置文件build.xml

<project basedir="." default="publish" name="SpaceMgt">
    <target name="publish">
         <javac srcdir="src" destdir="build">

         </javac>
         <jar basedir="build" destfile="build/jar/hello.jar"/>

    </target>
</project>

执行ant命令

E:\ant\SpaceMgt>ant
Buildfile: E:\ant\SpaceMgt\build.xml

publish:
    [javac] E:\ant\SpaceMgt\build.xml:3: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
      [jar] Building jar: E:\ant\SpaceMgt\build\jar\hello.jar

BUILD SUCCESSFUL
Total time: 0 seconds

完成之后,你会看见build/jar/hello.jar

3. 用ant编译,打包war文件

项目的目录结构:

    SpaceMgt
        build
        src
            |com
            |rick
                |Hello.java
        WebRoot
            |WEB-INF
                lib
                web.xml
            |index.jsp
        build.xml        

build.xml

<project basedir="." default="publish" name="SpaceMgt">
    <target name="publish">
        <property name="build.dest" value="build/war/SpaceMgt"/>    

         <mkdir dir="${build.dest}/WEB-INF/classes"/>

         <copy todir="${build.dest}">  
            <fileset dir="WebRoot"/>  
         </copy>  

         <javac srcdir="src" destdir="${build.dest}/WEB-INF/classes">
         </javac>

         <war warfile="build/war/SpaceMgt.war" basedir="${build.dest}" webxml="${build.dest}/WEB-INF/web.xml"/>  

    </target>
</project>

执行ant

E:\ant\SpaceMgt>ant
Buildfile: E:\ant\SpaceMgt\build.xml

publish:
    [javac] E:\ant\SpaceMgt\build.xml:11: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
      [war] Building war: E:\ant\SpaceMgt\build\war\SpaceMgt.war

BUILD SUCCESSFUL
Total time: 0 seconds

将SpaceMgt.war放入tomcat webapp下,启动tomcat访问url:http://localhost:8080/SpaceMgt/index.jsp

3. ant其他功能

通过ant不仅可以编译打包,还能上传文件到ftp/scp

example:

 <ftp server="ftp.apache.org"
       userid="anonymous"
       password="me@myorg.com">
    <fileset dir="htdocs/manual"/>
  </ftp>

  <scp file="myfile.txt" todir="user:password@somehost:/home/chuck"/>

  ....

具体可参照:

  1. http://ant.apache.org/manual/Tasks/scp.html
  2. http://ant.apache.org/manual/Tasks/ftp.html

注意这里需要一些jar的支持,ftp需要common-net.jar,scp需要jsch-0.1.40.jar
下载jar到ANT_HOME/lib目录下,并在build.xml指定classpath

<property name="ANT_HOME" value="D:\develop\apache-ant-1.9.6"/>

<path id="classpath">
    <fileset dir="${ANT_HOME}">
        <include name="**/*.jar"/>
    </fileset>
</path>

ant常见命令可参考:http://www.cnblogs.com/xionghui/archive/2012/03/13/2393679.html