【问题标题】:Upgrading grails from 2.1.1 to 2.4.3将 grails 从 2.1.1 升级到 2.4.3
【发布时间】:2018-01-03 22:40:02
【问题描述】:

我正在将一个 grails 应用程序从 2.1.1 升级到 2.4.3,而在升级过程中解决错误是一个永无止境的故事。

现在我被困在这一点上。

有什么办法解决这个问题吗?

谢谢!

C:\workspace\grails_apps\monitoring>grails 运行应用程序

| Running Grails application
| Error 2014-09-20 17:36:55,136 [localhost-startStop-1] ERROR context.ContextLoader  - Context initialization failed
Message: Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'grailsResourceLoader' while setting bean property 'grailsResourceLoader'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean] for bean with name 'grailsResourceLoader' defined in ServletContext resource [/WEB-INF/appli
cationContext.xml]; nested exception is java.lang.ClassNotFoundException: org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean
    Line | Method
->>  334 | innerRun  in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|    166 | run       in java.util.concurrent.FutureTask
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread

Caused by CannotLoadBeanClassException: Cannot find class [org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean] for bean with name 'grailsResourceLoader' defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean
->>  334 | innerRun  in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|    166 | run       in java.util.concurrent.FutureTask
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread

Caused by ClassNotFoundException: org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean
->>   59 | findClass in org.grails.plugins.tomcat.ParentDelegatingClassLoader
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|    423 | loadClass in java.lang.ClassLoader
|    356 | loadClass in     ''
|    334 | innerRun  in java.util.concurrent.FutureTask$Sync
|    166 | run . . . in java.util.concurrent.FutureTask
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run       in java.lang.Thread
| Error 2014-09-20 17:36:55,270 [localhost-startStop-1] ERROR context.GrailsContextLoaderListener  - Error initializing the application: Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'grailsResourceLoader' while setting bean property 'grailsResourceLoader'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.codehaus.groovy.grails.commo
ns.GrailsResourceLoaderFactoryBean] for bean with name 'grailsResourceLoader' defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean
Message: Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'grailsResourceLoader' while setting bean property 'grailsResourceLoader'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean] for bean with name 'grailsResourceLoader' defined in ServletContext resource [/WEB-INF/appli
cationContext.xml]; nested exception is java.lang.ClassNotFoundException: org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean
    Line | Method
->>  334 | innerRun  in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|    166 | run       in java.util.concurrent.FutureTask
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread

Caused by CannotLoadBeanClassException: Cannot find class [org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean] for bean with name 'grailsResourceLoader' defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean
->>  334 | innerRun  in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|    166 | run       in java.util.concurrent.FutureTask
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread

Caused by ClassNotFoundException: org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean
->>   59 | findClass in org.grails.plugins.tomcat.ParentDelegatingClassLoader
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|    423 | loadClass in java.lang.ClassLoader
|    356 | loadClass in     ''
|    334 | innerRun  in java.util.concurrent.FutureTask$Sync
|    166 | run . . . in java.util.concurrent.FutureTask
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run       in java.lang.Thread

BuildConfig.groovy

grails.servlet.version = "2.5" // Change depending on target container compliance (2.5 or 3.0)
grails.server.port.http = 8090
grails.project.class.dir = "target/classes"
grails.project.test.class.dir = "target/test-classes"
grails.project.test.reports.dir = "target/test-reports"
grails.project.target.level = 1.6
grails.project.source.level = 1.6
grails.project.dependency.resolver = "maven" 
//grails.project.war.file = "target/${appName}-${appVersion}.war"

// uncomment (and adjust settings) to fork the JVM to isolate classpaths
//grails.project.fork = [
//   run: [maxMemory:1024, minMemory:64, debug:false, maxPerm:256]
//]

grails.project.dependency.resolution = {
    // inherit Grails' default dependencies
    inherits("global") {
        // specify dependency exclusions here; for example, uncomment this to disable ehcache:
        // excludes 'ehcache'
    }
    log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
    checksums true // Whether to verify checksums on resolve
    legacyResolve false // whether to do a secondary resolve on plugin installation, not advised and here for backwards compatibility

    repositories {
        inherits true // Whether to inherit repository definitions from plugins

        grailsPlugins()
        grailsHome()
        grailsCentral()

        mavenLocal()
        mavenCentral()

        // uncomment these (or add new ones) to enable remote dependency resolution from public Maven repositories
        //mavenRepo "http://snapshots.repository.codehaus.org"
        //mavenRepo "http://repository.codehaus.org"
        //mavenRepo "http://download.java.net/maven/2/"
        //mavenRepo "http://repository.jboss.com/maven2/"
    }

    dependencies {
        // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes e.g.

        // runtime 'mysql:mysql-connector-java:5.1.20'


    }

    plugins {
        runtime ":hibernate4:4.3.5.5"
        runtime ":jquery:1.11.1"

        build ":tomcat:7.0.54"

        runtime ":database-migration:1.4.0"

    }

}

我没有升级现有的 grails 应用程序,而是尝试创建一个新应用程序并将文件复制到新项目。这种方法会导致不同的错误。

grails 运行应用程序

| Running Grails application
Error occurred during initialization of VM
agent library failed to init: instrument
Error opening zip file or JAR manifest missing : C:\Program%20Files%20(x86)\Grails\grails-2.4.3\lib\org.springframework\springloaded\jars\springloaded-1.2.0.RELEASE.jar
| Error Forked Grails VM exited with error

使用的java版本:1.7.0_21

GRAILS_HOME=C:\PROGRA~2\grails\grails-2.4.3

GROOVY_HOME=C:\PROGRA~2\Groovy\groovy-2.3.6

Grails 版本:2.4.3

现在该怎么办?

谢谢!

----------------------------------------------- -----

根据以下建议删除对 bean 'grailsResourceLoader 的引用,我相应地更改了 applicationContext.xml。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
        <description>Grails application factory bean</description>
        <property name="grailsDescriptor" value="/WEB-INF/grails.xml" />
    </bean>

    <bean id="pluginManager" class="org.codehaus.groovy.grails.plugins.GrailsPluginManagerFactoryBean">
        <description>A bean that manages Grails plugins</description>
        <property name="grailsDescriptor" value="/WEB-INF/grails.xml" />
        <property name="application" ref="grailsApplication" />
    </bean>

    <bean id="grailsConfigurator" class="org.codehaus.groovy.grails.commons.spring.GrailsRuntimeConfigurator">
        <constructor-arg>
            <ref bean="grailsApplication" />
        </constructor-arg>
        <property name="pluginManager" ref="pluginManager" />
    </bean>


    <bean id="characterEncodingFilter" class="org.springframework.web.filter.CharacterEncodingFilter">
        <property name="encoding">
            <value>utf-8</value>
        </property>
    </bean>
</beans>

不幸的是,问题仍然存在。

| Running Grails application
Error opening zip file or JAR manifest missing : C:\Program%20Files%20(x86)\Grails\grails-2.4.3\lib\org.springframework\springloaded\jars\springloaded-1.2.0.RELEASE.jar
Error occurred during initialization of VM
agent library failed to init: instrument
| Error Forked Grails VM exited with error

感谢您的进一步帮助!

------------------------------------------

Grails 2.4.3 需要 Java 1.8.0 吗?

  • 不,不是,即使对于 java 8,问题也是一样的

【问题讨论】:

  • 我相信我在从 1.3.9 升级到 2.3.11 时遇到了类似的错误。嗯...可能是您尝试在 Tomcat 6 上部署吗?可能不是,但也有一些关于 applicationContext.xml 的内容......您使用的是基于 2.4.3 的 applicationContext.xml 吗?使用 2.4.3(我相信安装模板)在一个空项目中生成并与您所拥有的进行比较。 Beckwiths 的书 Programming Grails 有一整章是关于升级策略的。阅读并希望它成功!
  • 为什么要设置 GROOVY_HOME?没有必要这样做。
  • 我怀疑设置 GROOVY_HOME 会导致这个问题。设置它更方便。
  • 不,我只是问你为什么这样做。
  • @user955732 我刚刚意识到你没有从你的 applicationContext.xml 中删除你的 grails 资源加载器它仍然存在!

标签: grails upgrade grails-2.4


【解决方案1】:

我能够通过创建一个新的 2.4 grails 项目并将 applicationContext.xml 文件从它复制到我现有的项目中来解决该问题。

【讨论】:

  • web-app/WEB-INF/applicationContext.xml 文件包含 grailsResourceLoader bean 的 bean 定义,它是 org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean 的一个实例。需要从文件中删除该 bean 定义。
  • grailsApplication bean 定义应保留在文件中,但 grailsResourceLoader bean 引用应删除参考:grails.github.io/grails-doc/2.4.x/guide/upgradingFrom23.html
【解决方案2】:

您的新版本 Grails 不需要 applicationContent.xml 中的这两行:

<property name="grailsResourceLoader" ref="grailsResourceLoader" />

<bean id="grailsResourceLoader" class="org.codehaus.groovy.grails.commons.GrailsResourceLoaderFactoryBean" />

删除它们并重新启动您的项目。它应该可以正常工作。

【讨论】:

    【解决方案3】:

    对于任何感兴趣的人,通过将我的 Grails SDK 的位置从以下位置更改为我解决了这个问题:

    C:\Program Files (x86)\Grails\grails-2.4.3

    C:\Grails\grails-2.4.3

    例如。通过删除 GRAILS_HOME 路径中的空格,如发现 here 的帖子中所述。

    注意,通过设置 GROOVY_HOME = C:\PROGRA~2\Grails\grails-2.4.3 来删除空格是行不通的

    【讨论】:

      【解决方案4】:

      我遇到了同样的错误,但是将 grails 升级到 2.5.5 版本,希望对您有所帮助。

      在applicationContext.xml中:

      <bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
          <description>Grails application factory bean</description>
          <property name="grailsDescriptor" value="/WEB-INF/grails.xml" />
          <property name="grailsResourceLoader" ref="grailsResourceLoader" />
      </bean>
      

      删除 grailsResourceLoader,如下所示:

      <bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
          <description>Grails application factory bean</description>
          <property name="grailsDescriptor" value="/WEB-INF/grails.xml" />
      </bean>
      

      我确实使用了这个链接:https://grails.github.io/grails2-doc/2.5.5/guide/upgradingFrom23.html

      【讨论】:

        猜你喜欢
        • 2014-12-06
        • 1970-01-01
        • 1970-01-01
        • 2015-03-08
        • 1970-01-01
        • 2014-11-21
        • 2012-11-09
        • 1970-01-01
        • 2017-05-24
        相关资源
        最近更新 更多