如何使用ant从多个Source Folder的项目中导出jar包?

本文详细介绍了如何使用Ant自动化工具解决在复杂项目中仅针对特定SourceFolder进行编译打包的问题,包括两次编译过程及最终生成所需Jar文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在修改公司的一个旧项目,经常需要修改其中一个Source Folder里面的部分java代码。修改完成后还要编译打包。最后再把jar包上传到服务器,重启服务器以进行调试。本来任务不难,但里面代码有点儿复杂。这样修改调试就显得十分繁琐。在尝试使用ant自动打包的过程中,我遇到了如下的问题:项目下有多个Source Folder,现在只需要将其中一个Source Folder下面的所有java文件编译并打成jar包。而这些java文件有可能依赖于其他Source Folder里面的类。想了半天没有结果,我又找同学请教、上网搜索。经过一系列不懈努力,我终于完成了该任务。

主要思路是:分两次编译。第一次编译所有java文件并将class文件保存在临时目录,第二次引用临时目录中的class文件来编译指定目录下的java文件以生成需要的class文件,最后把这些class文件打包。任务分解成这三步之后,每一步都挺简单的了。

下面贴出该任务的代码:

<?xml version= "1.0"?>
<project default="defaultTarget" basedir=".">
	<!-- 基本属性定义 -->
	
	<property name="base" value="." />
	<!-- 该项目是WEB项目,第三方jar包默认保存在该路径下 -->
	<property name="lib" value="WebRoot/WEB-INF/lib" />
	<!-- javaEE包 -->
	<property name="javaeeLib" value="D:/soft/lib/javaee/javaee.jar" />
	<!-- 指定的Source Folder,即:将该目录下的类对应的class文件打包 -->
	<property name="src.1.dir" value="vendue-src" />
	<property name="src.2.dir" value="${base}" />
	<property name="classes.1.dir" value="vendue-classes" />
	<property name="classes.2.dir" value="other-classes" />
	<!-- jar文件的保存位置,这里暂时保存在桌面,可以根据自己需要重新指定 -->
	<property name="jarFile" value="C:/Documents and Settings/Administrator/桌面/vendue_KernlEngine.jar" />


	<!-- 定义编译时需要的第三方jar包 -->
	<path id="Third-Part Lib">
		<fileset dir="${lib}">
			<include name="**/*.jar" />
		</fileset>
	</path>


	<!-- 初始化:创建两个临时目录 -->
	<target name="init">
		<mkdir dir="${classes.1.dir}" />
		<mkdir dir="${classes.2.dir}" />
	</target>


	<!-- 编译所有java文件,供第二次编译时引用 -->
	<target name="compileAll" depends="init">
		<javac srcdir="${src.2.dir}" destdir="${classes.2.dir}" encoding="gbk">
			<classpath refid="Third-Part Lib">
			</classpath>
			<classpath path="${javaeeLib}">
			</classpath>
		</javac>
	</target>


	<!-- 编译指定源文件夹下的java文件 -->
	<target name="compile" depends="compileAll">
		<javac srcdir="${src.1.dir}" destdir="${classes.1.dir}" encoding="gbk">
			<classpath refid="Third-Part Lib" />
			<classpath path="${classes.2.dir}" />
			<classpath>
				<fileset dir="${baseLib}">
					<include name="**/*.jar" />
				</fileset>
			</classpath>
		</javac>
	</target>


	<!-- 打包生成jar文件-->
	<target name="defaultTarget" depends="compile">
		<jar destfile="${jarFile}" basedir="${classes.1.dir}" />
	</target>


	<!-- 清理临时目录以及该目录下的所有临时文件 -->
	<target name="clean">
		<delete dir="classes.1.dir" />
		<delete dir="classes.2.dir" />
	</target>

</project>

参考文章

标题:Multiplesource folders: Avoid implicit compilation with Ant

地址:http://stackoverflow.com/questions/4627913/multiple-source-folders-avoid-implicit-compilation-with-ant

截图:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值