使用Ant将项目打成war包
现在很多项目Java基本都是基于maven管理的,maven对于jar包管理和打包的方便这里就不再赘述,但是如果没有使用maven管理如何将一个Java Web项目打成war包呢,这里推荐使用Ant。
Ant简介
摘录一段百度百科:
Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。
把他理解一个类似于maven的构建工具即可,当然maven更好用,但是对于一些不使用maven管理的项目推荐使用Ant。
Ant下载
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包的更多相关文章
- idea将项目打成war包
idea将项目打成war包(转载) 2018年02月28日 20:08:03 沈行的专栏 阅读数:13773更多 个人分类: Java 首先点击这里进入项目的配置页面 在Artifacts栏里点击 ...
- 【Maven】项目打包-war包-Jar包[IDEA将项目打成war包]
[Maven]项目打包-war包-Jar包[IDEA将项目打成war包] 2017年01月31日 00:21:06 阅读数:22912 标签: ideamaven发布博客插件 更多 个人分类: ❷ J ...
- 关于传统项目打成war包的的分析
技术在不断的革新,以前的项目没有jar管理工具时,都是手动将依赖的jar拷贝到项目之下,然后Build Path,之后Maven出现了,出现了jar包中央仓库,所有的jar包资源集中在这里,免去频繁去 ...
- 如何将一个项目打成war包?
如何将一个项目打成war包?进入该项目所在目录jar -cvf myProjec.war myProject
- 将web项目打成war包部署在tomcat步骤
将web项目打成war包部署在tomcat步骤 1.将自己的项目打成war包. 2.将打包好的war复制到${tomcat.home}/webapps项目下. 3.在${tomcat.hom}/con ...
- Web项目打成war包部署Tomcat时运行startup.bat直接闪退部署失败解决方案
即上篇通过将web项目打成war包部署到Tomcat服务器,解决mysql问题后,又出现了新问题,真是一波三折,所以将解决过程分享给大家,希望能帮助到小伙伴们~ 将打好的war包拷贝到Tomcat的w ...
- springboot项目打成war包
在某种情况下,比如..........之下,我们不得不,将springboot打成war包 1.在pom.xml文件中修改 <packaging>war</packaging> ...
- IDEA将web项目打成war包
非Maven项目打包方式 按ctrl+滚动鼠标滚轮就能放大浏览器看图片了.或者将图片拖到新窗口打开. 然后点击OK,然后build一下.然后去classes文件夹下面找就能找到打成war包的项目 ...
- springboot将项目打成war包
1. 将项目的打包方式改为war包 <groupId>com.cc</groupId> <artifactId>aaaaaa</artifactId> ...
随机推荐
- 视频和音频的 DOM
视频和音频的 DOM HTML5 DOM 为 <audio> 和 <video> 元素提供了方法.属性和事件. HTML5 Audio/Video 方法 方法 描述 addTe ...
- pxe装机部署
批量全自动安装操作系统 dhcp:自动分配IP tftp:微系统安装系统 httpd:网络源 检查环境(永久性关闭selinux) setenforce 0 sed -i s/=enforcing/= ...
- 在国内使用Google验证码reCaptcha
如今各大网站都不可缺少的一部分就是验证码,验证码具有防止恶意批量操作,保护账户安全等作用.但是现在各种暴力破解验证码的手段层出不穷,验证码的保护也就失去了意义.所以各大平台为了应对这种情况也是使用类似 ...
- 这么设置Intellij IDEA,据说效率还不错~
显示工具条 (1)效果图 (2)设置方法 标注1:View–>Toolbar 标注2:View–>Tool Buttons 设置鼠标悬浮提示 (1)效果图 (2)设置方法File–> ...
- 浅谈 Johnson 算法
目录 前言 引入 算法概述 算法流程 正确性证明 代码实现 结语 前言 Johnson 和 Floyd 一样是用来解决无负环图上的全源最短路. 在稀疏图上的表现远远超过 Floyd,时间复杂度 \(O ...
- CentOS下MYSQL数据库的主从备份配置
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/limingzhong198/articl ...
- Ubuntu 16.04升级18.04
原文:https://blog.csdn.net/sean_8180/article/details/81075659 1.更新资源$ sudo apt-get update$ sudo apt-ge ...
- C# 时间格式处理
C#的常用时间格式意义: 1字符"y"---year,年,yy显示13,yyyy显示2013 2字符"M"---Month,月份,M显示5,MM显示05 3字符 ...
- HTML+JavaScript实现一个简单抽奖功能
为什么会做这个东西呢,纯属好玩,闲的其实是在上次班会的时候想到的,班会的时候叫人回答问题,没人回答当时就想,我如果抽签抽到你了,你还是不回答吗??好吧,一切都是扯淡先来看看页面效果吧:点击抽取就可以抽 ...
- Manacher (马拉车) 算法:解决最长回文子串的利器
最长回文子串 回文串就是原串和反转字符串相同的字符串.比如 aba,acca.前一个是奇数长度的回文串,后一个是偶数长度的回文串. 最长回文子串就是一个字符串的所有子串中,是回文串且长度最长的子串. ...