2012-12-04 113 views
2

當我建立一個Grails應用程序2.1.0與2.2.0的Tomcat我啓動時獲取以下錯誤,當我部署在Tomcat 7:Grails的戰爭

INFO: validateJarFile(/app/app/webapps/ROOT/WEB-INF/lib/tomcat-embed-core-7.0.27.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class Dec 1, 2012 4:01:01 PM org.apache.catalina.core.NamingContextListener lifecycleEvent SEVERE: Creation of the naming context failed: javax.naming.NamingException: Context is read only

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) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2818) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1128) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)

如果我在爆炸戰中刪除了tomcat- * jar文件,那麼應用程序將毫無問題地啓動,或者如果我刪除了tomcat插件,則應用程序將毫無問題地啓動。 理想情況下,我想構建沒有插件的應用程序,但有發展目的。這可能嗎?

回答

3

對於初學者,請使用與您正在使用的Grails版本相對應的Tomcat插件版本。但真正的問題是插件只能在run-apprun-war腳本的開發中使用,但不應在由war腳本創建的WAR文件中結束。如果在application.properties中有插件,請將其除去(以及其他任何插件)。這將插件放在compile範圍內,並導致它位於WAR文件中。

使用插件的正確方法是添加在BuildConfig.groovyplugins部分中的build範圍依賴性:

plugins { 
    runtime ":hibernate:$grailsVersion" 
    build ":tomcat:$grailsVersion" 
} 
+0

我在2.1.1遇到此問題。沒有插件是在我的application.properties文件和tomcat版本是'$ grailsVersion'。竹子處理我的構建。任何想法爲什麼發生這種情況? –