使用Eclipse 3.7 Indigo for Java EE Developers时,有一种叫做部署程序集的东西。我可以在google上找到它并且明白它类似于 J2EE模块依赖项在哪里我们可以选择jar并且在WAR的情况下它位于EAR文件夹或WEB-INF / lib中。现在我怀疑的是,
我有一个JavaProject 依赖关系。我已经通过 classpath 变量添加了所有依赖的Jars。现在,依赖项项目作为依赖项添加到我的Web项目 TestWebProject 。 Web项目的编译是正确的,但在运行时我得到一个错误,因为找不到一些jar。我可以在依赖项项目的部署程序集中修复这个包含jar,这是一个独立的项目。
问题是,为什么我必须在部署程序集中修复jar,因为,首先,它是一个独立的项目,第二个是如果我没有这个部署程序集,那怎么能修复它?
答案 0 :(得分:16)
我可以在google上找到它,并且知道它类似于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
。然而,“部署组件”配置更容易,也是推荐的方式。
答案 1 :(得分:5)
在组装WAR时,Eclipse无法通过查看构建路径依赖关系来判断它们是否应该捆绑在WAR的WEB-INF / lib目录中,或者它们是否是您希望在服务器类路径上可用的东西。需要额外的元数据来区分这些情况。
如果您查看问题视图,您应该会看到许多类似的警告:
“Classpath entry [something]将不会被导出或发布......”
右键单击这些并选择“快速修复”。您将看到一个包含可用修复的对话框。其中一个会说“将相关的类路径条目标记为发布/导出依赖...”。使用该选项。
以上内容将对您的Java项目的.classpath文件进行轻微更改,以标记包含在程序集中的依赖项。您可以通过导出WAR文件并检查WEB-INF / lib文件夹的内容来测试而不运行。
答案 2 :(得分:1)
构建路径 - 直接将jar放在这里,它可用于代码运行时和编译时。
部署程序集 - eclipse期望将此路径下的项目捆绑并在web-inf / lib文件夹中部署为.jar。因此它可用于编译时和运行时。如果项目未部署在部署程序集中,则代码仅在编译时可用,eclipse不会捆绑它,并且在运行时依赖项目不可用于代码。