2013-12-23 102 views
0

我可以在STS中構建war文件,但我無法部署! Grails版本2.1.1。我已經跑了乾淨,更新,編譯,運行應用程序(運行正常),升級Java,更改了db-drivers(postgresql:postgresql:9.3-1100.jdbc41),刪除了測試從源路徑,將grails.servlet.version更改爲3.0,僅舉幾例。無法在Tomcat上運行Grails war-file

我的設置目前很漂亮,所以沒有神祕的插件。

當我嘗試使用Tomcat部署或運行​​grails run-war我得到以下錯誤:

Dec 23, 2013 11:39:10 PM org.apache.catalina.core.ApplicationContext log 
INFO: No Spring WebApplicationInitializer types detected on classpath 
Dec 23, 2013 11:39:12 PM org.apache.catalina.core.ApplicationContext log 
INFO: Initializing Spring root WebApplicationContext 
Dec 23, 2013 11:39:17 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Exception sending context initialized event to listener instance of class    org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name  'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]:  Invocation of init method failed; nested exception is java.lang.RuntimeException: Unable to  locate constructor with Class parameter for class  org.codehaus.groovy.grails.commons.DefaultGrailsControllerClass at  com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.RuntimeException: Unable to locate constructor with Class parameter for class org.codehaus.groovy.grails.commons.DefaultGrailsControllerClass 
... 5 more 
Caused by: java.lang.reflect.InvocationTargetException 
... 5 more 
Caused by: java.lang.NoClassDefFoundError: Lgrails/test/mixin/domain/DomainClassUnitTestMixin; 
at java.lang.Class.privateGetDeclaredFields(Class.java:2397) 
at java.lang.Class.getDeclaredFields(Class.java:1806) 
... 5 more 
Caused by: java.lang.ClassNotFoundException: grails.test.mixin.domain.DomainClassUnitTestMixin 
... 7 more 
+1

看看下面的堆棧:http://stackoverflow.com/questions/19410995/groovy-grails-tool-suite-noclassdeffounderror-on-war-deployment。看起來這是一個STS的bug,不包括他們所在的DomainClassUnitTest mixins/jar文件。希望有幫助。 – bschipp

+0

我看到那篇文章,試了一下......沒有骰子! – marko

+0

這是令人討厭的,是否有可能根本升級grails並查看是否可以修復它?我想這也可能是一個想法,可以刪除已創建的單元測試,如果你想看看它是否只是混搭破壞你的構建。 – bschipp

回答

1

爲了記錄在案。

我做什麼副本:

grails-plugin-testing-2.1.1.jar 
grails-test-2.1.1.jar 
grails-test-suite-base-2.1.1.jar 

福雷斯特/ lib和這對我的Config.groovy中(可在GRAILS_HOME/DIST中找到):

grails.war.dependencies = [ 
    "grails-plugin-testing-2.1.1.jar", 
    "grails-test-2.1.1.jar", 
    "grails-test-suite-base-2.1.1.jar" 
] 

後我做了清理,編譯和運行。

我的印象是test/prod保持分開,因爲我不希望我的war文件包含與測試相關的任何內容。

0

如果你真的需要測試.war,但我認爲你的grails run-app命令執行成功並且應用程序正在運行。是不是?如果是!!我建議你做到以下幾點:

我建議也是上面的錯誤是一個配置問題的Grails和tomcat上STS環境它的自我......在我看來......所以,

1. Install `Tomcat 6` Outside for Testing the `.war` after generating using grails console and the command below 

2. Instead of running the war directly from the grails console try to generate a Test ,Development or a production environment `.war` package as follow . 

NB你需要有環境部署專用設置下的Grails conf文件夾中的文件config.groovy ..

繼續...

grails -Dgrails.env=development war 

,或者簡單

grails deve war //here deve is referring to development environment u can do same for test and prod... 

So.After你已經成功地完成了上述步驟...現在是時候爲你收集你的晶粒成jar ......於是找到產生戰爭的地方它位於created grails application foldertargets文件夾下。

所以,在那之後startmanuallyautomatically開始TOmcat6/7 .goto webapps服務器並複製上面生成的包......首先停止Running Tomcat Server if any! ....乾杯!

+0

感謝您的跟進!有人會希望找到這個非常有用的(我也是這樣做的!),但我沒有陷入這個問題,我設法讓它工作。 – marko