【问题标题】:How does Grails handle plugin dependenciesGrails 如何处理插件依赖关系
【发布时间】:2012-02-08 20:37:35
【问题描述】:

我正在创建一个 Grails 插件作为复杂产品的包装器。该产品对 hibernate 等其他产品有很多依赖。问题是,grails 有一些相同的依赖项,但版本不同。 例如。 Grails -> 休眠 3.6.7 其他产品 -> 休眠 3.5.6

Grails 如何处理插件依赖关系? Grails 是否为每个插件创建单独的 ClassLoader?可以配置吗?

提前致谢!

【问题讨论】:

    标签: grails classloader


    【解决方案1】:

    Grails 有一个依赖解决机制,可以解决以下依赖之间的冲突:

    • Grails 本身
    • Grails 应用程序
    • 应用程序的插件
    • 插件依赖项

    只要确保你指定了你的插件所依赖的,然后让 Grails 的依赖解析来处理剩下的事情。 Grails 历史上使用 Ivy 来解决依赖关系,但从 Grails 2.3.0 开始,默认是 Maven/Aether,并且可以选择使用 Ivy。

    有时在应用程序中,您会想要覆盖依赖解析所做的选择,例如排除传递依赖或强制使用特定的库版本,您可以在 BuildConfig.groovy 中完成所有这些操作

    像往常一样,Grails 参考文档提供了对this topic 的非常全面的介绍。

    更新

    进一步了解您在下面的评论,如果您将 JAR 放在应用程序的 lib 目录中,它将被依赖解析忽略并直接放在您的类路径中。所以你通常不应该这样做。请在 BuildConfig.groovydependencies 部分指定 JAR 及其版本。

    更新 2

    指定 JAR 的语法是

    <scope> <group>:<artifact>:<version>
    

    group、artifact 和 version 共同标识您想要下载的 what (JAR),而 scope 指定 如何您想要使用 JAR。查找特定 JAR 的组、工件和版本的最简单方法是 search a Maven repository

    Read this 了解您可以使用的不同范围。

    【讨论】:

    • 感谢您的回复。如果我将 jar 文件放在我的 grails 应用程序/插件的 lib 目录中,那么由于版本冲突,应用程序不会启动。
    • 在依赖项描述中,有一个虚拟条目 runtime 'mysql:mysql-connector-java:5.1.18' - 看起来不像 jar 的名称。你能提示如何指定一个罐子吗?文档很棒,但我感觉没有专家知识,我仍然迷路......
    • 感谢更新。我还有一些悬而未决的问题——你介意看看吗? stackoverflow.com/questions/8847804/…
    • 我很困惑,Waldemar 和 Ralf 是同一个人吗?
    • 嗨,唐,拉尔夫是我的同事。所以我们经常遇到同样的问题
    猜你喜欢
    • 2015-05-11
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    相关资源
    最近更新 更多