当前位置: 首页 > news >正文

Ant 构建java项目

 Ant 一般老项目会有它的身影,现在一般是maven 再新一点的是Gradle

Ant 的核心工作原理

 Ant 解析 XML 构建文件,实例化定义的一个个任务对象,然后通过JDK 工具(  ProcessBuilder 或 Runtime.exec()) 方法启动这些工具的进程(如 javacjarjava 等)

特点:

  • 灵活性高:几乎可以执行任何类型的构建任务,因为它本质上是一种过程化的脚本语言
  • 手动配置依赖:在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提示包导入,方便开发

效果:

http://www.lryc.cn/news/607367.html

相关文章:

  • FastDDS (SharedMemory)
  • webpack面试题及详细答案80题(41-60)
  • C++ 前缀和、双指针
  • Node.js中Buffer的用法
  • 嵌入式第十七课!!!!位运算!!!
  • 考取锅炉司炉工证需要学习哪些专业知识?
  • Linux 用户与组管理:从配置文件到实操命令全解析
  • golang的函数
  • YOLO V11 + BotSort行人追踪定位项目
  • 风光储并离网切换仿真模型(下垂控制一次调频)
  • 详解K8s集群搭建:从环境准备到成功运行
  • 【问题思考总结】CART树如何剪枝?从CART树的生成到剪枝以及为什么CTt一定小于Ct?【图文】
  • 在多租户或多服务共享 Redis 时,如何做逻辑隔离或权限控制?
  • 【数据结构】-----排序的艺术画卷
  • ESD监控系统确保工厂生产设备的静电安全
  • 浏览器【详解】内置Observer(共五种,用于前端监控、图片懒加载、无限滚动、响应式布局、生成安全报告等)
  • cesium FBO(四)自定义相机渲染到Canvas(离屏渲染)
  • 开源工具FossFLOW,绘制技术图表
  • 嵌入式GPU图像渲染工具全景实用指南(i.MX8MP平台)
  • Python深度解析与爬虫进阶:从理论到企业级实践
  • ubuntu 镜像克隆
  • Git 实现原理剖析
  • 【编号394】阿姆河流域土地利用分布数据(1990-2015)
  • 智能问数系统的调研
  • 【工具分享】模拟接口请求响应的Chrome插件ModResponse
  • 什么是doris
  • 第七章 愿景12 小萍分享《人性的弱点》
  • 软件性能优化:善用80-20法则,精准突破瓶颈
  • grafana/lock-stack 日志 Pipeline 配置
  • 前端渲染三国杀:SSR、SPA、SSG