使用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> ...
随机推荐
- css和xpath定位补充
定位的网页的地址:https://item.jd.com/100000323510.htmlxpath绝对定位: 1 以"/"开头的是绝对定位 2 /html/body/div[1 ...
- html的keywords标签
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /& ...
- DateDiff() 方法语法 T-SQL语法
表达式DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear]]) 允许数据类型: timeinterval 表示 ...
- 【Flutter 混合开发】与原生通信-MethodChannel
Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...
- C# 将dataset数据导出到excel中
//添加引用 NPOI.dll //添加 using NPOI.HSSF.UserModel; /// <summary> /// 导出数据到Excel /// </summary& ...
- 智能DNS的实现
网络路径远,导致用户访问延迟 各个运营商之间的带宽有阀口. GSLB 就近的返回服务器的地址 CDN网络 内容分发网络 Content Delivery Network CND服务商 阿里 腾讯 蓝汛 ...
- 市场清仓价格算法 python求矩阵不同行不同列元素和的最大值
问题描述 求矩阵不同行不同列元素和的最大值(最小值) 问题求解 1.通过scipy库求解 scipy.optimize库中的linear_sum_assignment方法可以求解 输入一个矩阵,参数m ...
- 并发编程——多线程计数的更优解:LongAdder原理分析
前言 最近在学习ConcurrentHashMap的源码,发现它采用了一种比较独特的方式对map中的元素数量进行统计,自然是要好好研究一下其原理思想,同时也能更好地理解ConcurrentHashMa ...
- 关于HDFS应知应会的N个问题 | 技术点
1. Namenode的安全模式 ? 安全模式是Namenode的一种状态(Namenode主要有active/standby/safemode三种模式). 2. 哪些情况下,Namenode会进入安 ...
- LoRa技术的发展应用和LoRa应用设备
LoRa技术的发展应用 LORA技术大约在十年前由法国和瑞士开发,到现今LORA技术已经是物联网发展应用中不可缺少的一部分,根据中国物联网研究与发展中心的数据,2025年我国物联网产业规模将达到2万亿 ...