Eclipse:错误启动静态资源java.lang.IllegalArgumentException

时间:2010-12-14 10:52:13

标签: java eclipse tomcat spring-mvc

我的Eclipse IDE中有一个名为myproject2的项目。我有一个Tomcat应用程序服务器,我可以在那里添加资源myproject2(它是一个Spring MVC项目)。

现在我关闭了Eclipse中的myproject2,从Tomcat资源中删除了myproject2并使用projectname:myproject3进行了新的Subversion结帐。

重新启动IDE我想将myproject3设置为Tomcat服务器,因此应该部署它。但所有可用的是myproject2可供选择。所以我选择它。我可以访问http://localhost:8080/myproject2/但我收到此警告并在控制台中提供:

14.12.2010 11:43:11 org.apache.catalina.startup.HostConfig deployDescriptor
WARNING: A docBase C:\Spring\apache-tomcat-6.0.29-windows-x86\apache-tomcat-6.0.29\webapps\myproject2 inside the host appBase has been specified, and will be ignored
14.12.2010 11:43:11 org.apache.catalina.core.StandardContext resourcesStart
SERVE: Error starting static Resources
java.lang.IllegalArgumentException: Document base C:\Spring\apache-tomcat-6.0.29-windows-x86\apache-tomcat-6.0.29\webapps\myproject3 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:4249)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4418)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
14.12.2010 11:43:11 org.apache.catalina.core.StandardContext start
SERVE: Error in resourceStart()
14.12.2010 11:43:11 org.apache.catalina.core.StandardContext start
SERVE: Error getConfigured
14.12.2010 11:43:11 org.apache.catalina.core.StandardContext start
SERVE: Context [/myproject3] startup failed due to previous errors
14.12.2010 11:43:11 org.apache.catalina.core.StandardContext stop
INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/myproject3] has not been started

那么这里有什么问题?为什么我没有myproject3来选择应该在Tomcat中部署什么?

有人知道吗?

最诚挚的问候。


更新

.project(myproject2)

<projectDescription>
    <name>myproject</name>
    <comment>My-Project. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
    <projects/>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>

.project(myproject3)

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

12 个答案:

答案 0 :(得分:1)

您是使用Eclipse WTP和Tomcat服务器集成来部署您的应用程序,还是您正在创建WAR并将其部署到Tomcat?

如果您正在使用集成,则可以尝试创建WAR并自行部署它,然后查看会发生什么。发布更新 - 我会跟进。


我再次阅读了您原来的问题。也许问题在于您创建myproject3的方式。我怀疑Eclipse没有必要的项目性质来部署到服务器。 (“项目性质”是一个Eclipse概念;一个项目可以有几个; Eclipse的不同部分检查项目性质以确定它们可以作用的项目。)你说你从Subversion检查了代码并在一个项目中创建了项目步。这并不一定能创造出合适的项目类型。 Eclipse的J2EE部署机制只允许您部署具有特定项目性质的项目 - 我认为它是“eclipse.common.project.facet.core.nature”。此外,您的项目需要某些Eclipse构建器才能生效;我认为“org.eclipse.wst.common.project.facet.core.builder”就是其中之一。

项目根目录下的.project文件是配置自然和构建器的位置。您应该检查两个项目中的那些文件。

问:在Eclipse工作区中,myproject2 / .project和myproject3 / .project是否有明显不同(名称除外)?在这里发布差异。

问:SVN中的myproject2是否包含.project文件?

回答这些问题应该告诉你更多。您可能需要仔细检查一步中检出和创建项目的不同选项。

答案 1 :(得分:1)

我认为 Ladlestein 肯定是在正确的轨道上,但我可以通过我能够重现它的方式为这个问题添加更多的上下文:

我有一个类似的Eclipse(Indigo)设置,我有一个Maven项目,并使用Eclipse WTP功能部署到嵌入式Tomcat 7服务器。如果我从Eclipse中将项目作为Maven项目导入,那么一切正常,但是当我从命令行执行mvn eclipse:cleanmvn eclipse:eclipse时出现问题。这当然会重建Eclipse .project文件,但没有一些显然重要的 Natures buildCommands

我观察到一个.project文件非常类似于问题中的错误文件(在myproject2中),在Eclipse本身中,项目不再是Eclipse所谓的动态Web模块&#34; - 因此无法部署 - 也不再是Maven项目。我能够解决这个问题如下:

首先通过在.project文件中添加以下内容使其成为Maven项目(我不知道Eclipse本身是否有更好的方法):

<buildSpec>
    ...
    ...
    <buildCommand>
        <name>org.eclipse.m2e.core.maven2Builder</name>
    </buildCommand>
</buildSpec>

<natures>
    ...
    ...
    <nature>org.eclipse.m2e.core.maven2Nature</nature> 
</natures>

现在,您可以通过右键单击项目并运行Maven > Update Project Configuration...来确保项目是最新的。

接下来,您可以通过Properties > Project Facets > Dynamic Web Module(复选框)使项目可部署。这是一个更complete set of instructions for making your project a Dynamic Web Module

最后,您的.project文件应该更像这样:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>project1</name>
    <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.wst.common.project.facet.core.builder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.wst.validation.validationbuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
        <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
    </natures>
</projectDescription>

答案 2 :(得分:1)

这是因为项目在使用该服务器之前运行或者是使用该服务器配置的。因此,它的路径存储在tomcat目录中的文件夹中。

在你的tomcat文件夹中,转到conf \ Catalina \ localhost \

在此文件夹中,删除与项目对应的xml文件。

或者,删除服务器并重新添加。

答案 3 :(得分:0)

我搜索了几天,但我找不到解决方案。所以我重新安装了一切,并从一个新项目中进行了设置。

答案 4 :(得分:0)

我有类似的问题(使用eclipse&amp; tomcat7&amp; WTP)&amp;我通过手动编辑eclipse_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmpX\server.xml来解决它,其中tmpX是缓存项目发布设置的临时文件夹。

答案 5 :(得分:0)

只有创建新项目才能解决此问题。

答案 6 :(得分:0)

我遇到了类似的问题(使用eclipse&amp; tomcat7&amp; WTP)。 通过删除(注释掉)以下行来解决它 %CATALINA_HOME%/ CONF / server.xml中

上下文docBase =“[CATALINA_HOME] \ webapps \\ ROOT”path =“”reloadable =“false”/&gt;

答案 7 :(得分:0)

解决我的问题。我只是从另一个可运行的Web项目中复制.project文件并修改项目名称属性

答案 8 :(得分:0)

我遇到了同样的问题。在我的服务器概述中(在服务器选项卡中双击服务器),我必须将部署路径设置为“MY_SERVER_PATH \ webapps”。希望它有用。

谢谢: - )

答案 9 :(得分:0)

从IDE中删除服务器实例并将其添加回来解决了我的问题。

答案 10 :(得分:0)

在我的情况下,我做了以下两个步骤,错误就消失了:

1 - 右键点击项目&gt;属性&gt;项目方面&gt;运行 我删除了Web服务器然后应用。再添加它然后应用

2 - 重新启动IDE

尴尬地为我工作。

答案 11 :(得分:-1)

问题已解决!! 只需删除您的服务器实例,然后从新服务器开始。