利用ant的javac任务来编译java程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <? xml version="1.0" encoding="UTF-8"?> < project name="javaTest" default="compile" basedir="."> <!-- 在此.代表当前目录 --> < target name="clean"> < delete dir="build"/> </ target > < target name="compile" depends="clean"> < mkdir dir="build/classes"/> < javac srcdir="src" destdir="build/classes"/> </ target > </ project > <!--运行结果 E:\antstudy>ant compile Buildfile: E:\antstudy\build.xml clean: compile: [mkdir] Created dir: E:\antstudy\build\classes [javac] E:\antstudy\build.xml:9: warning: 'includeantruntime' was not set, d efaulting to build.sysclasspath=last; set to false for repeatable builds [javac] Compiling 1 source file to E:\antstudy\build\classes BUILD SUCCESSFUL Total time: 1 second --> |
先建一个文件夹 antstudy(project文件夹)
再建一个src文件夹(作为源代码目录)
里面放置java程序
在antstudy目录下建一个build.xml文件如上
javac 属性:
debug:是否产生调试信息默认为 off
1 2 3 4 5 | < target name="compile" depends="clean"> < mkdir dir="build/classes"/> < javac srcdir="src" destdir="build/classes" debug="on"/> <!-- srcdir 源目录(在这里为源代码目录)destdir目标目录 即编译完成后存放class文件的目录 --> </ target > |
1 2 3 4 5 6 7 8 | < target name="compile" depends="clean"> < mkdir dir="build/classes"/> < javac destdir="build/classes" fork="true" memorymaximumsize="500M source="1.2" target="1.2"> <!-- srcdir 源目录(在这里为源代码目录)destdir目标目录 即编译完成后存放class文件的目录 --> < src path="src"/> < src path="eventinfo"/> </ javac > </ target > |
src path 编译的源目录,可以通过这样编译在不同文件夹里的文件
fork
是否执行外部的javac
如果没有制定fork属性默认为false javac和ant命令将在同一个进程中执行 容易出现内存溢出 同时javac被分配的内存只有64MB,如果指定fork属性为true,javac命令将和ant不在同一个进程中执行,分配内存的大小将为memoryinitialsize(获得基本vm初始内存大小)、memorymaximumsize(最大内存大小)指定的大小。
source:指定版本号使编译出的(文件)类兼容该版本
一般jdk都向下兼容向上不兼容 source在这里指编译出向下兼容的版本的类
如果用Eclipse,你可以在项目属性中编译选项里有设置生成兼容JDK1.4的类。但是如果你在Eclipse里自己写Ant脚本用<javac> 命令去编译java类,则生成的仍为JDK1.5的类(执行Ant脚本时与Eclipse设置的编译选项无关)。如何解决了,其实很简单,只要在<javac> ant 命令里加source参数。
target:根据指定的vm版本生成class文件
1 2 3 4 5 | < target name="compile" depends="clean"> < mkdir dir="build/classes"/> < javac srcdir="src" destdir="build/classes" debug="on" includes="package/**,package1/**" excludes="package2/**/**"/> <!-- srcdir 源目录(在这里为源代码目录)destdir目标目录 即编译完成后存放class文件的目录 --> </ target > |
includes 必须包括的文件模式的列表,以逗号或空格分割,如果忽略将包括所有文件
excludes 必须排除的文件模式的列表,以逗号或空格分割,如果忽略将不排除任何文件
debug debug属性设置为on时 ,才能在debug引用该jar工程的时候debug到该jar包中的代码
1 2 3 4 5 6 | < javac encoding="utf-8" destdir="../WebContent/WEB-INF/classes" fork="true" memorymaximumsize="500M" source="${source}" target="${target}> < src path="../src"/> < src path="../eventinfo"/> < src path="../detectsetting"/> < classpath refid="ids7010-web-vcm.classpath"/> </ javac > <!--适合需要编译的文件不在同一个目录内--> |
classpath 设置Classpath的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序(.class文件)。
在javac过程中会使用到jar包里的class文件
所以有的时候也需要在<javac></javac>标签内打上<classpath>标签指定需要使用的jar包名称
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 本地部署 DeepSeek:小白也能轻松搞定!
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)