前言
ant是java开发者工具箱的重要一环junitxdoclet等都与它紧密关联程序员可能习惯了IDE提供的自动构建甚至部署的功能从而忽略了ant本身其实主流的IDE通常是内置ant任务来完成这些工作的熟悉ant内在的机理可以阅读或简单修改buildxml无疑可以帮助你更灵活地集成管理应用项目如果需要学习maven这种开源项目管理解决方案也是要以理解ant为基础的哟另外使用ant的过程实际上对构建进行了文档化它是无关于IDE的想象一下你的同事中可能三分之一在用JbuilderX三分之一用eclipse还有一些是别的
本人使用eclipse以前的构建和发布工作都由myeclipse插件作了趁周末实践了一下手动构建记此备忘
实践
准备工作这是我的个人习惯把所有公用的类库jar置于一个固定目录分好类不要丢在一个文件夹下如jakartacommonshibernatespringstruts等这些是源码构建时需要用到的在部署时可能有一些不用再打进去了比如servletjar如果你们有自己的framework也一并放在这里然后打开eclipse进入Windows>Preferences>Java>User Libraries增加一个自己的库比如说mylib把刚才那些公共的jar全部添入这样有个好处在eclipse项目中不用再看到烦人的长长的jar列表了比较整洁
下来正式进行
新建一个Java Project此时就不要再选你的jee插件内置的一些选项了至简即可
在root下建几个文件夹我们在网上下载的开源项目中经常可以看到这些比如
src 源码
classes 编译
web jsp等
lib 库这里可以简单地把mylib下的东东copy过来便于将来发布源码
dlist 输出的jar或war
当然我们要建一个buildxmleclipse中会出现一个蚂蚁的小图标一般这个文件建立后下一个项目简单的copy过去稍加改动就可以了
打开项目的属性页在Java Build Path的库选项中加入我们自定义的公共库mylib至于Builders方式就不用改了使用默认的Java Builer即可我只是项目部署时使用ant平常的排错工作就交给IDE吧
重中之重写你的buildxml网上文章很海我这里就不再啰嗦了基本上就分那几个任务
先要声明一些路径变量如
<property name=wardir value=dlist />
也可以将其写至properties文件中在这里引用;
声明编译的类路径如下:
<path id=masterclasspath>
<fileset dir=${libroot}/struts>
<include name=strutsmenujar />
<include name=strutsjar />
</fileset>
<fileset dir=${libroot}/jakartacommons>
<include name=commons*jar />
</fileset>
<fileset dir=${libroot}/ibatis>
<include name=ibatis*jar />
</fileset>
<fileset dir=${libroot}/jdbcdriver>
<include name=jtdsrcjar />
</fileset>s
</path>
清空输出目录如webdlist等
编译构建:
<target name=build description=Compile main source tree java files into class files generate jar files>
<mkdir dir=${builddir} />
<javac destdir=${builddir} source= target= debug=true deprecation=false optimize=false failonerror=true>
<src path=${srcdir} />
<classpath refid=masterclasspath />
</javac>
<copy todir=${builddir} preservelastmodified=true>
<fileset dir=${srcdir}>
<include name=**/*xml />
<include name=**/*properties />
</fileset>
</copy>
<! ============================================= >
<! 据测试资源文件不能被打到jar文件中其余均可 >
<! ============================================= >
<copy todir=${webclassesdir}/conf preservelastmodified=true>
<fileset dir=${srcdir}/conf>
<include name=springResources*properties />
</fileset>
</copy>
<mkdir dir=${weblibdir} />
<jar jarfile=${weblibdir}/${name}jar compress=true>
<fileset dir=${builddir}>
<include name=** />
</fileset>
</jar>
<copy todir=${weblibdir} preservelastmodified=true>
<fileset dir=${libroot}>
<include name=logjjar />
</fileset>
<fileset dir=${libroot}/struts>
<include name=strutsmenujar />
<include name=strutsjar />
</fileset>
<fileset dir=${libroot}/jakartacommons>
<include name=commons*jar />
</fileset>
<fileset dir=${libroot}/spring>
<include name=springjar />
<include name=aopalliancejar />
</fileset>
</copy>
</target>
<! ============================================= >
<! Compile main Java sources and copy libraries >
<! ============================================= >
<target name=warfile description=Build the web application archive>
<mkdir dir=${distdir} />
<war warfile=${distdir}/${name}war basedir=${wardir} webxml=${wardir}/WEBINF/webxml>
<include name=* />
<include name=WEBINF/** />
<exclude name=WEBINF/webxml />
<include name=WEBINF/classes/** />
<include name=WEBINF/lib/** />
<exclude name=**/* />
</war>
</target>
打成war
<target name=warfile description=Build the web application archive>
<mkdir dir=${distdir} />
<war warfile=${distdir}/${name}war basedir=${wardir} webxml=${wardir}/WEBINF/webxml>
<include name=* />
<include name=WEBINF/** />
<exclude name=WEBINF/webxml />
<include name=WEBINF/classes/** />
<include name=WEBINF/lib/** />
<exclude name=**/* />
</war>
</target>
把几个任务串起来弄一个default target
<target name=all>
<antcall target=clean />
<antcall target=build />
<antcall target=warfile />
</target>
打完收功在实践中发现一些配置文件如strutsconfigxml ibatis和spring的xml都可以打进jar文件spring资源文件好象不行得单独copy至WEBINF\classes下另外你的web文件夹下事先得放好webxml以及一些tld文件哟