现在很多项目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. 在windows2003上安装itunes

    本人使用windows server 2003系统 安装itunes时提示 AppleMobileDeviceSupport 只能按照在xp系统上或以上版本,你可以忽略这个错误.继续安装吧. 这样除了 ...

  2. postgresql 导出数据库与数据表

    单表导出 pg_dump --host 127.0.0.1 --port 5432 --username "postgres" --role "postgres" ...

  3. GDB常用调试命令(二)

    GDB信号处理 在GDB中使用handle命令定义一个信号处理.信号可以以SIG开头或不以 SIG开头,可以用定义一个要处理信号的范围(如:SIGIO-SIGKILL,表示处理从SIGIO信号到SIG ...

  4. java刷题时常用容器详解

    当初学java时,只是简单的把java基础知识过了一遍就跑去刷题了,很多知识都是在刷题的过程中慢慢加深理解的. 由于每次刷题时,刷到与容器有关的我基本上都跑去百度了,例如百度一下:java中List的 ...

  5. dbvis 导出表结构 xls

    1.dbvis 可以导出多种格式的文件,如SQL.XLS.TXT.HTML.JSON.CSV及XML. 需求场景(本场景是实际场景引申的场景,此处导出xls): 最近,遇到一个需求需要将表的结构数据导 ...

  6. Scala 特殊符号含义

    date: 2019-08-01 11:15:27 updated: 2019-08-22 15:22:32 Scala 特殊符号含义 参考地址 1. ::: :::(三个冒号)只用于连接两个 Lis ...

  7. web应用部署(Tomcat,springboot部署方式)

    转载自:https://www.cnblogs.com/haimishasha/p/10791454.html 核心内容 1.在Tomcat中有四种部署Web应用的方式,分别是: (1)利用Tomca ...

  8. 单片机串口通信电平不匹配的解决电路,5V 3.3V串口通讯

    很早的时候调试串口通讯遇到单片机和模块电压不匹配,信号无法传输,所以整理后来遇到的转换电路.1.最简单的用转换电平IC,可以去淘宝上搜索,有四路的有两路的,比如这个双向电平转换模块 2.根据接触的开发 ...

  9. 专攻知识小点——回顾JavaWeb中的servlet(二)

    续前篇... ServletConfig对象 Servlet的配置对象,ServletConfig对象作用域只能在一个Servlet类中使用.每个Servlet类都维护一个ServletConfig对 ...

  10. webpack 单独打包指定JS文件

    背景 最近接到一个需求,因为不确定打出的前端包所访问的后端IP,需要对项目中IP配置文件单独拿出来,方便运维部署的时候对IP做修改.因此,需要用webpack单独打包指定文件. CommonsChun ...