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能提示包导入和本地构建运行,方便开发




效果:


1506

被折叠的 条评论
为什么被折叠?



