如何使用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
截图: