My studying notes for Java,Ruby,Ajax and other any interesting things.

星期六, 十一月 04, 2006

修改lomboz的ant执行计划

用elcipse的时候感觉lomboz每次编译的时候不会自动的把第三方的jar放到web的lib中去,感觉非常麻烦,尤其是现在的web应用动不动就几十个包,一个一个的拷贝实在让人难受。懒人就喜欢考虑考虑让机器做事情,到网上搜了一下居然没有发现类似的问题。不过发现一个blog上面有一个类似的解决方法( http://www.matrix.org.cn/blog/zhenggc/archives/2004_08.html)和我的情况比较类似,但是他用的eclipse已经和现在的版本不同,在build.properties中并没有对应的jar的信息,只好想象办法怎样才能让它自动拷贝部署。想法是把三方的包放在公共的目录中,在使用ant编译和部署的时候读取build.properties中的属性获取当前项目所依赖的包,然后把这些包全部拷贝到web-inf/lib里面去,然后再进行部署操作。

首先把三方的包都分类存放在一个公共的目录下面,比如我的文件夹就叫做third_lib的一个目录,里面存放各种开源的或者driver等三方jar。存放的时候不同的版本需要的包存放在不同的目录下面,比如hibernate2.1.6和hibernate3分开目录存放,毕竟不是所有的包都可以协同工作的。放好了以后的目录结构类似

%third_lib%\
+-spring

+--spring-aop.jar

+--spring-context.jar

+-hibernate2

+- hibernate2.jar
+struts....



然后在build.properties中添加一个几个变量:

third_lib=E:/java/third_lib
include_jars=spring;hibernate2;struts;...


其中third_lib指向你的三方jar存放的目录(也可以使用环境变量的方式在编译的时候指定或者获取系统变量),include_jars是用来指定当前项目需要的三方的依赖包(这里使用目录名称作为三方依赖框架名称)。 这样一来ant编译的时候就可以从build.properties中获取到项目的依赖包的关系了,从而进行拷贝操作。现在剩下的工作就是在ant的build.xml中写入一个任务并把deploy的depends加上新加的任务了。

<target name="copyjars" depends="init">

<script language="javascript">
<![CDATA[
importClass(java.io.File);
third_lib=project.getProperty("third_lib");
msg=project.getProperty("include_jars");
todir=project.getProperty("basedir")+"/"+project.getProperty("dist")+"/web-inf/lib";
copy = webmodulebuilder.createTask("copy");

copyjars.addTask(copy);
copy.setTodir(new File(todir));
copy.setVerbose(true);

arrMsg = msg.split(";");
for(var i=0;i< arrMsg.length;i++)
{
file_set = project.createDataType("fileset");
file_set.setDir(new File(third_lib+"/"+arrMsg[i]));
file_set.setIncludes("*.jar");
copy.addFileset (file_set);
}
]]>
</script>
</target>


其中使用到了script调用javascript,是ant的一个可选任务,需要下载几个依赖的jar放在ant\lib里面。

js.jar http://gd.tuwien.ac.at/infosys/browsers/mozilla.org/js/rhino15R3.zip 解压后取其中的js.jar,使ant支持javascript脚本
bsf.jar http://cvs.apache.org/dist/jakarta/bsf/v2.3.0rc1/bin/bsf-bin-2.3.0.tar.gz下载解压取其中的bsf.jar,使ant支持多种script

下载完毕以后使用ant lomboz的web应用,直接部署到tomcat上面,再也没有classnotdefexception了。。

还没完,那不是每次都要拷贝一遍脚本任务来做?岂不麻烦?到eclipse的plugin里面找到lomboz的web模板修改对应的文件即可。plugins\com.objectlearn.jdt.j2ee_3.0.1\lomboz.jar\com\objectlearn\jdt\j2ee\templates\web下 面的build.properties和build.xml修改即可。到此为止,都完成了,不用每次拷贝了。

参考文章:

1.Script Ant http://layout.blog.com/124611/ Lasse Koskela Accenture Technology Solutions Copyright © 2003 Lasse Koskela.
2.Using javascript with ant http://layout.blog.com/124607/ Diane Holt (holtdl[at]yahoo.com) on 25 Sep 2001
3.ant的帮助文档

没有评论: