概述

本文通过一个简单的Java Application例子描述如何用ANT完成基本的程序打包工作。包含文件拷贝、编译、打包三部分;完成这三部就可以得到一个可运行的程序包了。

ANT的安装,环境变量的设置等省略。网上有很多文章。

准备工作

先创建一个简单的Java程序,这个程序输出简单的”Hello ANT!!!”。程序依赖于第三方Jar包GSON。基本的程序结构是这样的:







在build下编译好启动脚本startup.bat。

java -jar AntJavaTest.jar

ant脚本build.xml放到tools/build目录下,打包编译生成的软件包都放runtime下面。正式项目可以再加一个压缩处理,这里省略。

编写build.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<project name="AntTest" default="copy_startup_bat" basedir="../../">

    <!--定义当前时间-->
    <tstamp>
        <format property="current_date" pattern="yyyy_MM_dd_HH_mm_ss" locale="en"></format>
    </tstamp>

    <!--打包存放路径-->
    <property name="package_dest_path" value="runtime/JavaAntTest_${current_date}"></property>

    <!--定义依赖jar包的路径-->
    <path id="depend_lib_path">
        <fileset dir="lib">
            <include name="*.jar"></include>
        </fileset>
    </path>

    <!--- 组装依赖jar包的路径,用于mainifest文件的Class-Path -->
    <pathconvert property="class_path" pathsep=" ">
        <mapper>
            <chainedmapper>
                <flattenmapper></flattenmapper>
                <globmapper from="*" to="lib/*"></globmapper>
            </chainedmapper>
        </mapper>
        <fileset dir="lib">
            <include name="*jar"></include>
        </fileset>
    </pathconvert>

    <!--创建打包目录-->
    <target name="make_package_dir">
        <mkdir dir="${package_dest_path}"></mkdir>
    </target>
    <target name="make_bin_dir" depends="make_package_dir">
        <mkdir dir="${package_dest_path}/bin"></mkdir>
    </target>
    <target name="make_bin_lib" depends="make_bin_dir">
        <mkdir dir="${package_dest_path}/lib"></mkdir>
    </target>

    <!-- 拷贝依赖的Jar包 -->
    <target name="copy_lib" depends="make_bin_lib">
        <copydir src="lib" dest="${package_dest_path}/lib"></copydir>
    </target>

    <!--编译生成class文件-->
    <target name="compile" depends="copy_lib">
        <javac srcdir="src" destdir="${package_dest_path}/bin" includeantruntime="on">
            <classpath refid="depend_lib_path"></classpath>
        </javac>
    </target>

    <!-- 打jar包 -->
    <target name="create_jar" depends="compile">
        <jar jarfile="${package_dest_path}/AntJavaTest.jar" basedir="${package_dest_path}/bin">
            <manifest>
                <attribute name="Main-Class" value="com.elon.StartService"></attribute>
                <attribute name="Class-Path" value="${class_path}"></attribute>
            </manifest>
        </jar>
    </target>

    <!--拷贝启动bat文件-->
    <target name="copy_startup_bat" depends="create_jar">
        <copy file="tools/build/startup.bat" tofile="${package_dest_path}/startup.bat"></copy>
    </target>

</project>

测试运行

将当前路径切换到tools/build目录下,执行ant命令完成打包操作。运行startup.bat, 显示”Hello ANT!!!”。一个最简单的ant脚本开发完成。

为了将打包做成定时任务,还可以加一个批处理build.bat:

::启动打包程序
cd /d %cd%
start "开始打包程序..." ant

使用Ant打包Java后台程序的更多相关文章

  1. 使用Ant打包Web前台程序

    概述 本文通过一个简单的Web项目作为例子描述如何用ANT完成Web前台程序的打包工作.包含文件拷贝.编译.打包三部分:完成这三部就可以得到一个War了,放到Tomcat下就可以运行了. ANT的安装 ...

  2. 图解教你如何使用ANT打包java程序

    1:在eclipse中建立如下的工程 值得注意的就是build.xml文件(这个是重点后面会提到) ,其他HelloWorld中的就是一句简单的输出语句 2: 使用build打包(右键然后选择运行), ...

  3. exe4j打包java应用程序

    转载地址:http://blog.csdn.net/fog911811/article/details/6151700 第一.将应用程序导出成一个JAR文件. 1.先打包程序成一个jar.在eclip ...

  4. docker容器运行java后台程序,存到数据库的时间差一天的问题

    主要原因是docker容器中的时间用的是标准时间,不是用的宿主机的时间. 修改方法: docker run -e TZ="Asia/Shanghai" -d -p 80:80 -- ...

  5. 不会用ant打包、部署项目的工程师,不是一个好程序员(测试)

    副标题:利用ant脚本 自动构建svn增量/全量 系统程序升级包 首先请允许我这样说,作为开发或测试,你一定要具备这种本领.你可以手动打包.部署你的工程,但这不是最好的方法.最好的方式就是全自动化的方 ...

  6. Java应用程序的打包和发布

    Java应用程序的打包和发布 简化Java应用程序的打包和发布 发布Java应用程序时Java提供了一系列打包和发布工具,可以显著的简化发布过程 该文章提供了打包Java code的几种方法,探讨Ja ...

  7. 使用IzPack打包JAVA Web应用程序

    使用IzPack打包JAVA Web应用程序步骤如下: 这里使用IzPack-4.3.5 + launch4j-3.1.0-beta1-win32.zip(绿色版)对Web应用程序打包,打包后即可对我 ...

  8. java应用程序利用Exe4j打包exe文件

    1.      使用简介: 把java应用程序打成exe文件我们可以借助第三方软件exe4j来完成.Exe4j大家可以在网上下载,下载地址是: http://www.ej-technologies.c ...

  9. 微信小程序与Java后台通信

    一.写在前面 最近接触了小程序的开发,后端选择Java,因为小程序的代码运行在腾讯的服务器上,而我们自己编写的Java代码运行在我们自己部署的服务器上,所以一开始不是很明白小程序如何与后台进行通信的, ...

随机推荐

  1. Scoping the Project for iOS 7

    Scoping the Project On This Page Things Every App Must Do Things Every App Should Do If You Must Con ...

  2. Android查缺补漏(IPC篇)-- Bundle、文件共享、ContentProvider、Messenger四种进程间通讯介绍

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8387752.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  3. 微信开发系列——微信订阅号前端开发利器:WeUI

    前言:年前的两个星期,学习了下微信公众号的开发.后端基本能够基于盛派的第三方sdk能搞定大部分事宜.剩下的就是前端了,关于手机端的浏览器的兼容性,一直是博主的一块心病,因为博主一直专注于bootstr ...

  4. static关键字的使用总结

    1.对于static关键字的使用的时候对于修饰变量的时候,它相当于一个全局变量: 2.对于static修饰一个函数的时候他是在类被加载的时候首先会被类加载,并且只能加载一次,并且这个方法可以不需要通过 ...

  5. 在Centos环境下安装兼容Apache2.4高版本SVN服务

    在阿里云Centos环境下,搭建PHP运行环境,PHP选择了php7版本,Mysql选择了5.7版本,Apache选择了2.4版本,在搭建SVN版本控制服务过程中出现了不兼容问题,当前环境下Apach ...

  6. 老男孩Python全栈开发(92天全)视频教程 自学笔记08

    day8课程内容: 文件操作 f=open('小重山','r',encoding='utf8')   #以读的方式打开文件 data=f.read() print(data) f.close()  # ...

  7. 五子棋的判断输赢规则 -- java编程(简单优化完整版)

    五子棋的判断输赢规则代码 -- 完整优化版 一.前言 之前浏览过很多网上的方法,但总找不到比较完整,也get不到其他大神的思路,就直接画图分析,分析了之后就有了如下的代码,当然还想到更加优化的一种,只 ...

  8. hihoCoder 1493 : 歌德巴赫猜想 素数筛法

    题意:哥德巴赫猜想认为"每一个大于2的偶数,都能表示成两个质数之和".给定一个大于2的偶数N,你能找到两个质数P和Q满足P<=Q并且P+Q=N吗?如果有多组解,输出P最小的一 ...

  9. hdu1394 分治 or 线段树

    利用分治求一次逆序数,然后每次把第一个元素放到末尾,设该交换元素的值为x,设上一次求得的逆序数为y,那么此时的逆序数等于y - x + (n - x - 1),减去x是因为x作为第一个元素,其后共有x ...

  10. openresty 中mime.types 文件缺失问题,无法展示图片

    看技术群有人问这个:"图片不展示了,直接下载了,怎么设置nginx",之前刚开始学习nginx时遇到过,然后 使用 openresty+lua在做网关时遇到过,这里还是记录下吧. ...