3

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

何らかの理由で、データベースの移行プラグインからデータベースの移行を実行しようとしているようです。

この件に関するメーリングリストの投稿を見つけました。

問題を解決するために、移行に現在のパッケージを実際に追加できるようです。多分私はこれをずっと持っていたはずですか?

しかし、パッケージをスクリプトに追加しても役に立ちませんでした (試してみcurrentました)。

誰でも何か考えがありますか?

4

1 に答える 1

5

投稿直後に解決策を見つけ、

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/migrations/releases/release_1/foo.groovy -> target/classes/foo.class

foo.groovy の先頭に「packagereleases.release_1」を追加すると、次のようになりました。

grails-app/migrations/releases/release_1/foo.groovy -> ターゲット/クラス/リリース/release_1/foo.class

その後、ClassLoader は FileSystemResource に対応するクラス ファイルを見つけました。

于 2013-05-01T22:08:37.240 に答える