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

本文介绍了一种使用Ant从包含多个SourceFolder的项目中仅导出特定SourceFolder下Java文件的方法。通过分两次编译的方式,确保了依赖关系正确处理,并最终生成所需的jar包。

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

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

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

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

下面贴出该任务的代码:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<? 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

截图:

来源:http://blog.youkuaiyun.com/binbinxyz/article/details/7361376
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值