工作以前没有学习过ant,工作之后一般使用maven,不过还是有很多的开源框架使用ant构建,所以今天花了半天时间学习了一下,有了下面的入门例子,做了详细解释。
<?xml version="1.0" encoding="UTF-8"?>
<!--
default 默认执行名为compile的任务
basedir 指定基于哪个路径,默认为当前路径(这里显示指明为当前路径)
-->
<project default="dist" basedir=".">
<!-- properties -->
<!--
标签属性
name : 属性名, ${属性名}则可引用该属性值
value : 属性值, 占位符${属性名}的替换类似C语言的宏
标签属性值
src.dir 源文件目录
classes.dir 本项目字节码文件目录
lib.dir 本项目源码依赖的jar包目录
compile.dir 使用ant编译源文件后的输出目录
dist.dir 打包后的输出目录
-->
<property name = "src.dir" value="src"></property>
<property name = "classes.dir" value="bin"></property>
<property name = "lib.dir" value="lib"></property>
<property name = "compile.dir" value="compile"></property>
<property name = "dist.dir" value="dist"></property>
<!-- classpath -->
<!--建立一个id为lib.jar.classpath的类加载路径-->
<path id="lib.jar.classpath">
<!-- ${lib.dir}目录下的所有jar文件 -->
<fileset file="${lib.dir}/*.jar"></fileset>
<!-- 如果要包含单个路径,使用 pathelement标签(演示) -->
<pathelement location="${classes.dir}"></pathelement>
</path>
<!-- target 新建输出目录 -->
<target name="createOutputFolder">
<mkdir dir="${compile.dir}"/>
</target>
<!-- target 清除源文件编码为utf8的bom头 -->
<!-- 例如使用记事本另存为utf8的时候,前三个字节为特定的标识 ,这三个字节影响ant编译java文件-->
<!-- 如果使用eclipse创建一个utf8格式的java文件则无 -->
<target name="removeUTF8Bom">
<echo>开始移utf8编码文件的bom头</echo>
<!--
dir <java dir="bin"> 指定java命令当前目录(如果这里设置了则不需设置classpath)
先从当前目录找字节码文件,没有的话再从classpath找嘛
classname 指定main方法的所在的类
fork 官方:if enabled triggers the class execution in another VM
可以理解为是否允许启用另一个进程(另一个虚拟机)来执行字节码
maxmemory 指定虚拟机内存
<classpath> 加载该类对应的字节码文件
<arg> Utf8BomRemover类的main方法需要两个参数,源文件目录的父目录 以及 源文件目录
line 参数的形式类似命令行的输入方式
${basedir} 相当于<project>中的 basedir属性值
-->
<java classname="com.yong.util.Utf8BomRemover"
failonerror="true" fork="true" maxmemory="128m">
<classpath location="${classes.dir}" />
<arg line="${basedir} ${src.dir}" />
</java>
</target>
<!-- target 编译源码,依赖以上两个任务
depends :执行该任务时,先依次执行依赖的任务,
如果执行过程中,发现被依赖的任务已经执行过则跳过
-->
<target name="compile" depends="removeUTF8Bom, createOutputFolder">
<!-- javac标签用于编译操作
标签属性
srcdir : 指定源代码所在目录
encoding :指定源码的编码(如果不是使用utf编码,则无需执行removeUTF8Bom任务)
debug : 是否生成调试信息(例如 堆栈异常信息中的行号、栈帧中的局部变量信息以及class名字等)
debuglevel :指定生成哪些调试信息(下文详解)
destdir :指定编译文件输出目录(如果不指定则每个字节码文件跟对应的源文件在同一目录)
includeantruntime :指出是否应在类路径中包括 Ant运行时程序库,默认为 true(不显示设置跑不过,费解)
<classpath> :使用引用的方式,指定类加载路径(本例为源码依赖的jar包的路径)
(也可以设置<javac classpathref="lib.jar.classpath" />)
-->
<javac srcdir="${src.dir}" encoding="utf-8" debug="true"
debuglevel="lines, vars, source" destdir="${compile.dir}" includeantruntime="true" >
<classpath refid="lib.jar.classpath"></classpath>
</javac>
<!--
javac命令与调试信息相关的的一些参数:
无 默认的话,只写入源码的行号和源文件信息
-g 在class文件中生成所有调试信息,包括局部变量的信息
-g:none 不生成任何调试信息。
-g:([lines[,vars[,source]]]) 不确定是使用中括号()还是花括号{}还是都行
lines: 行号调试信息
将源文件中的行号信息写到Class文件中,此属性用于在Class文件中生成方法字节码流偏移量和源代码行号之间的映射关系。
如果我们不指定此属性的话,我们将在堆栈异常信息中看不到打印的行号。
(没有了行号,你就不能打断点了)
vars: 局部变量调试信息
属性建立了方法的栈帧中局部变量部分内容与源代码中局部变量名称和描述符之间的映射关系。
有了这个属性,调试时,我们才可以看到变量的值。
(没有了局部变量,你调试的时候就看不到,很多框架的class文件都没有写入这个
所以经常遇到调试的时候看不到局部变量的值)
source:源文件调试信息
编译时指定了这个属性,会把源文件的属性信息如源文件名称写入class文件。
(调试的时候遇到Unknown Source这样的信息,通常编译时没有指定source,
在IDE中也可以显示的指定字节码对应的src)
eclipse中调试源码通常都包含以上三种信息,可以通过。。设置是否包含哪些调试信息
Window->Preferences->Java->Compiler,可以看到页面的下方有一个Classfile Generation,默认是四个选项都选的。
对于ant中<java debug="true" debuglevel="lines, vars, source">
debug 如果为true,则加入的调试信息参考debuglevel, 如果debuglevel没有(我猜就是按照默认的只写入源码的行号和源文件信息)
debug 如果为false, 则不加入调试信息
-->
</target>
<!-- target 创建发布目录(打包的jar包所在目录)-->
<target name="createDistFolder" >
<mkdir dir="${dist.dir}"/>
</target>
<!-- target 打包
destfile 指定打包后生成的jar的路径
basedir 指定打包的字节码文件所在目录
例如有 basedir/com/yong/Test.class
打包后为 destfile/package.jar (/com/yong/Test.class)
-->
<!--
<manifest>标签 ant默认会为该package.jar创建清单文件
如果想要设置清单文件中的一些内容(属性),则要在<jar>里面使用该标签
Main-Class 实行该jar的入口(如果需要双击运行或者命令行中运行)
最终生成的清单文件 /Meta-INF/MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_32-b05 (Sun Microsystems Inc.)
Built-By: 123
Main-Class: com.yong.FileLineSorter
-->
<target name="dist" depends="createDistFolder, compile">
<!-- 在target下使用时间戳
${DSTAMP} 表示当天日期 20120725
-->
<tstamp></tstamp>
<jar destfile="${dist.dir}/package-${DSTAMP}.jar" basedir="${compile.dir}">
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="com.yong.FileLineSorter"/>
</manifest>
</jar>
</target>
</project>
分享到:
相关推荐
**Ant入门教程——使用Ant自动生成JAR文件** Apache Ant是一个Java库和命令行工具,其任务是驱动构建过程。它是Java开发中的一个重要工具,尤其在自动化构建、编译、测试和部署应用程序时。本教程将带你深入了解Ant...
### ant入门基础详解 在软件开发领域,自动化构建工具扮演着至关重要的角色,它们能够帮助开发者简化项目构建、测试和部署的过程。Apache Ant作为一款经典的Java项目构建工具,以其强大的功能和灵活性,自问世以来...
【Ant入门实例】 Apache Ant,一个Java库和命令行工具,其任务是驱动构建过程。...提供的两个文件——"Ant入门教程.doc"和"Ant.pdf",可以作为深入学习Ant的参考资料,帮助你进一步理解其工作原理和实际应用。
《Ant入门教材——深入理解Java构建工具》 在软件开发过程中,构建工具是不可或缺的一部分,它们帮助我们自动化处理编译、测试、打包等任务。在Java世界里,Ant是一款广泛使用的构建工具,由Apache软件基金会开发。...
### Ant基本使用指南——从入门到精通 #### 一、Ant简介 Apache Ant 是一个 Java 环境下的开源构建工具,它通过一系列预定义的任务来驱动构建过程,支持跨平台运行。Ant 以 XML 文件的形式来配置构建过程,使得...
【Ant初步】——Java构建工具的入门指南 Apache Ant是一个基于Java的构建工具,它被广泛用于自动化Java项目的编译、打包、测试等任务。Ant以其XML格式的构建文件(build.xml)闻名,使得项目构建过程可以被清晰地...
【Ant教程:初学者入门指南】 Ant是Apache软件基金会开发的一款Java项目构建工具,它以XML格式定义构建过程,使得构建脚本具有可读性、可重用性和可移植性。对于初学者而言,理解Ant的基本概念和用法是进入Java世界...
- **配置build.xml**:Ant的工作基于一个XML文件——build.xml,其中定义了各种任务(target)及其依赖关系。 - **编译源码**:使用`<javac>`任务编译Java源代码。 - **打包WAR**:使用`<war>`任务将编译后的类...
3. `build.standalone.sh`: 这是一个Shell脚本,用于构建独立的应用程序,可能包含了打包和编译的步骤。 4. `readme.txt`: 项目说明文件,提供了项目的基本介绍和使用指南。 5. `build.xml`: Apache Ant的构建文件,...
打开控制台(运行中输入cmd),将目录转到SchoolEbay所在目录,输入ant命令来编译打包程序(编译前请修改datasource下的Constants.java文件,将其中的username和passoword修改为SQL Server的用户名和密码)。...
它包含了诸如编译、测试、打包、部署等一系列与Gaelyk项目相关的任务,使得开发者无需手动配置这些繁琐的步骤,只需通过简单的命令即可完成整个构建过程。这极大地提高了开发效率,减少了出错的可能性。 插件的核心...
- **构建工具Ant**:Ant是一种用于构建Java应用的强大工具,可以通过编写XML文件(build.xml)来自动化执行编译、打包、部署等任务。 #### 三、实现功能模块 - **功能性测试**:编写功能性测试是确保应用按预期...
4. **构建脚本**:如Ant或Gradle脚本,用于编译和打包游戏应用。 5. **文档**:可能包括README、设计文档、API文档等,帮助理解源码结构和功能。 6. **库文件**:.jar或.aar,包含了游戏依赖的第三方库。 通过分析...
通过Maven的生命周期,可以执行诸如编译、测试、打包和部署等一系列构建任务。此外,Maven还提供了丰富的插件生态系统,用于扩展其功能,例如Maven Exec插件可用于运行Java程序,而Maven Help插件则能帮助开发者了解...
4. **用 Ant 构建**:通过Ant构建工具,我们可以自动化编译、打包和运行Hibernate项目,简化开发流程。 5. **启动和辅助类**:创建一个启动类,负责初始化Hibernate环境,如创建SessionFactory。 6. **加载并存储...
- **生命周期:** Maven 定义了一系列的构建阶段,如清理、编译、测试、打包、集成测试、验证、部署等。 - **插件系统:** Maven 使用插件来扩展其功能,提供了丰富的插件用于执行各种任务。 - **多模块支持:** ...
"ant"是一个在Java环境中广泛使用的构建工具,它允许开发者自动化构建过程,包括编译、测试和打包。"run"是ant任务的一个实例,用于启动应用程序。这表明该项目遵循了标准的Java项目结构,使得代码的编译和运行变得...