2013-05-01 86 views
3

想我的Grails項目從升級到2.1.1 2.2.2當我得到一個奇怪的堆棧跟蹤,Grails的升級到2.2.2失敗,並在遷移腳本ClassNotFoundException的

| 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)。

任何人有任何想法?

回答

4

發佈後幾乎直接找到了解決辦法,

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

跟進,我加入了包聲明 的文件夾相匹配的遷移腳本文件的開頭解決了這個問題 結構體。不知道是Grails更改還是Groovy更改導致此問題,但是正在使用聲明的包結構將文件編譯到 target/classes目錄中(在這種情況下,其中的 沒有任何結果,導致它們處於根文件夾)。 但是,Grails正在檢測文件結構中的文件,並使用路徑創建Spring FileSystemResources以與之匹配。這些 已傳遞給DefaultGrailsApplication構造函數,並且ClassLoader未能在匹配的位置查找類。

的grails-app /遷移/釋放/ RELEASE_1/foo.groovy - > 目標/類/讓Foo.class

通過添加 '包releases.release_1' 到foo.groovy, 的開始,則以下發生:

的grails-app /遷移/釋放/ RELEASE_1/foo.groovy - > 目標/類/釋放/ RELEASE_1 /讓Foo.class

然後,類加載器找到符合 的FileSystemResource相應的類文件。