针对 SSM(Spring + SpringMVC + MyBatis)项目 的 build.xml
模板,支持依赖管理、编译、打包 WAR 文件及部署到 Tomcat。假设项目结构符合 Maven 约定(可调整目录路径):
SSM 项目目录结构
ssm-project/
├── src/
│ ├── main/
│ │ ├── java/ # Java 源码(Controller/Service/Dao 等)
│ │ ├── resources/ # 配置文件(spring, mybatis, properties 等)
│ │ └── webapp/ # Web 资源(JSP、CSS、JS)
│ │ ├── WEB-INF/
│ │ │ └── web.xml
│ │ └── static/ # 静态资源(CSS/JS/Images)
├── External Libraries/ # Maven管理依赖 JAR(Spring/MyBatis/数据库驱动等)
├── build/ # 构建输出目录
│ ├── classes/ # 编译后的类文件
│ └── ssm-project.war # 生成的 WAR 文件
└── build.xml # Ant 构建脚本
因为项目用的是Maven管理依赖,没有lib目录,需要使用Ant的Maven任务插件,例如ant-maven-plugin或Maven Ant Tasks,来解析pom.xml文件并自动下载依赖。将Maven的依赖库复制到Ant构建所需的目录中,比如lib目录,以便在构建时包含这些依赖。
步骤 1:准备 Maven Ant Tasks
下载插件:
前往 Maven Ant Tasks 官网 下载maven-ant-tasks-2.1.3.jar
(或最新版本)。放置插件:
将下载的 JAR 文件放入项目根目录的ant-lib
文件夹(需手动创建)。
关键配置说明
Maven 依赖解析
- 通过
artifact:pom
和artifact:dependencies
任务读取pom.xml
,自动下载所有runtime
作用域的依赖到build/lib
目录。 - 首次运行需联网:依赖会从 Maven 中央仓库下载并缓存到本地仓库。
- 通过
依赖路径管理
- 编译时通过
dependency.classpath
引用所有依赖,无需手动维护lib
目录。 - WAR 打包时自动包含
build/lib
下的所有 JAR 文件。
- 编译时通过
Tomcat 依赖处理
- 显式添加 Tomcat 的
servlet-api.jar
到编译类路径(根据实际安装路径修改)。
- 显式添加 Tomcat 的
步骤 2:配置 build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="SSMProject" default="deploy" basedir="."
xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<!-- ========== 加载 Maven Ant Tasks ========== -->
<taskdef resource="org/apache/maven/artifact/ant/antlib.xml"
uri="antlib:org.apache.maven.artifact.ant"
classpath="ant-lib/maven-ant-tasks-2.1.3.jar"/>
<!-- ========== 属性配置 ========== -->
<property name="src.dir" value="src/main/java"/> <!-- Java 源码目录 -->
<property name="resources.dir" value="src/main/resources"/><!-- 资源文件目录 -->
<property name="web.dir" value="src/main/webapp"/> <!-- Web 资源目录 -->
<property name="build.dir" value="build"/> <!-- 构建输出目录 -->
<property name="classes.dir" value="${build.dir}/classes"/><!-- 编译目录 -->
<property name="lib.dir" value="${build.dir}/lib"/> <!-- 依赖库目录 -->
<property name="war.file" value="${build.dir}/ssm-project.war"/><!-- WAR 文件名 -->
<!-- Maven 本地仓库路径(默认 ~/.m2/repository,根据实际情况修改) -->
<property name="maven.repo.local" value="E:\apache-maven\apache-maven-3.8.8\repo"/>
<!-- Tomcat 部署路径 -->
<property name="tomcat.webapps" value="E:\apache-tomcat\apache-tomcat-9.0.88\webapps"/>
<!-- ========== 初始化目录 ========== -->
<target name="init">
<mkdir dir="${build.dir}"/>
<mkdir dir="${classes.dir}"/>
<mkdir dir="${lib.dir}"/>
</target>
<!-- ========== 解析 pom.xml 并下载依赖 ========== -->
<target name="resolve-dependencies" depends="init">
<!-- 读取 pom.xml 中的依赖 -->
<artifact:pom id="project.pom" file="pom.xml"/>
<artifact:dependencies pomRefId="project.pom"
useScope="compile"
filesetId="dependency.fileset"
pathId="dependency.classpath">
<remoteRepository id="central"
url="https://maven.aliyun.com/repository/public"/>
<localRepository path="${maven.repo.local}"/>
</artifact:dependencies>
<!-- 复制依赖到 lib 目录 -->
<copy todir="${lib.dir}" flatten="true">
<fileset refid="dependency.fileset"/>
</copy>
</target>
<!-- ========== 编译 Java 代码 ========== -->
<target name="compile" depends="resolve-dependencies">
<javac srcdir="${src.dir}" destdir="${classes.dir}"
source="1.8" target="1.8" encoding="UTF-8"
includeantruntime="false">
<classpath>
<!-- 依赖库路径 -->
<path refid="dependency.classpath"/>
<!-- 添加 Tomcat 的 Servlet API -->
<fileset dir="E:\apache-tomcat\apache-tomcat-9.0.88\lib">
<include name="servlet-api.jar"/>
</fileset>
</classpath>
</javac>
<!-- 复制所有资源文件到 classes 目录 -->
<copy todir="${classes.dir}">
<fileset dir="${resources.dir}">
<include name="**/*.xml"/> <!-- MyBatis/Spring 配置文件 -->
<include name="**/*.properties"/><!-- 属性文件 -->
<!-- <include name="static/**/*"/> <!– 静态资源 –>-->
<!-- <include name="templates/**/*"/><!– Thymeleaf 模板 –>-->
</fileset>
</copy>
</target>
<!-- ========== 打包 WAR 文件 ========== -->
<target name="war" depends="compile">
<war destfile="${war.file}" webxml="${web.dir}/WEB-INF/web.xml">
<!-- Web 资源(JSP/HTML/CSS/JS) -->
<!-- <fileset dir="${web.dir}">-->
<!-- <include name="**/*.*"/>-->
<!-- </fileset>-->
<!-- 添加 Web 资源(JSP/HTML/CSS/JS) -->
<fileset dir="${web.dir}">
<include name="**/*.html"/>
<include name="**/*.jsp"/>
<include name="WEB-INF/**/*"/> <!-- web.xml 等配置 -->
<include name="static/**/*"/> <!-- 静态资源(关键配置) -->
</fileset>
<!-- 编译后的类文件 -->
<classes dir="${classes.dir}"/>
<!-- 第三方依赖库 -->
<lib dir="${lib.dir}"/>
</war>
</target>
<!-- ========== 部署到 Tomcat ========== -->
<target name="deploy" depends="war">
<copy file="${war.file}" todir="${tomcat.webapps}"/>
<echo message="WAR 文件已部署到 Tomcat,请重启服务器!"/>
</target>
<!-- ========== 清理构建产物 ========== -->
<target name="clean">
<delete dir="${build.dir}"/>
<delete file="${tomcat.webapps}/ssm-project.war"/>
<delete dir="${tomcat.webapps}/ssm-project"/>
</target>
</project>
可能的问题
出现F:\code_space\2025\repo\testrepo\src\main\java\mms\pojo\ApiResponse.java:3: 错误: 程序包lombok不存在
Maven Ant Tasks没有正确解析依赖:可能依赖的作用域(scope)设置不正确,比如Lombok可能被声明为provided,导致在编译时没有被包含进去。
问题原因
错误 程序包lombok不存在
表明 Lombok 依赖未正确引入到编译类路径中。由于您的项目使用 Maven 管理依赖,但通过 Ant 构建,需确保以下两点:
pom.xml
中已声明 Lombok 依赖。- Ant 的构建脚本正确解析并包含 Lombok 的 JAR 文件。
解决方案
步骤 1:确认 pom.xml
包含 Lombok 依赖
<!-- pom.xml -->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version> <!-- 使用最新版本 -->
<scope>provided</scope> <!-- 若使用 IDEA/Eclipse,建议保留 provided -->
</dependency>
</dependencies>
步骤 2:修改 Ant 的 build.xml
调整依赖解析的作用域(useScope
),确保 Lombok 被包含到编译类路径中。
<!-- build.xml -->
<target name="resolve-dependencies" depends="init">
<artifact:pom id="project.pom" file="pom.xml"/>
<artifact:dependencies pomRefId="project.pom"
useScope="compile" <!-- 关键修改:包含 compile 和 provided 依赖 -->
filesetId="dependency.fileset"
pathId="dependency.classpath">
<remoteRepository id="central"
url="https://repo.maven.apache.org/maven2"/>
<localRepository path="${maven.repo.local}"/>
</artifact:dependencies>
<copy todir="${lib.dir}" flatten="true">
<fileset refid="dependency.fileset"/>
</copy>
</target>
步骤 3:清理并重新构建
ant clean resolve-dependencies compile
启动方式
idea 配置Ant工具启动
可用命令行启动
ant -f build.xml
访问方式
war包会生成在tomcat/webapps下
启动tomcat
输入url(http://localhost:8080/ssm-project/)可成功访问