2

当我使用 tomcat 2.2.0 构建 grails 2.1.0 应用程序时,我在 Tomcat 7 上部署时在启动时收到以下错误:

信息:validateJarFile(/app/app/webapps/ROOT/WEB-INF/lib/tomcat-embed-core-7.0.27.jar) - jar 未加载。请参阅 Servlet 规范 2.3,第 9.7.2 节。违规类:javax/servlet/Servlet.class 2012 年 12 月 1 日下午 4:01:01 org.apache.catalina.core.NamingContextListenerlifecycleEvent 严重:创建命名上下文失败:javax.naming.NamingException:上下文是只读的

java.lang.NoClassDefFoundError: org/apache/tomcat/PeriodicEventListener at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader .java:142) 在 org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818) 在 org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159) 在 org.apache.catalina。 loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) 在 org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1128)在 org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)

如果我删除爆炸战争中的 tomcat-* jar 文件,应用程序启动没有问题,或者如果我删除了 tomcat 插件,应用程序启动没有问题。理想情况下,我想在没有插件的情况下构建应用程序,但出于开发目的。这可能吗?

4

1 回答 1

3

对于初学者,请使用与您正在使用的 Grails 版本相对应的 Tomcat 插件版本。run-app真正的问题是插件应该只在和脚本的开发中可用run-war,但不应该最终出现在war脚本创建的 WAR 文件中。如果您在 application.properties 中有插件,请将其删除(以及那里的任何其他插件)。这会将插件置于compile范围内,并将导致它位于 WAR 文件中。

使用插件的正确方法是在以下部分添加build范围依赖:pluginsBuildConfig.groovy

plugins {
   runtime ":hibernate:$grailsVersion"
   build ":tomcat:$grailsVersion"
}
于 2012-12-04T05:12:14.763 回答