用MyEclipse部署jboss的jsf应用时对lib的思考
用myeclipse部署jboss的jsf应用时,总是部署不成功。首先是发现web.xml中有一个<rescourcecontext/>,原来在tomcat里配置jndi连接池时用的,现在现在好像要删掉这个标记。然后发现web-inf里的lib文件夹也有问题。上网查一查,原来是包冲突的原因,原来我的lib里有一些j2ee的包例如jsf-api.jar等等,发现这个会引起一个错误,于是把它们删掉,又发现跟hibernate有关的包中有两个是冲突的,于是又把它们删掉。这样就好了,算是暂时部署成功了。可是总觉得不爽,觉得有点莫名其妙,于是开始鼓捣起来。
我们在用myeclipse添加jar的时候有几种办法,一个是addexternaljars,就是添加在你的计算机里的外部jars,或是addlibraries就是添加myeclipse里自带的jars,这样的话比较规范,不容易漏掉一些包,但会增加进一些不必要的包,正是一些不必要的包才使我部署失败。这些jars不会复制到你workspace里面的lib中,大概是ide帮你链接了。其实也对,因为在workspace中的文件又不是真正运行的文件,主要是你的编写代码的环境,所以只要ide能访问到那些类库就行了。
然而在真正部署时,也就是真正要运行在服务器里的文件时,必须保证服务器可以访问那些jars,于是myeclipse会把有关的jars复制到服务器中工程的lib中,而且myeclipse会检查一些包的兼容性,比如我的jsf-api.jar就不会被复制到,因为jboss有这个库。(但是貌似netbeans会把jars复制到tomcat的默认lib中,而tomcat的webapp不会添加文件进去,各个ide处理方式不同)。
我在部署时,为了使用hibernate,就先把myeclipse自带的hibernate相关包复制到我的工程lib中,新建文件夹为hibernate3.0core,把包放进去。然后删掉里面的两个冲突文件(这个myeclipse没有检测到冲突)。再看看你的build-path中是否有关于hibernate的libraries,有就remove,再addexternaljars把刚才的那些jars添进去就行了。这个时候再部署,就成功了。
注:好像myeclipse会把workspace中的lib下的文件统统拷进服务器里,也不检查是否冲突。
一个问题:build-path中的jre的lib服务器是怎么访问的,是访问的计算机里的安装的jre的lib吗?