macos - Mac 上的 Grails 2.3.1 ; ClassNotFound NoUniqueBeanDefinitionException

标签 macos spring grails

最近,我将一个 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 文件夹的内容(以及清除特定子文件夹的不太极端的变体)
  • 删除项目并将其从 git
  • 拉回来
  • grails clean
  • 重新安装grails 2.3.1(使用gvm,所以我运行的命令是gvm uninstall grails 2.3.1gvm flush archivesgvm install grails 2.3.1)
  • 将项目内容克隆到不同的目录
  • 检查我的依赖报告,确保拉取的 spring 的版本大于 3.2.1,其中添加了 NoUniqueBeanDefinitionException 类。见 http://pastebin.com/0AVC0SA0完整报告。
  • 验证 NoUniqueBeanDefinitionException.class 文件是否在 spring-beans jar 中,位于 ~/.gvm/grails/2.3.1/lib/org.springframework/spring-beans/jars/spring-beans-3.2.4.RELEASE。 jar 。
  • grails refresh-dependencies myApplicationDependencies.xml结果文件位于 http://pastebin.com/5bG9Vv78 .
  • 从我的 maven 存储库中手动删除了 spring-beans 和其他 spring jar 的 3.1.2 版本,因为它们已在依赖项中列出。 Maven只是重新解决它。
  • 将依赖解析器切换到 ivy 并获取依赖报告。 Spring 的 3.1.2 版本被列为“驱逐”。

  • 我和我的同事都在运行 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/

    相关文章:

    java - 不同的存储库对象将被注入(inject)以引用

    grails - 在Cloud Foundry中链接两个应用程序

    java - 从数据库中删除对象,JPA

    json - Grails 获取子域对象

    grails - 升级后,Grails Quartz Job没有Hibernate session ,从而导致LazyInitializationException

    swift - Swift中的角色游戏效果/药水生成器

    multithreading - 大量多线程操作

    swift - 如何检测 Homebrew 公式中的平台?

    macos - 无法连接到 Launch 代理中的 XPCService

    java - 使用 Hibernate SQLQuery 的 AVG 函数中的 NullPointerException