ANT速写

本文介绍了ANT自动化构建工具的基础知识、使用方法及常见命令,包括如何创建项目、执行目标、复制、删除、创建目录、移动文件等功能。还展示了如何使用ANT进行J2EE项目打包发布、生成Hibernate相关配置文件,提供了详细的XML配置示例和步骤说明。

一、为什么使用ANT

当一个代码项目大了以后,每次重新编译,打包,测试等都会变得非常复杂而且重复,因此c语言中有make脚本来帮助这些工作的批量完成。在Java 中应用是平台无关性的,当然不会用平台相关的make脚本来完成这些批处理任务了,ANT本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。除了基于JAVA是平台无关的外,脚本的格式是基于XML的,比make脚本来说还要好维护一些。

概念到处都是,随处可查。ant就是一个构建工具,又不局限于构建。

 

什么是构建?

形象来说,就是把代码从某个地方拿来,编译,再拷贝到某个地方去运行等等操作。

 

什么叫不局限于构建?

ant主要用来做构建,但它能做的还有很多,可能你用了很久,依然不知道它到底有多少功能。ant插件让ant的功能丰富多彩,例如我们后面演示的“生成hibernate映射文件,配置文件”等

 

准备工作:

1、安装jdk,配置java_home,path,class_path。如果你连这些还不清楚,那就先不要学ant了。

2、下载解压ant,搜ant,官网下载,然后解压即可。我这里用的是1.9.0

3、设置ant_home,path中添加ant_home下的bin

4、开始-运行-cmd-ant-回车

如果看到Buildfile:build.xml does not exist! bulid failed

那么表示ant安装成功!

 

二、ANT测试

1、基本元素

bulid.xml

  1. <?xml version="1.0" encoding="GBK"?>  
  2. <project name="ant测试" default="getBaseDir"  basedir="D:\antTest">  
  3.       
  4.       
  5.     <!--基本元素-->  
  6.     <target name="getBaseDir">  
  7.          <description>    
  8.            the first example!    
  9.         </description>    
  10.         <echo message="hello world!" />  
  11.     </target>  
  12.       
  13.     <target name="targetA" if ="ant.version">    
  14.         <echo message ="Java Version: ${ant.version}"/>    
  15.     </target>    
  16.       
  17.     <target name="targetB" if ="ant.java.version">    
  18.         <echo message ="Java Version: ${ant.java.version}"/>    
  19.         <echo message ="Java Version: ${ant.file}"/>    
  20.         <echo message ="Java Version: ${ant.version}"/>    
  21.     </target>   
  22.       
  23.       
  24.     <target name="targetC"  depends ="targetA" unless ="anotherTarget" >    
  25.         <description>    
  26.             show depends,unless,basedir,if  
  27.         </description>    
  28.         <echo message ="The base dir is: ${basedir}"/>    
  29.     </target>    
  30.       
  31.     <!--property-->  
  32.     <property name="name" value="jim" />  
  33.     <property name="age" value="18" />  
  34.       
  35.       
  36.     <target name="targetD" >  
  37.         <echo message="name:${name},age:${age}" />  
  38.     </target>  
  39.   
  40.     <!--echo-->  
  41.     <target name="targetEcho">  
  42.         <echo message="Hello,ANT" file="herfile/hello.log" append="true" />   
  43.     </target>  
  44.       
  45. </project>  
<?xml version="1.0" encoding="GBK"?>
<project name="ant测试" default="getBaseDir"  basedir="D:\antTest">
	
	
	<!--基本元素-->
	<target name="getBaseDir">
		 <description>  
           the first example!  
        </description>  
		<echo message="hello world!" />
	</target>
	
	<target name="targetA" if ="ant.version">  
        <echo message ="Java Version: ${ant.version}"/>  
    </target>  
	
	<target name="targetB" if ="ant.java.version">  
        <echo message ="Java Version: ${ant.java.version}"/>  
		<echo message ="Java Version: ${ant.file}"/>  
		<echo message ="Java Version: ${ant.version}"/>  
    </target> 
	
	
    <target name="targetC"  depends ="targetA" unless ="anotherTarget" >  
        <description>  
            show depends,unless,basedir,if
        </description>  
        <echo message ="The base dir is: ${basedir}"/>  
    </target>  
    
	<!--property-->
	<property name="name" value="jim" />
	<property name="age" value="18" />
	
	
	<target name="targetD" >
		<echo message="name:${name},age:${age}" />
	</target>

	<!--echo-->
	<target name="targetEcho">
		<echo message="Hello,ANT" file="herfile/hello.log" append="true" /> 
	</target>
	
</project>


 project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。

1) name 属性

    用于指定 project 元素的名称。

2) default 属性

    用于指定 project 默认执行时所执行的 target 的名称。

3) basedir 属性

    用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的附目录作为基准目录。

 

target 元素

   target为Ant的基本执行单元,它可以包含一个或多个具体的任务。多个target 可以存在相互依赖关系。它有如下属性:

1) name 属性

    指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target 。

2) depends 属性

    用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target 。被依赖的 target 会先执行。

3) if 属性

    用于验证指定的属性是否存在,若不存在,所在 target 将不会被执行。

4) unless 属性

    该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。

5) description 属性

    该属性是关于 target 功能的简短描述和说明。

property 元素

property元素可看作参量或者参数的定义,project 的属性可以通过 property 元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以通过如下内容将其引入:

<property file=” build.properties”/>
property 元素可用作 task 的属性值。在 task 中是通过将属性名放在“ ${ ”和“ } ”之间,并放在 task 属性值的位置来实现的。

 

2、常用命令

build.xml

  1. <?xml version="1.0" encoding="GBK"?>  
  2. <project name="ant测试" default="getBaseDir"  basedir="D:\antTest">  
  3.     <!--常用命令-->  
  4.       
  5.     <!--copy-->  
  6.     <target name="targetCopy">  
  7.         <copy file="myfile/hello.txt" tofile="herfile/copied.txt"/>   
  8.         <copy todir="hisfile"> <fileset dir="myfile"/></copy>   
  9.     </target>  
  10.       
  11.     <!--delete-->  
  12.     <target name="targetDelete">  
  13.         <delete file="myfile/hello.txt" />  
  14.         <delete dir="myfile" />  
  15.         <delete includeEmptyDirs="true">  
  16.             <fileset dir="." includes="**/*.bak" />  
  17.         </delete>  
  18.     </target>  
  19.       
  20.     <!--mkdir-->  
  21.     <target name="targetMkdir">  
  22.         <mkdir dir="/myfile/src/build/classes"/>   
  23.     </target>  
  24.       
  25.     <!--move-->  
  26.     <target name="targetMove">  
  27.         <move file="destfile.txt" tofile="hello.txt"/>   
  28.         <move file="hello.txt" todir="myfile"/>   
  29.         <move todir="herfile"> <fileset dir="myfile"/></move>  
  30.     </target>  
  31.       
  32.   
  33. </project>  
<?xml version="1.0" encoding="GBK"?>
<project name="ant测试" default="getBaseDir"  basedir="D:\antTest">
	<!--常用命令-->
	
	<!--copy-->
	<target name="targetCopy">
		<copy file="myfile/hello.txt" tofile="herfile/copied.txt"/> 
        <copy todir="hisfile"> <fileset dir="myfile"/></copy> 
	</target>
	
	<!--delete-->
	<target name="targetDelete">
		<delete file="myfile/hello.txt" />
		<delete dir="myfile" />
		<delete includeEmptyDirs="true">
			<fileset dir="." includes="**/*.bak" />
		</delete>
 	</target>
	
	<!--mkdir-->
	<target name="targetMkdir">
		<mkdir dir="/myfile/src/build/classes"/> 
	</target>
	
	<!--move-->
	<target name="targetMove">
		<move file="destfile.txt" tofile="hello.txt"/> 
		<move file="hello.txt" todir="myfile"/> 
		<move todir="herfile"> <fileset dir="myfile"/></move>
	</target>
	

</project>


copy命令用来对文件和目录的复制功能。

delete 命令对文件或目录进行删除

mkdir 命令创建目录

move 命令移动文件或目录

 

3、常用target

举例:j2ee项目打包发布,hibernate相关文件生成

  1. <?xml version="1.0" encoding="GBK"?>  
  2. <project name="测试ANT"  basedir=".">  
  3.      
  4.       
  5.     <!--资源文件位置-->  
  6.     <property name="src.dir" value="${basedir}/src" />  
  7.     <!--编译的目标位置-->  
  8.     <property name="classes" value="${basedir}/build/classes" />  
  9.     <!--打包的目标位置-->  
  10.     <property name="build" value="${basedir}/build" />  
  11.     <!--Lib的位置-->  
  12.     <property name="lib" value="${basedir}/WebContent/WEB-INF/lib" />  
  13.     <!--tomcat.webapps位置-->  
  14.     <property name="webapps" value="D:/tomcate/apache-tomcat-7.0.39/webapps" />  
  15.     <!--Xdoclet.Home-->  
  16.     <property name="xdoclet.home" value="D:/oa/xdoclet-plugins-1.0.3" />    
  17.           
  18.         <!-- Build classpath 指定定lib所在位置-->  
  19.         <path id="classpath">  
  20.             <fileset dir="${lib}">  
  21.                 <include name="*.jar" />  
  22.             </fileset>  
  23.         </path>  
  24.   
  25.         <!--  删除build 路径-->  
  26.         <target name="删除build 路径">  
  27.             <delete dir="${build}" />  
  28.         </target>  
  29.   
  30.         <!--  建立build/classes 路径,并编译class 文件到build/classes 路径下-->  
  31.         <target name="建立build/classes 路径,并编译class 文件到build/classes 路径下" depends="删除build 路径">  
  32.             <mkdir dir="${classes}" />  
  33.             <javac srcdir="${basedir}/src" destdir="${classes}">  
  34.                 <classpath refid="classpath" />  
  35.             </javac>  
  36.             <copy todir="${classes}">  
  37.                 <fileset dir="${src.dir}">  
  38.                     <include name="**/*.xml" />  
  39.                     <include name="**/*.properties" />  
  40.                 </fileset>  
  41.             </copy>  
  42.   
  43.         </target>  
  44.   
  45.         <!-- 打war 包-->  
  46.         <target name="打war 包" depends="建立build/classes 路径,并编译class 文件到build/classes 路径下">  
  47.             <war destfile="${build}/WebTest1.war" webxml="${basedir}/WebContent/WEB-INF/web.xml">  
  48.   
  49.                 <!--  拷贝WebContent下所有文件-->  
  50.                 <fileset dir="${basedir}/WebContent" />  
  51.   
  52.                 <!--  拷贝lib 目录下的jar 包-->  
  53.                 <lib dir="${lib}" />  
  54.                 <!--  拷贝build/classes 下的class 文件-->  
  55.                 <classes dir="${classes}" />  
  56.   
  57.             </war>  
  58.   
  59.             <delete dir="${classes}" />  
  60.   
  61.         </target>  
  62.   
  63.         <!--发布到本地tomcat-->  
  64.         <target name="发布到本地tomcat" depends="打war 包">  
  65.             <copy file="${build}/WebTest1.war" tofile="${webapps}/WebTest1.war" />  
  66.         </target>  
  67.       
  68.   
  69.         <!-- Build classpath -->  
  70.         <path id="xdoclet.task.classpath">  
  71.             <fileset dir="${xdoclet.home}/lib">  
  72.                 <include name="**/*.jar" />  
  73.             </fileset>  
  74.             <fileset dir="${xdoclet.home}/plugins">  
  75.                 <include name="**/*.jar" />  
  76.             </fileset>  
  77.         </path>  
  78.   
  79.         <taskdef name="xdoclet" classname="org.xdoclet.ant.XDocletTask" classpathref="xdoclet.task.classpath" />  
  80.            
  81.         <!--生成Hibernate配置文件-->  
  82.         <target name="生成Hibernate配置文件" depends="生成hibernate映射文件">  
  83.             <xdoclet>  
  84.                 <fileset dir="${src.dir}/com/jialin/model">  
  85.                     <include name="**/*.java" />  
  86.                 </fileset>  
  87.                 <component classname="org.xdoclet.plugin.hibernate.HibernateConfigPlugin" destdir="${src.dir}" version="3.0" hbm2ddlauto="update" jdbcurl="jdbc:mysql://127.0.0.1/oa" jdbcdriver="com.mysql.jdbc.Driver" jdbcusername="root" jdbcpassword="123456" dialect="org.hibernate.dialect.MySQLDialect" showsql="true" />  
  88.             </xdoclet>  
  89.         </target>  
  90.           
  91.         <!--生成hibernate映射文件-->  
  92.         <target name="生成hibernate映射文件">  
  93.             <xdoclet>  
  94.                 <fileset dir="${src.dir}/com/jialin/model">  
  95.                     <include name="**/*.java" />  
  96.                 </fileset>  
  97.                 <component classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin" version="3.0" destdir="${src.dir}" />  
  98.             </xdoclet>  
  99.         </target>  
  100.     </project>  
<?xml version="1.0" encoding="GBK"?>
<project name="测试ANT"  basedir=".">
   
	
    <!--资源文件位置-->
	<property name="src.dir" value="${basedir}/src" />
    <!--编译的目标位置-->
	<property name="classes" value="${basedir}/build/classes" />
	<!--打包的目标位置-->
	<property name="build" value="${basedir}/build" />
	<!--Lib的位置-->
	<property name="lib" value="${basedir}/WebContent/WEB-INF/lib" />
    <!--tomcat.webapps位置-->
	<property name="webapps" value="D:/tomcate/apache-tomcat-7.0.39/webapps" />
	<!--Xdoclet.Home-->
	<property name="xdoclet.home" value="D:/oa/xdoclet-plugins-1.0.3" />	
		
		<!-- Build classpath 指定定lib所在位置-->
		<path id="classpath">
			<fileset dir="${lib}">
				<include name="*.jar" />
			</fileset>
		</path>

		<!--  删除build 路径-->
		<target name="删除build 路径">
			<delete dir="${build}" />
		</target>

		<!--  建立build/classes 路径,并编译class 文件到build/classes 路径下-->
		<target name="建立build/classes 路径,并编译class 文件到build/classes 路径下" depends="删除build 路径">
			<mkdir dir="${classes}" />
			<javac srcdir="${basedir}/src" destdir="${classes}">
				<classpath refid="classpath" />
			</javac>
			<copy todir="${classes}">
				<fileset dir="${src.dir}">
					<include name="**/*.xml" />
					<include name="**/*.properties" />
				</fileset>
			</copy>

		</target>

		<!-- 打war 包-->
		<target name="打war 包" depends="建立build/classes 路径,并编译class 文件到build/classes 路径下">
			<war destfile="${build}/WebTest1.war" webxml="${basedir}/WebContent/WEB-INF/web.xml">

				<!--  拷贝WebContent下所有文件-->
				<fileset dir="${basedir}/WebContent" />

				<!--  拷贝lib 目录下的jar 包-->
				<lib dir="${lib}" />
				<!--  拷贝build/classes 下的class 文件-->
				<classes dir="${classes}" />

			</war>

			<delete dir="${classes}" />

		</target>

        <!--发布到本地tomcat-->
		<target name="发布到本地tomcat" depends="打war 包">
			<copy file="${build}/WebTest1.war" tofile="${webapps}/WebTest1.war" />
		</target>
	

		<!-- Build classpath -->
		<path id="xdoclet.task.classpath">
			<fileset dir="${xdoclet.home}/lib">
				<include name="**/*.jar" />
			</fileset>
			<fileset dir="${xdoclet.home}/plugins">
				<include name="**/*.jar" />
			</fileset>
		</path>

		<taskdef name="xdoclet" classname="org.xdoclet.ant.XDocletTask" classpathref="xdoclet.task.classpath" />
         
		<!--生成Hibernate配置文件-->
		<target name="生成Hibernate配置文件" depends="生成hibernate映射文件">
			<xdoclet>
				<fileset dir="${src.dir}/com/jialin/model">
					<include name="**/*.java" />
				</fileset>
				<component classname="org.xdoclet.plugin.hibernate.HibernateConfigPlugin" destdir="${src.dir}" version="3.0" hbm2ddlauto="update" jdbcurl="jdbc:mysql://127.0.0.1/oa" jdbcdriver="com.mysql.jdbc.Driver" jdbcusername="root" jdbcpassword="123456" dialect="org.hibernate.dialect.MySQLDialect" showsql="true" />
			</xdoclet>
		</target>
		
		<!--生成hibernate映射文件-->
		<target name="生成hibernate映射文件">
			<xdoclet>
				<fileset dir="${src.dir}/com/jialin/model">
					<include name="**/*.java" />
				</fileset>
				<component classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin" version="3.0" destdir="${src.dir}" />
			</xdoclet>
		</target>
	</project>



说明见注释吧。

注:在eclipse里边先天支持ant,所以你可以在eclipse里边直接写build.xml,因为eclipse提供了提示功能,自动补充功能,它能让你事半功倍。
使用方法:只需要建立一个工程,然后建立一个叫build.xml的文件。然后就可以在里边写你的ant build了。

 

总结:

掌握了上边的那些内容之后,你就知道如何去写一个好的ant,但是你会发现当你真的想去做的时候,你不能马上作出好的build.xml,因为你知道太少的ant
的默认提供的命令.这个时候如果你想完成任务,并提高自己,有很多办法:

 
1、很多开源的程序都带有build.xml,看看它们如何写的
2、ant的document,里边详细列写了ant的各种默认命令,及其丰富
3、google,永远不要忘记它
4、时刻记住http://www.apache.org/永远能找到你需要的东西

 

随着你写的ant build越来越多,你知道的命令就越多,ant在你的手里也就越来越强大了,这个是一个慢慢积累的过程。  

考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度和提升系统经济性。文中可能涉及不确定性建模(如场景生成与缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例与代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真与优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率与创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建与求解过程,重点关注不确定性处理方法与需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习与交叉验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值