我想将一些小东西更改为我的App引擎后端,但我无法将其上传到Appengine Google Cloud。所以我将appengine sdk的版本更新到版本1.9.21(就像在另一个仍然更新的项目中一样)。
现在我在运行项目时遇到以下错误:
java.lang.NoClassDefFoundError: com/google/api/server/spi/guice/GuiceSystemServiceServletModule
当我部署它时,我总是得到这个错误:
java.lang.NoClassDefFoundError: nl/mynamespace/guice/FDGuiceSystemServiceServletModule
此类应包含在com.google.appengine中:appengine-endpoints:1.9.22 有什么不对?
奇怪的是,我在Guice部分没有任何改变,而在另一个项目中,它的工作方式相同...
FDGuiceServletContextListener.java:
public class FDGuiceServletContextListener extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new FDGuiceSystemServiceServletModule());
}
}
FDGuiceSystemServiceServletModule.java
public class FDGuiceSystemServiceServletModule extends GuiceSystemServiceServletModule {
@Override
protected void configureServlets() {
super.configureServlets();
Set<Class<?>> serviceClasses = new HashSet<>();
serviceClasses.add(DashboardApi.class);
serviceClasses.add(SalesAPI.class);
serviceClasses.add(LeadsApi.class);
serveGuiceSystemServiceServlet("/_ah/spi/*", serviceClasses);
}
}
的web.xml
[..]
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/_ah/spi/*</url-pattern>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>nl.mynamespace.guice.FDGuiceServletContextListener</listener-class>
</listener>
[..]
答案 0 :(得分:0)
抱歉,我是Intellj / Maven构建系统的新手。我不得不从项目结构中删除库 - &gt;文物 - &gt;输出布局 - &gt; WEB-INF \ lib并再次添加它们。
我习惯于Gradle和Android开发,我只需要更改gradle文件。
我仍然不明白为什么必须在2个地方配置,但现在我永远不会忘记这一点。