25

我遇到过这个问题几次,只是偶然发现了一个(半)可靠的解决方案,所以我想我会在这里发布它以防它帮助其他人,或者如果我忘记它,并询问是否有人知道根本原因是什么以及我的修复工作的原因。

问题 - 我有一个 spring 3 webapp,我想使用 Eclipse 中的 Run on Server 选项在 Tomcat 7 服务器上运行。对于某些项目,这只是工作,但有些项目似乎处于损坏状态,每次服务器启动时我都会找到一个找不到的类:org.springframework.web.servlet.DispatcherServlet。

经过一番调查,我发现项目的 maven 依赖项没有被复制WEB-INF/lib${PROJECT_LOCATION}/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/

我尝试了很多东西,最后才注意到该项目在“问题”面板中有警告:

Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER 
will not be exported or published. Runtime ClassNotFoundExceptions may result.

也许我应该早点注意到这一点。

无论如何,选择它并执行“快速修复”可以解决问题,我可以愉快地运行我的项目。快速修复是:“将关联的原始类路径条目标记为发布/导出依赖项”。

麻烦的是,虽然这可行,但我不知道这意味着什么。完成后,我的项目配置看不到任何明显的变化。我很想知道实际的问题是什么,如果我能避免它再次发生。我还想知道我是否可以自己做一些事情(除了执行快速修复)来修复它,因为我觉得我几乎尝试了其他所有事情。

谢谢你的帮助。

4

4 回答 4

34

查看项目属性下的“部署程序集”部分。此页面的内容指定如何将您的项目组装到正在运行的应用程序中。特别是,您可以在此处控制项目引用的哪些库应与其打包。选择添加 -> Java 构建路径条目。您将能够在现有的构建路径条目中进行选择以包含在程序集中。

您找到的快速修复为您做了同样的事情。如果您对幕后发生的事情感到好奇,请查看快速修复前后的 .classpath 文件。快速修复使用一些程序集信息标记类路径条目。

于 2011-01-24T00:16:02.857 回答
2

检查 .class 文件并替换以下条目

    <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER" />

与以下: -

    <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
      <attributes>
        <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
      </attributes>
    </classpathentry>

它对我有用。

于 2011-09-26T10:45:53.140 回答
1

看来,您必须另外安装Maven Integration for WTP插件。可以在issues.sonatype.org找到它的描述。

于 2011-08-31T08:35:52.000 回答
0

我今天在一个已经工作了很长时间的项目上遇到了这个问题。我尝试了上述所有解决方案,但是(1)我没有在问题面板中看到海报中的警告;(2) 我的部署程序集 Java 构建路径条目没有显示任何其他可部署的内容;(3) org.eclipse.jst.component.dependency 的 .classpath 条目已经存在;(4) 我已经安装了用于 WTP 的 Maven 集成。我终于把我的项目从Tomcat服务器中删除了,然后重新部署,问题就消失了。

于 2018-08-20T20:02:34.943 回答