我使用的是Eclipse、Grails2.4.5和弹簧安全ACL插件。我使用以下命令创建了管理ACL数据的域类:
s2-create-acl-domains在生成这些域之后,Eclipse报告已经定义了类。

错误日志显示:

在我的BuildConfig.groovy中有:
compile ":spring-security-core:2.0-RC5"
runtime ':spring-security-acl:2.0-RC2'是否有一种方法可以解决此问题,而Eclipse并没有显示错误?除了该错误之外,代码运行良好。
编辑:下面是由grails s2-create-acl-domains生成的类。除了AclObjectIdentity objectId类型之外,我没有将任何东西从Long更改为String。
下面是已经生成的类:
AclClass
package grails.plugin.springsecurity.acl
class AclClass {
String className
@Override
String toString() {
"AclClass id $id, className $className"
}
static mapping = {
className column: 'class'
version false
}
static constraints = {
className unique: true, blank: false
}
}AclObjectIdentity:
package grails.plugin.springsecurity.acl
class AclObjectIdentity extends AbstractAclObjectIdentity {
String objectId
@Override
String toString() {
"AclObjectIdentity id $id, aclClass $aclClass.className, " +
"objectId $objectId, entriesInheriting $entriesInheriting"
}
static mapping = {
version false
aclClass column: 'object_id_class'
owner column: 'owner_sid'
parent column: 'parent_object'
objectId column: 'object_id_identity'
}
static constraints = {
objectId unique: 'aclClass'
}
}AclSid
package grails.plugin.springsecurity.acl
class AclSid {
String sid
boolean principal
@Override
String toString() {
"AclSid id $id, sid $sid, principal $principal"
}
static mapping = {
version false
}
static constraints = {
principal unique: 'sid'
sid blank: false, size: 1..255
}
}AclEntry
package grails.plugin.springsecurity.acl
class AclEntry {
AclObjectIdentity aclObjectIdentity
int aceOrder
AclSid sid
int mask
boolean granting
boolean auditSuccess
boolean auditFailure
@Override
String toString() {
"AclEntry id $id, aceOrder $aceOrder, mask $mask, granting $granting, " +
"aclObjectIdentity $aclObjectIdentity"
}
static mapping = {
version false
sid column: 'sid'
aclObjectIdentity column: 'acl_object_identity'
}
static constraints = {
aceOrder unique: 'aclObjectIdentity'
}
}编辑:我仍然没有解决这个问题的办法!
发布于 2015-07-31 14:03:30
Groovy有两种处理.groovy文件的方法:
在脚本中所发生的情况是,如果要在文件中执行任何代码,那么Groovy需要一个包含该代码的类。Groovy将隐式地创建一个包含文件名的类。
因此,如果您有一个名为AclEntry.groovy的文件,其中包含一些不在类定义中的代码,那么Groovy将创建一个名为AclEntry的隐式包含类。这意味着脚本文件AclEntry.groovy本身不能包含一个名为AclEntry的类,因为这将是一个重复的类定义,从而导致错误。
另一方面,如果您在文件AclEntry.groovy中所做的一切是定义类AclEntry (和任意数量的其他类),那么Groovy将将该文件简单地视为类定义的集合,就不会有隐含的包含类,并且在类定义文件AclEntry.groovy中有一个名为AclEntry的类没有问题。
您可能需要检查groovy文件中是否存在这种情况。
发布于 2015-07-31 14:50:07
Eclipse的缓存中可能有旧文件。
您可以尝试以下方法:
grails clean. 然后重新安装类。
发布于 2015-07-27 15:00:28
我假设您已经安装了Grails弹簧安全核心插件并正确配置了该插件。
首先介绍一下背景。Java不能有使用相同名称引用的类。Eclipse通过groovy插件抱怨已经定义了名称为AclClass, AclEntry, AclObjectIndentity, AclSid的类。当您没有定义这些类时,您就会感到沮丧!groovy要记住的是,groovy基于脚本名隐式定义类。(有关更多信息,请参阅Steve的写得快。)
由于您提到代码运行,所以我预计groovy邮件列表上的就像这个用户将保留一个不再存在的类引用。对他有效的解决办法是:
将类移动到单独的groovy类文件使错误与类一起移动;eclipse现在抱怨已经定义了groovy类文件中的类。 然而,我这样解决了问题:
-埃里克·蒂芙尼
这似乎重置了Eclipse在内存中保存的引用。
编辑
这里有一个与grails一起使用Spring安全性的不同教程。脚本将为您创建几个示例类,以便开始填写应用程序。试着按照这些指示,看看是否抛出了相同的错误。
https://stackoverflow.com/questions/31585864
复制相似问题