【问题标题】:Unable to resolve class grails.plugin.cache.Cacheable after Grails updateGrails 更新后无法解析类 grails.plugin.cache.Cacheable
【发布时间】:2014-04-17 12:20:12
【问题描述】:

我正在将 Grails 从 2.1.0 升级到 2.3.7。我有一个基于 Maven 的项目。对于2.1.0,命令mvn clean install 运行没有错误。对于2.3.7,它给出:

Compilation error: startup failed:
/home/freyja/fbc/fbc/search-web-app/grails-app/services/pl/psnc/dlteam/fbc2/services/CacheService.groovy: 4: unable to resolve class grails.plugin.cache.Cacheable
@ line 4, column 1.
import grails.plugin.cache.Cacheable
^

/home/freyja/fbc/fbc/search-web-app/grails-app/services/pl/psnc/dlteam/fbc2/services/CacheService.groovy: 3: unable to resolve class grails.plugin.cache.CachePut
@ line 3, column 1.
import grails.plugin.cache.CachePut
^

我尝试了最新版本的 Grails cache 插件 - 1.1.1 以及与 Grails 2.1.0 兼容的插件 cache 1.0.0。错误是一样的。

我检查了这个文件CacheService.groovy 的外观,它确实有这两个导入并且似乎需要它们。我检查了cache 插件压缩包已下载到.m2 文件夹。

我在pom.xml 中包含cache 插件,如下所示:

<dependency>
    <groupId>org.grails.plugins</groupId>
    <artifactId>cache</artifactId>
    <version>1.1.1</version>
    <scope>compile</scope>
    <type>zip</type>
</dependency>

当我运行grails compile 时也没有错误,您也可以使用grails run-app 运行应用程序。但是让它在 Maven 中工作会很好,就像以前一样。你能帮我解决这个问题吗?

我还有一个问题可能会让我了解正在发生的事情:如果我使用 Maven,BuildConfig.groovy 中的依赖项仍然重要吗?我应该删除它们吗?因为现在我们在项目中需要维护两组依赖项,这看起来不太合适。

编辑:

BuildConfig.groovy 看起来像这样:

grails.servlet.version = "2.5" // Change depending on target container compliance (2.5 or 3.0)
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"

grails.project.dependency.resolution = {
    pom true
    // inherit Grails' default dependencies
    inherits("global") {
        // specify dependency exclusions here; for example, uncomment this to disable ehcache:
        // excludes 'ehcache'
    }
    log "error" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
    checksums true // Whether to verify checksums on resolve

    def gebVersion = "0.7.2"

    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 eg.

        // runtime 'mysql:mysql-connector-java:5.1.20'
        compile 'org.tuckey:urlrewritefilter:4.0.3'
        compile 'commons-httpclient:commons-httpclient:3.1'
        compile 'org.apache.httpcomponents:httpclient:4.2.5'
        compile 'org.apache.solr:solr-solrj:4.3.0'
        test 'co.freeside:betamax:1.1.2'
        test "org.codehaus.geb:geb-spock:$gebVersion"

    }

    plugins {
        runtime ":hibernate:3.6.10.12"
        runtime ":jquery:1.11.0.1"
        runtime ":resources:1.1.6"
        test ":spock:0.7"
        test ":geb:$gebVersion"

        // Uncomment these (or add new ones) to enable additional resources capabilities
        //runtime ":zipped-resources:1.0"
        //runtime ":cached-resources:1.0"
        //runtime ":yui-minify-resources:0.1.4"

        build ":tomcat:7.0.52.1"

        runtime ":database-migration:1.3.8"

        compile ':cache:1.1.1'
    }
}

grails.war.resources = {stagingDir ->
    delete(dir: "${stagingDir}/WEB-INF/classes/pl/psnc/dlteam/fbc2/utils/iso693_2")
}

但它是否完全用于 maven 构建? 如果是这样,为什么我必须在 pom.xml 中包含插件?这种冗余让我很困扰。

【问题讨论】:

  • BuildConfig 长什么样子?
  • 我更新了问题,谢谢。
  • 您可以从BuildConfig 中删除所有插件和依赖项,因为它们将从pom.xml 中引用。不要删除 BuildConfig。特定任务在战争创建期间完成(grails.war.resources),这将是需要的。在清空plugins { }dependencies { } 后执行mvn clean install。我假设 pom 文件中已经提到了所有这些依赖项。
  • 还要检查你是否仍然需要ivy这里grails.project.dependency.resolver = "ivy"而不是以太。
  • @dmahapatro 我检查了当我注释掉BuildConfig.groovy 中的所有依赖项和插件时情况如何,并且错误是相同的。所有的包都被放到.m2.grails 目录没有被重新创建。这是我所期望的。我看到.m2/repository/org/grails/plugin/cache/1.1.1/ 中有cache-1.1.1.zip,我检查了它里面是否包含正确的接口文件。

标签: maven grails grails-cache


【解决方案1】:

BuildConfig.groovy

放这条线

dependencies {
        compile "net.sf.ehcache:ehcache-core:2.4.6"

    }

【讨论】:

  • 不幸的是,这没有帮助。我还尝试将此依赖项放在pom.xml 中,因为我希望所有依赖项都放在那里,但错误是一样的。你还有其他建议吗?我已经坚持了两个星期了。
猜你喜欢
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 2013-12-30
相关资源
最近更新 更多