我开发了这个小应用程序并在Jetty上运行它没有问题...
Bug.groovy:
package itsafeature
class Bug {
String name
String description
Priority priority
Project project
static belongsTo = Project
static constraints = {
name(size:10..150)
description(size:25..1500)
project(nullable:false)
priority(nullable:false)
}
String toString() {
return "${priority}:${name}"
}
}
enum Priority {HIGH(5), MEDIUM(3),LOW(1)
private Priority(int val){
value = val
}
private final int value
int value() {
value
}
}
当我使用Netbeans直接部署到它的Grails Jetty Server时,这完全符合您的预期。优先级以字符串形式写入我的数据库,它可以实现我的目的。
但是,如果我接受项目并执行“构建”,它会创建应用程序的“生产”版本(我的数据源文件对于所有版本都是相同的),并且我将它放在我的“webapps”文件夹中本地tomcat服务器,我看到以下stacktrace:
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 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.ExceptionInInitializerError
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
... SNIP! ...
Caused by: java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
Caused by: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: Priority(java.lang.String, java.lang.Integer)
at Priority.<clinit>(Priority.groovy:10)
... 2 more
我应该考虑什么来缩小这个问题?我在Windows上只安装了一个groovy,GROOVY_HOME指向了这个,与GRAILS相同。 Jetty是否拥有自己的运行时版本?或者这真的是应用程序服务器问题吗?
有一个grails命令说“tomcat”,不确定这是否与此有关,但我没有使用它
答案 0 :(得分:1)
将enum移动到src / groovy中的自己的文件中(在相同的包或其他包中,但它不能在默认包中,并且可以由包中的域类访问)。
btw - Grails不需要Groovy或GROOVY_HOME - 它附带了Groovy jar的版本,可以在你的战争中使用它。