我正在创建一个Grails插件作为复杂产品的包装器。该产品与hibernate等其他产品有很多依赖关系。问题是,grails具有一些相同的依赖关系,但具有不同的版本。 例如。 Grails - >休眠3.6.7 其他产品 - > hibernate 3.5.6
Grails如何处理插件依赖项? Grails会为每个插件创建一个单独的ClassLoader吗?它是可配置的吗?
提前致谢!
答案 0 :(得分:6)
Grails有一个依赖项解析机制,可以解决以下依赖项之间的冲突:
只需确保指定插件所依赖的内容,然后让Grails的依赖关系解决其余部分。 Grails历史上使用Ivy进行依赖性解析,但从Grails 2.3.0开始,默认是Maven / Aether,可以选择使用Ivy。
有时候,在应用程序中,您需要覆盖依赖项解析所做出的选择,例如:排除传递依赖或强制使用特定的库版本,您可以在BuildConfig.groovy
与往常一样,Grails参考文档提供了对this topic的全面报道。
除了下面的评论之外,如果将JAR放在应用程序的lib目录中,它将被依赖项解析忽略并直接放在类路径上。所以你通常不应该这样做。请改为在dependencies
的{{1}}部分中指定JAR及其版本。
指定JAR的语法是
BuildConfig.groovy
组,工件和版本共同标识要下载的 (JAR),而范围指定 您希望如何使用JAR。查找特定JAR的组,工件和版本的最简单方法是search a Maven repository。
Read this了解您可以使用的不同范围。