现在很多项目Java基本都是基于maven管理的,maven对于jar包管理和打包的方便这里就不再赘述,但是如果没有使用maven管理如何将一个Java Web项目打成war包呢,这里推荐使用Ant。

Ant简介

摘录一段百度百科:

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

把他理解一个类似于maven的构建工具即可,当然maven更好用,但是对于一些不使用maven管理的项目推荐使用Ant。

Ant下载

官方地址:http://ant.apache.org/

Ant安装

下载后解压,配置ANT_HOME,并将ANT_HOME添加到环境变量

ANT_HOME
D:\develop\ant\apache-ant-1.9.4
%ANT_HOME%/bin

Ant的使用需要依赖JDK,配置JAVA_HOME即可,配置完成,执行ant -version,可以正确输出版本号表示安装成功。

C:\Users\Vincent>ant -version
Apache Ant(TM) version 1.9.4 compiled on April 29 2014

基本命令

输入ant -h即可查看,摘录部分:

C:\Users\Vincent>ant -h
ant [options] [target [target2 [target3] ...]]
Options:
-help, -h print this message
-projecthelp, -p print project help information
-version print the version information and exit

使用样例

使用Ant打包,现在项目根目录创建一个build.xml文件,Ant会根据这个文件的内容执行编译打包。

<?xml version="1.0" encoding="UTF-8"?>
<project name="my-study-platform" basedir="." default="build">
<!--输出目录-->
<property name="outDir" value="D:\tmp\ant"/>
<!--依赖第三方jar目录-->
<property name="jdbc" value="database/jdbc"/>
<property name="lib" value="build/axis_server/lib"/>
<property name="lib2" value="build/patching/tools/apache-ant/lib"/>
<property name="lib3" value="batch/encryptutil/lib"/>
<property name="build" value="www/WEB-INF/lib"/>
<property name="lib_compiler" value="build/lib_compile"/> <path id="my-study-platform.classpath">
<fileset dir="${jdbc}">
<include name="*.jar"></include>
</fileset>
<fileset dir="${lib}">
<include name="*.jar"></include>
</fileset>
<fileset dir="${lib2}">
<include name="*.jar"></include>
</fileset>
<fileset dir="${lib3}">
<include name="*.jar"></include>
</fileset>
<fileset dir="${build}">
<include name="*.jar"></include>
</fileset>
<fileset dir="${lib_compiler}">
<include name="*.jar"></include>
</fileset>
</path> <!--创建临时目录拷贝静态资源-->
<target name="init">
<mkdir dir="${outDir}/WEB-INF/classes"/>
<!--拷贝WEB-INF下文件到classes目录-->
<copy includeemptydirs="false" todir="${outDir}/WEB-INF/classes">
<fileset dir="www/WEB-INF/">
<exclude name="${outDir}/WEB-INF/classes/*"/>
</fileset>
</copy>
<copy includeemptydirs="false" todir="${outDir}/WEB-INF/classes">
<fileset dir="src">
<exclude name="src/**/*.java"/>
</fileset>
</copy>
</target> <!--编译Java源码-->
<target name="compile" depends="init">
<echo message="${ant.project.name}: ${ant.file}" file="${outDir}/war/build.txt"/>
<javac executable="C:\Program Files\Java\jdk1.7.0\bin\javac.exe"
encoding="utf-8"
debug="true"
includeantruntime="false"
destdir="${outDir}/WEB-INF/classes">
<!-- 源码路径 -->
<src path="src/"/>
<!-- 依赖库路径 -->
<classpath refid="my-study-platform.classpath"/>
</javac>
</target> <!--打war包-->
<target name="build" depends="compile">
<war warfile="${outDir}/war/ROOT.war" webxml="www/WEB-INF/web.xml">
<classes dir="${outDir}/WEB-INF/classes"/>
<fileset dir="www"/>
</war>
<!--删除临时目录-->
<delete dir="${outDir}/WEB-INF"></delete>
</target> <target name="clean">
<delete dir="${outDir}"/>
<delete file="${outDir}/*"/>
</target>
</project>

每一个target都是一个ant命令,以上面文件为例:

ant init 初始化构建前的工作比如创建打包输出目录拷贝静态资源等
ant compile 编译Java源文件,依赖库
ant build 拷贝字节码或者拷贝静态资源等
ant clean 删除临时目录

每个命令的执行可以通过depends来指定上一步的过程,来控制整个打包流程。

正常的Java Web项目打包也没这么复杂,我接触的项目是一个由eclipse整改目录结构到idea中的,项目中的依赖,路径可以说是面目全非,打包过程中整合路径是真的痛苦,但是只要可以正确配置路径,还是能跑起来的!

下面对build.xml中的节点具体解释:

  • project 根节点,代表一个工程

    name 表示工程名称
    basedir 表示基准目录(.代表当前目录,即build.xml所在目录,也可采用绝对路径)
    default 表示默认运行的target(当ant命令没有指定target时,会运行default属性中的target)
  • target 目标节点,代表着一个构建目标

    name 表示目标名称
    depends 表示依赖的target,上一步执行的target
  • property 设置一个或多个属性(可以在其它地方通过${属性名}进行引用)

    name 表示属性名(区分大小写)
    value 表示属性值
    file 表示要加载的属性文件路径(该文件可包含多个属性,类似jdbc.properties的内容)
  • mkdir 创建目录

    dir 创建目录的名称
  • delete 删除目录或文件

    dir 表示要删除的目录,该目录下的文件和子目录都会被删除
    file 表示要删除的文件
  • echo 向屏幕或文件输出信息

    message 表示要输出的信息
    file 表示信息输出到该文件中(如果指定了该属性,信息将不会在屏幕上显示)
    level 表示信息级别(未指定该属性时的默认级别为"warning")
  • copy 拷贝文件或目录

    todir 表示拷贝到哪个目录下
    includeemptydirs 是否拷贝空目录
    file 要拷贝的单个文件,也可以通过内嵌<fileset>来指定多个文件)
  • javac 编译源文件

    srcdir 源文件路径(多个源之间用:分隔,可通过内嵌<src>元素进行设定,如上例)
    destdir 存放编译后的class文件路径
    includes 包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)该属性省略时,所有的.java文件被包含进去
    excludes 排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)
    debug 编译时是否显示调试信息
    includeantruntime 是否包含ant库路径
    classpath 依赖库路径(上例中通过内嵌<classpath>元素进行了设定)
    encoding 指定编码
  • jar 将class文件打成jar包

    destfile 将创建的jar包位置
    basedir 将被打成jar包的目录(或通过内嵌的<fileset>元素进行设定)
    includes 包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)省略时,所有的文件被包含进去
    excludes 排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)
    可内嵌<manifest>元素,通过设定Main-Class属性来设定jar包的入口类(如上例)
  • war 将class文件打为war包

    warfile 将创建的war包位置名称
    webxml web项目web.xml的路径
    classes 需要打进war包的字节码路径
    fileset 需要拷贝的其他资源路径,如静态资源
  • Resource Collections Ant中经常需要指定资源集合,主要通过下面元素指定fileset

    dir 文件集合的根目录(该目录下的文件都会被包含)
    file 快捷指定单个文件
    includes 包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定),该属性省略时,所有的文件被包含进去。
    excludes 排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。
    casesensitive 指定包含或排除模式匹配时是否区分大小写,默认区分,可内嵌<include>、<exclude>、<patternset>、<filename>等元素。
  • patternset 模式集合

    id 唯一标识(其它<patternset>元素通过refid指向该模式)可内嵌 <include>、<exclude>、<includesfile>、<excludesfile> 等元素
  • include/exclude 指定单个模式(包含或排除)

    name 要包含或排除的模式
  • includesfile/excludesfile 指定模式文件

    name 模式文件名(文件内容为包含或排除模式)
  • Path-like Structures 在通过ant运行java类,或执行编译时,都需要指定classpath,可通过下面三个元素来指定引用的jar包或class文件

    • classpath 类路径,内嵌在javac,java等元素中,表示依赖库路径

      refid 指向该id对应的元素
      location 单个文件或目录(目录可以是相对路径或绝对路径,相对路径是指相对于工程的基准路径)
      path 多个location的集合(各location以冒号或分号进行分隔),一般用来引用预定义的路径,如引用环境变量${classpath},可内嵌<fileset>、<pathelement>等元素来指定jar文件或目录
    • path 类路径集合,被<classpath>或其它<path>引用。

      path用法类似<classpath>元素,但是<path>跟<target>同级,而classpath是内嵌在<java>或<javac>元素中。
    • pathelement 单个类路径,内嵌在classpath或path中

      location 单个文件或目录(目录可以是相对路径或绝对路径,相对路径是指相对于工程的基准路径)
      path 多个location的集合(各location以冒号或分号进行分隔),一般用来引用预定义的路径

idea使用Ant

旧版本的idea可能自带这个功能,我是用idea2020没有这个插件,可以去插件管理下载Ant Build Generation,然后就可以在build菜单看到这个选项。



可以利用这个插件来直接生成构建模板文件,根据具体情况做修改。

初次使用,进一步的使用有待研究。

参考资料:https://blog.csdn.net/tang9140/article/details/45743791

使用Ant将项目打成war包的更多相关文章

  1. idea将项目打成war包

    idea将项目打成war包(转载) 2018年02月28日 20:08:03 沈行的专栏 阅读数:13773更多 个人分类: Java   首先点击这里进入项目的配置页面 在Artifacts栏里点击 ...

  2. 【Maven】项目打包-war包-Jar包[IDEA将项目打成war包]

    [Maven]项目打包-war包-Jar包[IDEA将项目打成war包] 2017年01月31日 00:21:06 阅读数:22912 标签: ideamaven发布博客插件 更多 个人分类: ❷ J ...

  3. 关于传统项目打成war包的的分析

    技术在不断的革新,以前的项目没有jar管理工具时,都是手动将依赖的jar拷贝到项目之下,然后Build Path,之后Maven出现了,出现了jar包中央仓库,所有的jar包资源集中在这里,免去频繁去 ...

  4. 如何将一个项目打成war包?

    如何将一个项目打成war包?进入该项目所在目录jar  -cvf  myProjec.war  myProject

  5. 将web项目打成war包部署在tomcat步骤

    将web项目打成war包部署在tomcat步骤 1.将自己的项目打成war包. 2.将打包好的war复制到${tomcat.home}/webapps项目下. 3.在${tomcat.hom}/con ...

  6. Web项目打成war包部署Tomcat时运行startup.bat直接闪退部署失败解决方案

    即上篇通过将web项目打成war包部署到Tomcat服务器,解决mysql问题后,又出现了新问题,真是一波三折,所以将解决过程分享给大家,希望能帮助到小伙伴们~ 将打好的war包拷贝到Tomcat的w ...

  7. springboot项目打成war包

    在某种情况下,比如..........之下,我们不得不,将springboot打成war包 1.在pom.xml文件中修改 <packaging>war</packaging> ...

  8. IDEA将web项目打成war包

    非Maven项目打包方式    按ctrl+滚动鼠标滚轮就能放大浏览器看图片了.或者将图片拖到新窗口打开. 然后点击OK,然后build一下.然后去classes文件夹下面找就能找到打成war包的项目 ...

  9. springboot将项目打成war包

    1. 将项目的打包方式改为war包 <groupId>com.cc</groupId> <artifactId>aaaaaa</artifactId> ...

随机推荐

  1. 视频和音频的 DOM

    视频和音频的 DOM HTML5 DOM 为 <audio> 和 <video> 元素提供了方法.属性和事件. HTML5 Audio/Video 方法 方法 描述 addTe ...

  2. pxe装机部署

    批量全自动安装操作系统 dhcp:自动分配IP tftp:微系统安装系统 httpd:网络源 检查环境(永久性关闭selinux) setenforce 0 sed -i s/=enforcing/= ...

  3. 在国内使用Google验证码reCaptcha

    如今各大网站都不可缺少的一部分就是验证码,验证码具有防止恶意批量操作,保护账户安全等作用.但是现在各种暴力破解验证码的手段层出不穷,验证码的保护也就失去了意义.所以各大平台为了应对这种情况也是使用类似 ...

  4. 这么设置Intellij IDEA,据说效率还不错~

    显示工具条 (1)效果图 (2)设置方法 标注1:View–>Toolbar 标注2:View–>Tool Buttons 设置鼠标悬浮提示 (1)效果图 (2)设置方法File–> ...

  5. 浅谈 Johnson 算法

    目录 前言 引入 算法概述 算法流程 正确性证明 代码实现 结语 前言 Johnson 和 Floyd 一样是用来解决无负环图上的全源最短路. 在稀疏图上的表现远远超过 Floyd,时间复杂度 \(O ...

  6. CentOS下MYSQL数据库的主从备份配置

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/limingzhong198/articl ...

  7. Ubuntu 16.04升级18.04

    原文:https://blog.csdn.net/sean_8180/article/details/81075659 1.更新资源$ sudo apt-get update$ sudo apt-ge ...

  8. C# 时间格式处理

    C#的常用时间格式意义: 1字符"y"---year,年,yy显示13,yyyy显示2013 2字符"M"---Month,月份,M显示5,MM显示05 3字符 ...

  9. HTML+JavaScript实现一个简单抽奖功能

    为什么会做这个东西呢,纯属好玩,闲的其实是在上次班会的时候想到的,班会的时候叫人回答问题,没人回答当时就想,我如果抽签抽到你了,你还是不回答吗??好吧,一切都是扯淡先来看看页面效果吧:点击抽取就可以抽 ...

  10. Manacher (马拉车) 算法:解决最长回文子串的利器

    最长回文子串 回文串就是原串和反转字符串相同的字符串.比如 aba,acca.前一个是奇数长度的回文串,后一个是偶数长度的回文串. 最长回文子串就是一个字符串的所有子串中,是回文串且长度最长的子串. ...