【问题标题】:Grails upgrade to 2.2.2 fails with ClassNotFoundException on migration scriptGrails 升级到 2.2.2 失败,迁移脚本上出现 ClassNotFoundException
【发布时间】:2013-04-25 23:41:26
【问题描述】:

当我尝试将我的 Grails 项目从 2.1.1 升级到 2.2.2 时,我得到一个奇怪的堆栈跟踪,

| Error 2013-05-01 17:54:46,935 [localhost-startStop-1] ERROR context.GrailsContextLoader  - Error initializing the application: Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsConfigurationException: Class not found loading Grails application: devportal.schema.schema-0
Message: Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsConfigurationException: Class not found loading Grails application: devportal.schema.schema-0
   Line | Method
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|   138 | run      in java.util.concurrent.FutureTask
|   895 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker
|   918 | run      in     ''
^   680 | run . .  in java.lang.Thread

Caused by GrailsConfigurationException: Class not found loading Grails application: devportal.schema.schema-0
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|   138 | run      in java.util.concurrent.FutureTask
|   895 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker
|   918 | run      in     ''
^   680 | run . .  in java.lang.Thread

Caused by ClassNotFoundException: devportal.schema.schema-0
->> 202 | run      in java.net.URLClassLoader$1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|   190 | findClass in java.net.URLClassLoader
|   306 | loadClass in java.lang.ClassLoader
|   303 | innerRun in java.util.concurrent.FutureTask$Sync
|   138 | run . .  in java.util.concurrent.FutureTask
|   895 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker
|   918 | run . .  in     ''
^   680 | run      in java.lang.Thread

由于某种原因,它似乎正在尝试从 Database Migrations plugin 运行我的数据库迁移。

我在这个主题上找到了mailing list post

看起来我实际上可以添加: 包电流 到我的迁移来解决问题。 也许我应该一直这样?

但是将我的包添加到我的脚本并没有帮助(我什至尝试过current)。

有人知道吗?

【问题讨论】:

    标签: grails grails-2.2


    【解决方案1】:

    发帖后几乎直接找到了解决办法,

    http://grails.1312388.n4.nabble.com/Nested-folder-for-database-migrations-in-Grails-2-2-x-td4642106.html

    为了跟进,我通过添加一个包声明解决了这个问题 与文件夹匹配的迁移脚本文件的开头 结构体。不确定是 Grails 更改还是 Groovy 更改 导致问题,但文件被编译成 使用声明的包结构的目标/类目录(其中 在这种情况下什么都没有,导致它们位于根文件夹中)。 但是,Grails 正在检测文件结构中的文件,并且 使用与之匹配的路径创建 Spring FileSystemResources。这些 被传递给 DefaultGrailsApplication 构造函数和 ClassLoader 未能在匹配位置找到类。

    grails-app/migrations/releases/release_1/foo.groovy -> 目标/类/foo.class

    通过在 foo.groovy 的开头添加“package release.release_1”, 然后发生了以下情况:

    grails-app/migrations/releases/release_1/foo.groovy -> 目标/classes/releases/release_1/foo.class

    然后ClassLoader找到了对应的类文件 文件系统资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2021-04-26
      • 2016-04-09
      • 2012-05-16
      • 2014-04-26
      • 1970-01-01
      相关资源
      最近更新 更多