我是靠谱客的博主 聪慧钢笔,最近开发中收集的这篇文章主要介绍Eclipse发布web项目的顺序问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近项目测试的时候,发现一个问题,用ant将几个项目发布,则一切正常。但我使用Eclipse发布后,程序在某处时间显示有问题。排查到最后,终于发现,原来是jar包的问题。使用ant发布的时候,两个插件包中的jar包,新jar包覆盖掉了旧jar包。但我用Eclipse发布的时候,只是简单的将项目加到了发布路径下,却没注意插件包发布的顺序,因此旧的jar包覆盖掉了新的jar包,所以导致显示一直有问题。

这两天抽空研究了一下Eclipse的web项目发布。

网上搜了好久,可并没有找到太多了关于Eclipse对于web项目发布顺序的文章。自己只能一遍遍的动手测试。

Eclipse版本是luna4.4.1

总结出来的结论是:

众所周知,Eclipse在发布web项目的时候,其实是读取org.eclipse.wst.common.component 这个配置文件的wb-module节点,然后依次部署。

但他部署时有一定顺序的,优先部署wb-module 节点中的wb-resource(即当前项目的资源文件,使用Eclipse的folder  linked到的硬盘的资源,也放在该节点下,当做当前项目的资源)节点,然后再行部署dependent-module(即对应的插件包)节点下的内容。

猜测一:在部署当前项目的资源的时候,据我的测试,Eclipse先是自上而下扫描wb-resource节点,分别取出其中的“deploy-path” 属性(即发布的最终位置),具有相同“deploy-path”属性的节点归为一组,然后依次读取这些节点中的“source-path”属性(即原始文件位置),然后将这些属性值一一取出,然后压入一个类似“栈”的集合(先进后出)。解析完成后,当前发布的概况变为:org.eclipse.wst.common.component  这个配置文件中的 “wb-module” 节点中所有“deploy-path”相同的节点被一一准备好,这些节点在配置文件中的顺序是自上而下的,但是由于被放入了 “栈” 则当Eclipse执行部署的时候,具有相同 “deploy-path” 属性的节点对应的资源文件被从栈中取出,自下而上的扫描,然后发布到tomcat的发布路径下。

猜测二:部署完 wb-resource 节点后,Eclipse再去扫描 dependent-module 节点,这些节点对应的是一个个的插件包项目,这些插件包项目最终被打为jar包发布到tomcat的路径之下,而这些项目中所使用到的jar包也将一并被发布到tomcat的WEB-INF/lib 下。 此时,可这样理解:dependent-module节点也被压入一个集合,不过这个集合类似于“队列”(先进先出)。dependent-module 节点全部扫描完成后,Eclipse再去解析这个队列,然后从中取出每个插件包对应的第三方jar包, 放入到tomcat的发布目录下。这时候, org.eclipse.wst.common.component这个配置文件中的dependent-module  就会被按照文件中的顺序自上而下被发布了,即下面的节点对应的jar包将覆盖上面节点对应的jar包了。


理论如上,需要有项目测试一下。

新建五个项目。分别是:一个web项目。四个普通java项目。这四个普通java项目中,两个是需要link到web项目的,另外两个用作插件包使用。

先测试猜测一的想法。

新建三个项目,一个web项目:test。两个普通java项目:lib_plug和lib_plug1。

在这两个java项目中,分别新建文件夹 jsp和WEB-INF/lib ,在这两个文件夹下,放置test.txt和sqljdbc4.jar包,但是对应的内容不同。

lib_plug的test.txt的内容是lib。sqljdbc4.jar里面,新建一个文件夹,名称为:libfrom

 

lib_plug1的test.txt的内容是lib1。sqljdbc4.jar里面,新建一个文件夹,名称为:lib1from

  

然后将两个java项目link到这个web项目。

        



然后设置test项目,使之发布另外两个java项目。

完成后结果如下:



我一般是先在这里add好,然后再去配置文件修改其对应顺序。这里的显示只是按照字母顺序排列的,和配置文件里面的顺序毫无关联。配置文件的顺序和add的相关顺序有关。

然后修改配置文件。



按照猜测一的说法,最终发布的结果应该是,test项目下,有个名为“jsp”的文件夹,里面应该有一个test.txt,这里面应该是 /lib_plug1/jsp的内容,即lib1,同时WEB-INF下面应该有一个lib的文件夹,里面只有一个sqljdbc4.jar的jar包,里面对应的文件夹应该是 lib1from

执行clean。结果如下:



正确。

然后将配置文件中,上下的节点交换位置:即变成如下样式:



推理结果应为: test.txt文件内容为lib,jar包对应的应该是libfrom

执行clean。检查,结果如下:



结果如预期。


验证第二个猜测:

在之前的基础上,在新建两个普通java项目:test_plug和test_plug1

这两个项目分别引入一个第三方jar包,即sqljdbc4.jar,内部分别建一个文件夹。 取名为:plugfrom 和plug1from

然后将这两个项目,当做test这个web项目的插件包发过去。最终配置为:



从这幅图可以清晰的看到,两个项目所引用的第三方jar包,其实最终是被发送到tomcat对应项目的WEB-INF/lib下面的。


配置文件最终如图:



首先验证猜测二,为了不和猜测一产生异议,我先将web-resource这个节点的配置到/WEB-INF的这段删掉。这样的话,发布目录的lib下的jar包,一定是我这两个插件项目的jar的某一个。于是:配置文件变成:



预期结果应是,/jsp文件夹下,的test.txt的内容应该是lib ,而lib下的sqljdbc4.jar的文件夹的名字应该是plug1from

clean, 查看:



验证无误。

将两个节点的顺序交换,配置文件变为:



预期结果应该是,/jsp下的test.txt为lib ,lib下的sqljdbc4.jar 的文件夹应是plugfrom

clean 查看。



至此,猜测二也验证完毕。

再去验证,dependent-module 的发布顺序在wb-resource 之后。

修改配置文件,如下:



如猜测属实,则最终在lib下的jar包应该是test_plug1的jar包,即其文件夹应该是:plug1from

clean 查看:



结果如预期。


最后

以上就是聪慧钢笔为你收集整理的Eclipse发布web项目的顺序问题的全部内容,希望文章能够帮你解决Eclipse发布web项目的顺序问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部