Ant 构建java项目
Ant 一般老项目会有它的身影,现在一般是maven 再新一点的是Gradle
Ant 的核心工作原理
Ant 解析 XML 构建文件,实例化定义的一个个任务对象,然后通过JDK 工具( ProcessBuilder
或 Runtime.exec())
方法启动这些工具的进程(如 javac
、jar
、java
等)
特点:
- 灵活性高:几乎可以执行任何类型的构建任务,因为它本质上是一种过程化的脚本语言。
- 手动配置依赖:在Ant中,你需要手动管理项目依赖,这通常涉及到下载jar包并将其放置到正确的目录中。(麻烦)
- XML配置:所有的构建逻辑都写在一个或多个XML文件中。对于简单的项目来说,这可能足够了,但对于大型项目,XML文件可能会变得非常庞大且难以维护。
spring-ant-project/ # 项目根目录
│
├── build.xml # Ant 构建脚本,定义编译、打包等任务
├── ivy.xml # Ivy 依赖配置文件,声明需要的库(如 Spring、JUnit、Mockito)
│
├── src/ # 源码目录
│ └── main/
│ ├── java/ # Java 源代码
│ │ └── com/
│ │ └── example/
│ │ └── SpringApp.java # 主程序入口
│ │
│ └── resources/ # 配置文件和静态资源
│ ├── application.properties # Spring 配置文件(可选)
│ └── static/ # 静态网页资源(如 HTML、CSS)
│ └── index.html # 默认首页
│
├── lib/ # Ivy 下载的依赖 JAR 文件存放目录
│ ├── spring-boot-starter-web-2.7.15.jar
│ ├── junit-4.13.2.jar
│ ├── mockito-core-3.12.4.jar
│ └── ...(其他自动下载的依赖)
│
├── ivy-lib/ # 存放 Ivy 自身的 JAR 文件(关键!)
│ └── ivy-2.5.3.jar # 从 apache-ivy-2.5.3-bin-with-deps.zip 解压得到
│
├── build/ # 编译后的 .class 文件存放目录(由 Ant 自动生成)
│ └── classes/
│
│
├── dist/ # 打包输出的 JAR 文件目录(由 Ant 自动生成)
│ └── spring-ant-project.jar # 最终可运行的 Jar 包
│
└── (可选) ant/ # 可以放 ant.jar(如果你不使用系统 Ant)spring-ant-project/ # 项目根目录
│
├── build.xml # Ant 构建脚本,定义编译、打包等任务
├── ivy.xml # Ivy 依赖配置文件,声明需要的库(如 Spring、JUnit、Mockito)
│
├── src/ # 源码目录
│ └── main/
│ ├── java/ # Java 源代码
│ │ └── com/
│ │ └── example/
│ │ └── SpringApp.java # 主程序入口
│ │
│ └── resources/ # 配置文件和静态资源
│ ├── application.properties # Spring 配置文件(可选)
│ └── static/ # 静态网页资源(如 HTML、CSS)
│ └── index.html # 默认首页
│
├── lib/ # Ivy 下载的依赖 JAR 文件存放目录
│ ├── spring-boot-starter-web-2.7.15.jar
│ ├── junit-4.13.2.jar
│ ├── mockito-core-3.12.4.jar
│ └── ...(其他自动下载的依赖)
│
├── ivy-lib/ # 存放 Ivy 自身的 JAR 文件(关键!)
│ └── ivy.jar # 从 apache-ivy-2.5.3-bin-with-deps.zip 解压得到
│
├── build/ # 编译后的 .class 文件存放目录(由 Ant 自动生成)
│ └── classes/
│ └── com/
│ └── example/
│ └── SpringApp.class
│
├── dist/ # 打包输出的 JAR 文件目录(由 Ant 自动生成)
│ └── spring-ant-project.jar # 最终可运行的 Jar 包
│
└── (可选) ant/ # 可以放 ant.jar(如果你不使用系统 Ant)
Ant 负责构建打包工作,但是Ant没有像Maven那样的依赖管理能力,所以休要Ivy配合
1. Ant安装类型maven 到官网下载安装解压,配置环境变量 Apache Ant - Welcome
2.下载Ivy包管理 Download | Apache Ivy ™
注意! 这里创建新项目时选择java 类型,不要选maven
1. 构建配置文件 build.xml
<?xml version="1.0"?>
<project name="spring-ant-project" default="package" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant"><!--注意!!IDEA语法,是检查本地是否存在目录或文件,如果没有,就会显示红色。如果是下面的这些情况,它会误判为“文件不存在”,于是报红、警告、提示错误。实际不影响运行。1. ivy-2.5.3.jar 还没下载(或者还没被加载)2. IDEA 无法“穿透 JAR 包”去检查里面的资源是否存在--><!-- 定义属性值,这里的目录确保在本地存在 --><property name="version" value="1.0.0"/><property name="src.dir" value="${basedir}/src/main/java"/><property name="resources.dir" value="${basedir}/src/main/resources"/><property name="build.dir" value="${basedir}/build"/><property name="classes.dir" value="${build.dir}/classes"/><property name="lib.dir" value="${basedir}/lib"/><property name="dist.dir" value="${basedir}/dist"/><property name="ivy.lib.dir" value="${basedir}/ivy-lib"/><!-- 初始化Ivy --><target name="init-ivy"><mkdir dir="${ivy.lib.dir}"/><!-- 确认 ivy-2.5.3.jar 存在 --><available file="${ivy.lib.dir}/ivy-2.5.3.jar" property="ivy.available"/><fail message="Ivy JAR not found in ${ivy.lib.dir}. Please download it from http://ant.apache.org/ivy/ and place it there." unless="ivy.available"/><!-- 使用AntLib方式加载Ivy任务 --><taskdef uri="antlib:org.apache.ivy.ant" resource="org/apache/ivy/ant/antlib.xml"><classpath><fileset dir="${ivy.lib.dir}" includes="*.jar"/></classpath></taskdef></target><!-- 解析依赖 --><target name="resolve" depends="init-ivy"><ivy:resolve/><!-- 修改后(扁平目录,IDEA 能识别)--><ivy:retrieve pattern="${lib.dir}/[artifact]-[revision](-[classifier]).[ext]" conf="default"/><ivy:cachepath pathid="ivy.compile.classpath" conf="default"/></target><!-- 编译 --><target name="compile" depends="resolve"><mkdir dir="${classes.dir}"/><javac srcdir="${src.dir}"destdir="${classes.dir}"classpathref="ivy.compile.classpath"includeantruntime="false"debug="off"optimize="on"encoding="UTF-8"><compilerarg value="-Xlint:all"/></javac><copy todir="${classes.dir}"><fileset dir="${resources.dir}"/></copy></target><!-- 创建可执行JAR(Fat Jar) --><target name="package" depends="compile"><mkdir dir="${dist.dir}"/><jar destfile="${dist.dir}/${ant.project.name}-${version}.jar" basedir="${classes.dir}"><manifest><attribute name="Main-Class" value="com.example.SpringApp"/><!-- 添加Class-Path或直接将所有依赖打入JAR --></manifest><!-- 将所有依赖库加入到JAR中 --><zipgroupfileset dir="${lib.dir}" includes="**/*.jar"/></jar></target><!-- 清理 --><target name="clean"><delete dir="${build.dir}"/><delete dir="${dist.dir}"/></target><target name="clean-all" depends="clean"><delete dir="${lib.dir}"/></target></project>
2. 依赖管理配置文件 ivy.xml
<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven"><info organisation="com.example" module="spring-ant-project"/><configurations><conf name="default" description="Compile and runtime dependencies"/><conf name="test" description="Test dependencies"/></configurations><dependencies><!-- Spring Boot Starter Web (包含 Web MVC, Tomcat, AutoConfigure 等) --><dependency org="org.springframework.boot" name="spring-boot-starter-web" rev="2.3.12.RELEASE"/><!-- Spring Boot Test Starter --><dependency org="org.springframework.boot" name="spring-boot-starter-test" rev="2.3.12.RELEASE" conf="test->default"/><!-- Lombok --><dependency org="org.projectlombok" name="lombok" rev="1.18.20"/><!-- Apache Commons Lang3 --><dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0"/></dependencies>
</ivy-module>
执行打包操作
# 前提你本地已经安装号Ant并且要当前目录下有build.xml,第一次下载依赖会要点时间ant package
重要一步,让idea 感知到依赖jar所在,目的idea提示包导入,方便开发
效果: