繁体   English   中英

ClassCastException:com.google.appengine.tools.development.ApiProxyLocalImpl无法强制转换为com.google.appengine.tools.development.ApiProxyLocal

[英]ClassCastException:com.google.appengine.tools.development.ApiProxyLocalImpl cannot be cast to com.google.appengine.tools.development.ApiProxyLocal

我是开发maven应用程序并部署到谷歌应用程序引擎的新手。 我正在使用appengine 1.9.0eclipse kepler 4.3

然而,当我尝试运行时,我得到一个错误,根据这个博客克里斯,它建议删除这个jar。

appengine-api-labs 
appengine-api-stubs 
appengine-testing

我已经在库中删除它并尝试maven清理但仍然出现错误。 下面是我的图书馆。

图书馆

以下是完整的控制台错误:

WARNING: failed _ah_ServeBlobFilter: java.lang.ClassCastException: com.google.appengine.tools.development.ApiProxyLocalImpl cannot be cast to com.google.appengine.tools.development.ApiProxyLocal
3 20, 2014 2:34:57 午前 com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: Failed startup of context com.google.appengine.tools.development.DevAppEngineWebAppContext@87ec13{/,C:\Users\Annette\Desktop\WebCaller\src\main\webapp}
java.lang.ClassCastException: com.google.appengine.tools.development.ApiProxyLocalImpl cannot be cast to com.google.appengine.tools.development.ApiProxyLocal
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.init(ServeBlobFilter.java:55)
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.Server.doStart(Server.java:224)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:250)
    at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:305)
    at com.google.appengine.tools.development.AutomaticInstanceHolder.startUp(AutomaticInstanceHolder.java:26)
    at com.google.appengine.tools.development.AbstractModule.startup(AbstractModule.java:79)
    at com.google.appengine.tools.development.Modules.startup(Modules.java:97)
    at com.google.appengine.tools.development.DevAppServerImpl.doStart(DevAppServerImpl.java:255)
    at com.google.appengine.tools.development.DevAppServerImpl.access$000(DevAppServerImpl.java:47)
    at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:213)
    at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:211)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:211)
    at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:277)
    at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
    at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:219)
    at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:210)

任何人都可以指出它吗? 谢谢。

我采取了以下步骤来解决问题:

  1. 删除appengine-api-stubs和appengine-testing
  2. 在Properties和Google> App Engine上,我确保选择默认的“App Engine - 1.9.1”
  3. 在属性构建路径上,我删除了与GAE v1.9.1相关的所有JAR,而是从“添加库”中添加了GAE库

令人惊讶的是,虽然我的WEB-INF / lib上有appengine-api-labs,但我的localhost部署工作正常。

最后,我的WEB-INF / lib包含以下内容:

  • AppEngine上,agent.jar中
  • AppEngine上,agentimpl.jar
  • 应用服务引擎的API-1.0-SDK-1.9.1.jar
  • AppEngine上-API实验室-1.9.1.jar
  • AppEngine上-API labs.jar
  • AppEngine上的端点,deps.jar
  • AppEngine上,endpoints.jar
  • AppEngine上-jsr107cache-1.9.1.jar

我希望有所帮助。 它对我有用,它有可能对你有用。

正确的解决方案是确保您的类路径上只有一个版本的appengine-testing.jar与您的App Engine SDK相对应, 并且您的类路径或/WEB-INF/lib没有appengine-tools-api.jar /WEB-INF/lib文件夹。

如果您符合这些条件,仍然有此错误,从你的classpath 删除的AppEngine-testing.jar /WEB-INF/lib ,如果你拥有了它在那里,然后将其重新添加到您的类路径。

首先,我尝试了安德烈·沃尔金提供的解决方案,但它对我不起作用。 然后我从/WEB-INF/lib 删除了 appengine-api-stubs.jar ,修复了bug。

要恢复,我在/WEB-INF/lib文件夹中 appengine-api-libsappengine-api-testing 而且我对类路径进行了appengine-api测试

添加最新的依赖项并清理构建并再次运行它应该在本地工作。 我可以解决同样的问题。

将以下依赖项添加到pom.xml

<dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-testing</artifactId>
        <version>1.9.64</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-stubs</artifactId>
        <version>1.9.64</version>
        <scope>test</scope>
    </dependency>

有这个确切的问题。 使用maven,我为所有与测试相关的依赖项添加了测试以解决问题。 我认为这只是另一种避免类路径中冲突的jar的方法。

基本上,您需要确保将测试范围添加到要从Target文件夹中删除的jar中。

 <dependency>
      <groupId>com.google.appengine</groupId>
      <artifactId>appengine-testing</artifactId>
      <version>1.9.23</version>
      <scope>test</scope>
</dependency>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM