我在Eclipse 3.7.2中创建了一堆项目。让我们给他们一些名字:
项目A依赖于项目B,因此B位于A的构建路径中。项目W依赖于项目A,因此我在W中添加了A作为部署程序集。
当我从Eclipse中导出WAR时,只有A的JAR文件被添加到WEB-INF / lib。 Eclipse显示以下警告:
不会导出或发布类路径条目/ B.运行 可能会导致ClassNotFoundExceptions。
警告是正确的。我在运行时获得了ClassNotFoundExceptions。当然,Eclipse为警告提供了一个快速修复,即“将关联的原始类路径条目标记为发布/导出依赖项”。但是,这并不能解决我的问题。 B仍未部署W。
我尝试在A中手动添加B作为部署程序集。这包括A.jar中的B.jar,这不是我想要的,我仍然得到ClassNotFoundExceptions。
唯一有效的方法是在W中手动添加B作为部署程序集.Eclipse仍显示上面的警告,但运行时异常消失了。
我是否遗漏了某些东西,或者这是否真的是让这项工作成功的唯一途径?
答案 0 :(得分:4)
为了使Eclipse的“Export / Web / WAR File”工作,您必须使您的项目“b”出现在“Web App Libraries”容器中。
您可以使用项目属性中的Deployment Assembly页面编辑部署配置,并在其中添加项目“b”:
或者,您可以在/w/.settings/org.eclipse.wst.common.component
打开配置文件,并手动添加对项目“b”的引用:
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="w">
<wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<dependent-module archiveName="a.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/a/a">
<dependency-type>uses</dependency-type>
</dependent-module>
<dependent-module archiveName="b.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/b/b">
<dependency-type>uses</dependency-type>
</dependent-module>
<property name="context-root" value="w"/>
<property name="java-output-path" value="/w/build/classes"/>
</wb-module>
</project-modules>
完成后,您将在“Web App Libraries”类路径容器中看到项目“b”,导出到WAR文件也会将b.jar添加到WEB-INF / lib中。