2013-09-09 2 views
2

Я пытаюсь развернуть приложение grails-app (2.2.4) в JBoss AS 7.1.1.Quartz-Job in grails не работает при развертывании в JBoss 7

Я построил свой файл войны через grails war, скопировал его в каталог автономно/развертывания и запустил JBoss с bin/standalone.bat.

До сих пор все хорошо работает, сайт доступен в браузере. Но одна часть приложения - это кварцевое задание, которое должно загружать файл с FTP-сервера.

Он начинает регулярно, как и ожидалось, но это не удается из-за ошибки:

ERROR [grails.plugins.quartz.listeners.ExceptionPrinterJobListener] (quartzScheduler_Worker-6) Exception occurred in job: null: org.quartz.JobExecutionException: java.lang.NoClassDefFoundError: org/apache/tools/ant/BuildLogger [See nested exception: java.lang.NoClassDefFoundError: org/apache/tools/ant/BuildLogger] 
    at grails.plugins.quartz.GrailsJobFactory$GrailsJob.execute(GrailsJobFactory.java:96) [classes:] 
    at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [quartz-2.1.5.jar:] 
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) [quartz-2.1.5.jar:] 
Caused by: java.lang.NoClassDefFoundError: org/apache/tools/ant/BuildLogger 
    at java.lang.Class.getDeclaredConstructors0(Native Method) [rt.jar:1.7.0_03] 
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404) [rt.jar:1.7.0_03] 
    at java.lang.Class.getDeclaredConstructors(Class.java:1853) [rt.jar:1.7.0_03] 
    at org.codehaus.groovy.reflection.CachedClass$2$1.run(CachedClass.java:69) [groovy-all-2.0.8.jar:2.0.8] 
    at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.7.0_03] 
    at org.codehaus.groovy.reflection.CachedClass$2.initValue(CachedClass.java:66) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.reflection.CachedClass$2.initValue(CachedClass.java:64) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.reflection.CachedClass.getConstructors(CachedClass.java:258) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.MetaClassImpl.<init>(MetaClassImpl.java:187) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.ExpandoMetaClass.<init>(ExpandoMetaClass.java:297) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.ExpandoMetaClass.<init>(ExpandoMetaClass.java:340) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.ExpandoMetaClassCreationHandle.createNormalMetaClass(ExpandoMetaClassCreationHandle.java:46) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createWithCustomLookup(MetaClassRegistry.java:147) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.MetaClassRegistry$MetaClassCreationHandle.create(MetaClassRegistry.java:130) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:175) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:192) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:309) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:806) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallConstructorSite(CallSiteArray.java:84) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:182) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:186) [groovy-all-2.0.8.jar:2.0.8] 
    at projectname.MessungImportJob$_ftpFileRetrieval_closure1.doCall(MessungImportJob.groovy:183) [classes:] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_03] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_03] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_03] 
    at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_03] 
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1082) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1106) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:906) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.Closure.call(Closure.java:412) [groovy-all-2.0.8.jar:2.0.8] 
    at groovy.lang.Closure.call(Closure.java:425) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1326) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1298) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.dgm$148.invoke(Unknown Source) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) [groovy-all-2.0.8.jar:2.0.8] 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) [groovy-all-2.0.8.jar:2.0.8] 
    at projectname.MessungImportJob.ftpFileRetrieval(MessungImportJob.groovy:115) [classes:] 
    at projectname.MessungImportJob$ftpFileRetrieval.callCurrent(Unknown Source) 
    at projectname.MessungImportJob.execute(MessungImportJob.groovy:77) [classes:] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_03] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_03] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_03] 
    at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_03] 
    at grails.plugins.quartz.GrailsJobFactory$GrailsJob.execute(GrailsJobFactory.java:89) [classes:] 
    ... 2 more 
Caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.BuildLogger from [Module "deployment.projectname-0.1.war:main" from Service Module Loader] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) 
    ... 54 more 

Я полагаю, что это довольно элементарное Java-вопрос, но все же: Должен ли я включить этот org.apache.tools .ant-library где-нибудь? Должен ли я «перечислить» его где-нибудь в grails-configs? Или я пропущу что-то совсем другое?

Запуск в режиме разработки (grails run-app) отлично работает.

Спасибо за ваши предложения, Marius

+1

Какая помощь? http://grails.1312388.n4.nabble.com/Tomcat7-deployment-InvokerInvocationException-NoClassDefFoundError-for-BuildLogger-td4640697.html –

+0

Я пробовал некоторые способы включить этот пакет ('compile ": org.apache.ant: ant : 1.9.2 «как плагины или как зависимости в BuildConfig.groovy), но это не помогло, ошибка остается. При компиляции также появляется сообщение: «Ошибка ПРЕДУПРЕЖДЕНИЕ: Определенное определение определения зависимостей (: org.apache.ant: ant: 1.9.2) недействительно! Skipping .. ' – Marius

+0

После этого вы пытались запустить 'grails refresh-dependencies'? –

ответ

2

Я нашел причину и решение на этом сайте: http://grails.org/plugin/grails-ant

Даже если муравей является частью ядра Grails, так как это в первую очередь инструмент для сборки, он не включен в военном файле Grails (1). И вы можете сделать это в своем собственном приложении без этого плагина, добавив ant к вашему build.config.

dependencies { 
    // Workarounds for Grails not shipping ant in WAR 
    compile 'org.apache.ant:ant:1.7.1' //you can also use runtime 
    compile 'org.apache.ant:ant-launcher:1.7.1' 
} 

я изменил версии на самых последних из here и JBoss запускает его.

Благодаря tim_yates для первого намека.