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

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值