无法在Eclipse上运行“在服务器上运行”的Web应用程序

时间:2011-07-15 07:43:17

标签: eclipse tomcat6 eclipse-wtp

从Eclipse运行我的WebApp项目时,大多数情况下它都能正常运行。但如果错误地停止服务器,我会在“控制台”视图中将其删除,而不是从“服务器”视图中“停止”服务器。 在运行干净的项目时我得到了这个

java.lang.NullPointerException
at org.eclipse.wst.common.componentcore.internal.util.VirtualReferenceUtilities.getDefaultProjectArchiveName(VirtualReferenceUtilities.java:81)
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getJavaClasspathReferences(J2EEModuleVirtualComponent.java:332)
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getNonManifestRefs(J2EEModuleVirtualComponent.java:236)
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:160)
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:208)
at org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:201)
at org.eclipse.jst.common.internal.modulecore.SingleRootUtil.hasConsumableReferences(SingleRootUtil.java:217)
at org.eclipse.jst.common.internal.modulecore.SingleRootUtil.validateSingleRoot(SingleRootUtil.java:165)
at org.eclipse.jst.common.internal.modulecore.SingleRootUtil.isSingleRoot(SingleRootUtil.java:93)
at org.eclipse.jst.common.internal.modulecore.SingleRootExportParticipant.canOptimize(SingleRootExportParticipant.java:84)
at org.eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.canOptimize(FlatVirtualComponent.java:136)
at org.eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.cacheResources(FlatVirtualComponent.java:118)
at org.eclipse.wst.common.componentcore.internal.flat.FlatVirtualComponent.fetchResources(FlatVirtualComponent.java:101)
at org.eclipse.wst.web.internal.deployables.FlatComponentDeployable.members(FlatComponentDeployable.java:147)
at org.eclipse.wst.server.core.internal.ModulePublishInfo.hasDelta(ModulePublishInfo.java:418)
at org.eclipse.wst.server.core.internal.ServerPublishInfo.hasDelta(ServerPublishInfo.java:443)
at org.eclipse.wst.server.core.internal.Server.hasPublishedResourceDelta(Server.java:1539)
at org.eclipse.wst.server.core.internal.Server$ResourceChangeJob$1.visit(Server.java:214)
at org.eclipse.wst.server.core.internal.Server.visitModule(Server.java:2929)
at org.eclipse.wst.server.core.internal.Server.visit(Server.java:2913)
at org.eclipse.wst.server.core.internal.Server$ResourceChangeJob.run(Server.java:225)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

在启动时我得到了这个

SEVERE: Error starting static Resources
java.lang.IllegalArgumentException: Document base D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Webapp does not exist or is not a readable directory
    at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142)
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4319)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)

请帮助从中恢复。

15 个答案:

答案 0 :(得分:39)

我很难让它工作,但感谢“Alexander Pogrebnyak”(见deploying a war file in WTP(Eclipse) tomcat server)我能够通过m2e使Eclipse Web Projects与Maven一起工作:

在开始之前,我必须说我是一个非常可疑的人,所以我总是首先使用“Eclipse> Project> Clean ...”菜单清理我的所有项目(没有“立即开始构建”选项选中)。我也没有选中“Eclipse> Project> Build Automatically”选项。

顺便说一句,我想你已经安装了你的m2e插件,或者我要说的没有意义......

好吧,让我们开始吧:

首先,再见服务器配置:

1)如果您以前的服务器配置中有任何项目,请将其删除(右键单击服务器并选择“添加和删除”选项)

2)清理服务器工作目录(右键单击服务器并选择“Tomcat Server工作目录”)

3)清理已编译的“剩余物”(右键单击服务器并选择“清除”)

4)从“服务器”选项卡中删除服务器配置

5)完全删除“Servers”项目/文件夹(显示在“Project Explorer”标签中)

6)BONUS:我还删除了我的服务器运行时环境(“Eclipse> Window> Preferences> Server> Runtime Environments”)

其次,“Maven clean”(如果您的网络项目具有“Maven性质”):

1)右键单击您的Web项目

2)“弹出菜单>运行方式> Maven清理”

这应该清除您的目标文件夹

第三,安装m2 WTP集成(是的!它不是“默认”。整整一天来弄清楚):

1)打开Maven“Discovery”选项(Eclipse> Windows> Preferences> Maven> Discovery)

2)按“打开目录”按钮(应显示“m2e市场”窗口)

3)向下滚动,直到找到“WTP Integration”选项,然后“检查”它!

4)按“完成”

5)将出现“类似插件屏幕”。 “下一步”,“下一步”,“同意”,等等,等等,等等...

第四,离开Eclipse而不是再次运行它:

1)如果没有要求重新安排Eclipse(我很难相信你不会),请自行重启!

第五,maven reintegration:

1)将Maven性质添加到项目中(右键单击您的Web项目,“弹出菜单>配置>转换为Maven项目”)

2)更新你的maven配置(是的,是的,可疑,我知道)。再次右键单击您的Web项目,现在图标上显示“M”(“弹出菜单> Maven>更新项目”)

3)运行maven安装(右键单击您的Web项目,“弹出菜单>运行方式> Maven安装”)

4)构建项目(“Eclipse> Project> Build All”)

第六,全力以赴:

1)部署并运行您的Web应用程序(右键单击您的Web项目,“弹出菜单>运行方式>在服务器上运行”)

2)系统将要求您创建另一个服务器配置。它将再次创建“Servers”项目/文件夹,但就是这样。

就是这样!我必须承认,一旦我运行服务器,它就无法工作,但这一次(我不知道为什么)找不到“Log4J”库。在一个“项目清理”+“maven清理”和一个“maven安装”+“项目构建”之后,另一条消息指出我的Servlet类无法找到。再一次,我执行了“项目清洁”+“maven clean”和“maven安装”+“项目构建”和“瞧”!它奏效了(这就是为什么我如此怀疑)。

我开始担心这款全新的Juno + m2e双倍......从未遇到过Indigo或Ganymede的这类问题......但我想我可以再次信任Eclipse(可以吗?)

答案 1 :(得分:7)

不要做那些疯狂的宇宙变通办法!!

这很好用:

将这些行添加到“.project”文件(隐藏):

 <natures>
    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>org.eclipse.m2e.core.maven2Nature</nature>
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
    <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
  </natures>

享受!

为什么呢?如果你检查那个不存在的目录,那么"../.metadata/blah/blah/tmp0/wtpwebapps/YOURPROJECT/"是EMPTY:那么你的构建不会创建WAR ... !!! 因为maven插件不理解他有!

我在比较两个不同部署/非部署项目的两个.project文件后发现了这个......

希望有所帮助!

答案 2 :(得分:3)

我删除了“问题文件夹”.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \并且现在可以使用了:)

答案 3 :(得分:3)

我有完全相同的问题和确切的异常,但我只是通过指定POM的包类型来解决问题,如“war”,右键单击项目并选择'Maven&gt;更新项目配置',然后将该Web模块重新部署到tomcat服务器,就是这样!

答案 4 :(得分:1)

只做maven - &gt;从Eclipse中更新项目配置和清理/构建。项目将被加载。

答案 5 :(得分:1)

我遇到了这个问题,但原因不同了。 问题源于wrong server name([Project Name] != [Server Name])。 我认为我可以通过重新创建服务器找出答案。

此问题可通过以下步骤解决:

  1. 删除服务器:右键单击[Severs]并删除服务器。
  2. 删除服务器:右键单击[Project Explorer]并删除服务器(您创建的)。
  3. 清洁项目:菜单[Project -> Clean]
  4. 创建服务器:右键单击[Severs]和新服务器。
  5. 编辑server.xml:编辑您的Web服务器server.xml
  6. 添加服务器:右键单击[Severs]并删除服务器。

答案 6 :(得分:1)

我对这个问题感到非常困惑,因为在问题发生之前我还有另一个jar依赖。我正在使用已经有m2e集成的Eclipse Luna,上述解决方案都没有为我工作。

在为maven war项目添加新的jar依赖项时问题就开始了,但是当它在pom中被注释掉时它仍然运行良好。 幸运的是,我能够比较两个项目,最终问题与新jar项目中缺少的项目方面有关:实用程序模块。

  1. 项目上的右键:Project Facets
  2. 选中“效用模块”并保存
  3. 从tomcat中删除该应用程序并再次发布。

答案 7 :(得分:0)

检查Tomcat doc文档库xyz不存在或不是可读目录:

  

文档库不存在或不是可读目录URL   war参数指定的必须在此标识一个目录   包含Web应用程序的“解压缩”版本的服务器,或   包含的Web应用程序归档(WAR)文件的绝对URL   这个应用程序。更正war参数指定的值。

在干净的项目完成后,您可以手动执行“清理...”然后“发布”(从“服务器”视图中的Tomcat上下文菜单)吗?

答案 8 :(得分:0)

我已停止使用此方法运行我的webapp。 我改用mvn tomcat:run。更容易。虽然我不知道如何调试。

答案 9 :(得分:0)

此问题可能是由于您的本地项目与代码存储库不同步而导致的。 我建议刷新/同步你的项目。

答案 10 :(得分:0)

我遇到了同样的问题,清理和重新创建服务器没有帮助。但是当我部署另一个项目时,它能够成功启动。经过多次比较,我发现.project文件存在差异。因此,我将工作项目的.project文件的内容复制到有问题的文件中,将其添加回服务器并运行。以下是有效的.project文件的内容。请注意,您需要相应地更改项目名称:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Project Name</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
    <buildCommand>
        <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.eclipse.jdt.core.javabuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.eclipse.wst.common.project.facet.core.builder</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.eclipse.wst.validation.validationbuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
</buildSpec>
<natures>
    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>

答案 11 :(得分:0)

一切都没有运气。我的日食中只有一个项目。关闭eclipse,重命名eclipse目录,再次解压缩,在新的日食中重新开始。它奏效了。

不,效率不高。

答案 12 :(得分:0)

我遵循的步骤将100%工作:

  1. 右键单击服务器
  2. 清理服务器和服务器工作目录
  3. 从项目资源管理器窗口中删除服务器文件夹
  4. 从运行时环境中删除服务器,即从Eclipse中删除 - &gt;窗口 - &gt;偏好 - &gt;服务器 - &gt;运行时环境
  5. 关闭日食并重新开始
  6. 再次在服务器上运行文件,重新配置Apache服务器
  7. 问题解决了

答案 13 :(得分:0)

Check this version:

<web-app version="**2.5**" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_**2_5**.xsd" metadata-complete="true">

and 

org.eclipse.wst.common.project.facet.core.xml

<installed facet="jst.web" version="**2.5**"/>

It can be incompatible with the chosen server. In my case when I tried to upgrade 3.0 tomcat 6.0 stopped working so I had to revert back to 2.5


so upgrade your server to a highter version or downgrade the web.xml version and run maven --> update project and try again

答案 14 :(得分:0)

在我的情况下,复制(来自工作项目)就足够了:

  1. .settings
  2. 的.classpath
  3. .projects