这个问题是关于Eclipse开发的,我试图在Eclipse中创建一个Web应用程序,问题是我没有将依赖项jar放到已部署的存档中。
我创建了一个新的动态Web项目并将其链接到另一个Java项目。 Java项目引用了一些第三方jar(例如Spring jar),但由于某些原因,在发布Web项目时,我只获得了战争的lib目录中的Java项目jar,没有Java项目依赖项(例如Spring)。
换句话说,我有项目A(Web项目),它依赖于项目B(Java项目),项目B依赖于Spring jar。当我将Web项目作为战争发布到JBoss时,只将项目B打包到jar中(没有弹簧罐)
我知道我可以用ant做到这一点,我甚至有build.xml
来构建整个应用程序,但我认为eclipse也可以为我执行打包任务。
我将Java项目添加到Web项目中的Java EE模块依赖项中。
我应该在Java项目构建路径属性中使用导出选项吗?我是否应该将Java项目的依赖项添加到Web项目中?
我做错了什么?
编辑:我正在使用Eclipse 3.5.1
答案 0 :(得分:49)
答案 1 :(得分:2)
我将Java项目添加到Web项目中的Java EE模块依赖项中。
如果目的是将其他项目的依赖项(读取:JAR文件/项目/等)纳入当前项目的运行时类路径中,则仅那种方式不起作用。您需要将其他项目配置为导出其依赖项。它由构建路径属性中的“订购和导出”选项卡完成。希望这会有所帮助。
答案 2 :(得分:2)
另请注意Eclipse WTP上报告的此错误,即使您正确配置了所有内容,有时也会阻止将依赖项部署到WEB-INF / lib。叹息。
Bug 312897 - Deployment feature doesn't deploy classpath dependencies.
据我了解,要在Eclipse中编译时使用JAR并确保它在appserver中的运行时也可用,您:
如果您需要正在使用的另一个项目所需的JAR,我个人会将它们列为构建路径中的显式依赖项,并将它们添加到导出的模块依赖项中。
但是当我在我的Eclipse项目中找到NoClassDefFound错误的原因时,我偶然发现了这篇文章时,不要接受我的答案......;)
答案 3 :(得分:0)
在部署之前,您应该将Web应用程序打包到WAR文件中。必须有一种方法可以告诉Eclipse您希望将哪些JAR文件放在WEB-INF / lib目录中。如果没有,请编写一个Ant build.xml来为您完成。
您不必修改环境或应用服务器中的任何类路径变量。正确的方法是创建一个合适的WAR文件。
更新:我重新阅读了你的问题:
但由于某些原因,在发布Web项目时,我只获得了JBoss的lib目录中的java项目jar,没有它的依赖jar(例如Spring)。
这是什么意思?你不应该在JBOSS / lib目录中放任何东西。 WAR文件的重点在于它是一个包含所有依赖项的自包含工件。如果您正在尝试将内容写入JBOSS / lib目录,那么您做错了。
WAR文件需要进入您设置的域。无需更改应用服务器。
答案 4 :(得分:0)
如果我理解正确,问题是如果你使用项目A,而项目A又取决于项目B,你不会从项目B获得工件而只能获得A。
问题是您的项目必须在“属性”中列出所需的所有内容 - > Java EE模块依赖项,这是与通常项目导出的单独机制。你可能需要做一些实验。