Eclipse中部署程序集和J2EE模块依赖项之间的区别

使用Eclipse 3.7 Indigo for Java EE Developers时,有一种叫做Deployment Assembly的东西。 我可以在google上找到它并且理解它类似于J2EE模块依赖项 ,在那里我们可以选择jar并且在WAR的情况下它位于EAR文件夹或WEB-INF / lib中。 现在我怀疑的是,

我有一个JavaProject 依赖项 。 我已经通过classpath变量添加了所有依赖的Jars。 现在, Dependencies项目被添加为我的Web Project TestWebProject的依赖 。 Web项目的编译是正确的,但在运行时我得到一个错误,因为没有找到一些jar。 我可以在Dependencies Project的Deployment Assembly中修复这个包含jar,这是一个独立的项目。

问题是,为什么我必须在部署程序集中修复jar,因为,首先,它是一个独立项目,第二个是如果我没有这个部署程序集,怎么能修复它?

我可以在谷歌上找到它,并了解它类似于J2EE模块依赖项

在使用Eclipse 3.5之前,它被称为“J2EE模块依赖项”。 在该版本之后,它被重命名为“部署程序集”。 但是在Java EE Web项目中它实际上是相同的。


问题是,为什么我必须在部署程序集中修复jar,因为它是一个独立的项目

因为这样Eclipse将自动生成项目的JAR文件并放入Web项目部署的/WEB-INF/lib中。 如果不这样做,则在webapp的运行时期间JAR不可用,但仅在编译期间,Eclipse期望您已经构建并将其放置在运行时类路径中的任何其他位置,例如服务器自己的/lib


如果我没有这个部署程序集,怎么能修复它?

手动构建/导出JAR并放入webapp自己的/WEB-INF/lib或服务器自己的/lib 。 然而,“部署组件”配置更容易并且是推荐的方式。

也可以看看:

  • 业务逻辑层在Servlet和JSP中

在组装WAR时,Eclipse无法通过查看构建路径依赖关系来判断它们是否应该捆绑在WAR的WEB-INF / lib目录中,或者它们是否是您希望在服务器类路径上可用的东西。 需要额外的元数据来区分这些情况。

如果您查看问题视图,您应该看到许多警告,如下所示:

“类路径条目[某事物]将不会被导出或发布……”

右键单击这些并选择“快速修复”。 您将看到一个包含可用修复的对话框。 其中一个会说“将关联的类路径条目标记为发布/导出依赖…”。 使用该选项。

以上内容将对您的Java项目的.classpath文件进行略微更改,以标记包含在程序集中的依赖项。 您可以通过导出WAR文件并检查WEB-INF / lib文件夹的内容来测试而不运行。

构建路径 – 直接将jar放在这里,它可用于代码运行时和编译时。

部署程序集 – eclipse期望将此路径下的项目捆绑并在web-inf / lib文件夹中部署为.jar。 因此它可用于编译时和运行时。 如果项目未部署在部署程序集中,则代码仅在编译时可用,eclipse不会捆绑它,并且在运行时依赖项目不可用于代码。