最近,我将一个 Grails 项目从 2.0.1 升级到了 2.3.1。该项目在我的 Window 机器和我同事的 Mac(通过 Git 提取)上运行良好。但是,在我的 Mac 上,当我在完成安装插件和编译后尝试运行应用程序时出现此错误:
ClassNotFoundException: org.springframework.beans.factory.NoUniqueBeanDefinitionException
完整的堆栈跟踪位于 http://pastebin.com/iEvKBmG5 ,但这是错误的症结所在。
如果我在交互模式下运行 grails,服务器会启动,但是当我浏览到 Controller 时,我只会得到一个白页。
我的 Mac 上的环境与导致此错误的同事的环境有什么不同?这是我为解决此问题而尝试的方法:
grails clean
gvm uninstall grails 2.3.1
,gvm flush archives
,gvm install grails 2.3.1
)grails refresh-dependencies myApplicationDependencies.xml
结果文件位于 http://pastebin.com/5bG9Vv78 .我和我的同事都在运行 Mac OS X Mavericks 和最新版本的 Java。欢迎任何想法。
更新
我还仔细检查以确保我的项目不包含重复的类。为此,我运行了
grails dev war
并使用了jar scan使用 -double 标志来搜索重复的类。没有找到。同样,我很确定系统实际上并没有试图抛出 NoUniqueBeanDefinitionException。我认为它只是试图找到那个类并且由于某种原因不能。
----------------------------------------------
Scanned archives: 2
Errors: 0
Archives with hits: 0
最佳答案
可能是某些文件名大写/小写的问题。检查所有源文件名是正确的名称(驼峰式),并且不存在同名但不同大小写的文件
埃斯:
Controllers/MyGreatController.groovy
Controllers/MygreatController.groovy
如果做不到这一点,请查看 grails dependency-report 的输出。确保您的项目引入的 Spring 版本高于或等于 3.2.1,因为这是添加了 NoUniqueBeanDefinitionException 类的 Spring 版本。该类位于 spring-beans 模块中。另外,请确保您的其他依赖项都没有引入旧版本的 spring-beans。
如果是,您可以使用 BuildConfig.groovy 中的 excludes 配置选项告诉 Grails 忽略该传递依赖项。例如,假设您正在从 mavenRepo“https://maven.alfresco.com/nexus/content/groups/public/”中提取 activiti-engine jar。更改依赖声明以排除spring-beans,你应该是正确的。
compile("org.activiti:activiti-engine:5.13") {
excludes "spring-beans"
}
见 http://grails.org/doc/2.3.1/guide/conf.html#dependencyResolution .
关于macos - Mac 上的 Grails 2.3.1 ; ClassNotFound NoUniqueBeanDefinitionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19845734/