当前位置: 首页 > 知识库问答 >
问题:

Grails 2.4可传递插件依赖项不尊重“exclude”指令

谭翰海
2023-03-14

我们目前正在开发一个Grails插件,该插件旨在成为几个不同应用程序的共享库。该插件围绕GORM和缓存进行管理,因此,它包括hibernate插件和cache和cache-ehcache插件。Hibernate和cache-ehcache插件都希望导入ehcache核心jar依赖项,但版本不同。我想要的ehcache核心版本是cache-ehcache插件中的版本,因此我已经配置了BuildConfig。groovy是这样的:

compile(':hibernate:3.6.10.10', { excludes 'ehcache-core' })
compile ':cache:1.1.8'
compile ":cache-ehcache:1.0.4"

在这个插件中运行测试时,一切都很好。但是,一旦我将这个插件包含在我的一个实际应用程序中,排除指令似乎就会被忽略,并且对hibernate插件的传递依赖开始拉入ehcache-core。拥有两个版本的ehcache-core会破坏许多不同的方面。

我已经检查了我的应用程序的grails依赖关系报告,它显示了我应用程序的依赖关系链-

有人知道为什么依赖排除在运行插件时有效,而在运行依赖插件的应用程序时无效吗?

共有1个答案

晁开宇
2023-03-14

这是由于对 Maven/Aether 依赖关系管理器库的更改。它比Ivy少一些错误,而且速度更快,但是缺少我们许多人习惯的许多功能。一个简单的解决方法是切换回常春藤旋转变压器。您只需要在发布时对插件执行此操作,但在使用它们时不一定需要,因为您需要一个列出排除项的 defaided .pom 文件,以便使用依赖项管理器知道要忽略什么。如果使用 Aether,则 .pom 文件仅包含依赖项。

编辑:我专注于pom文件的正确性,或者像这样的课程排除应该有效(尽管最好有正确的pom,而不必强迫每个用户在他们的终端上修复它。)

问题可能是您的组或名称不同(例如,“cache”与“ehcache”),因此他们无法驱逐/排除其他组或名称。或者jar可能来自不同的依赖项,它们的排除不是全局的。也许有一种方法可以设置全局排除,但我不知道有一种,而且文档中也没有任何内容。

 类似资料:
  • “DepProject”是一个Maven项目,在该项目的pom文件中,它依赖于另一个工件: 现在,当我对我的项目执行“gradle dependencies”时,它正确地表明我应该通过传递依赖项解析获得solrj依赖项,但它不尊重4.4.0版本声明,相反,我的项目获得了5.5.4版本的依赖项。 这些行在依赖关系报告中出现几次,始终相同。 然后在结果的“gradle dependencies”调用中

  • 我在Scala项目中使用了官方的Gatling Gradle插件,我发现了一个问题,其中包含了依赖项,如 不包括可传递依赖项。也就是说,我有一个Gatling模拟类,它扩展了中的一个类,而依赖于这个类。但是,当我尝试运行模拟时,会出现如下错误 当我查看Gradle依赖时,我将视为的依赖项。我的IDE(IntelliJ)在点击代码时也能识别它。 我试着在一页文档中搜索这个插件,但是我没有看到任何有用

  • 关于maven和传递依赖排除有几个问题。然而,我不能让它工作。我的pom中有一些依赖项,它们重新打包了一些库,以减小pom的大小。到目前为止,这是成功的。但是当我运行时,这些可传递的依赖项会被写入。类路径文件。尽管它们被排除在外,如以下摘录所示。 Apache Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06;2015-04-22T13:57

  • 我的项目有一些依赖项(真的很多),我正在依赖项中添加它们。但是我不想要任何传递依赖项,这将超出我的控制范围(maven给我带来了几乎三倍于我需要的东西)。我试图通过以下方式禁止传递依赖项: 但是在我做了一个mvn包之后,传递依赖项仍然被下载并添加到我构建的包中。这是maven的日志记录: 所以这不是我想要的。我想要maven不要自动下载传递依赖项,或者不要将它们添加到我的“mvn包”中。 感谢任何

  • 我刚刚将我的项目升级到gradle 7,并且遇到了缺失的可传递依赖项。我试着改变我的身材。gradle文件在依赖项中使用“api”,但这并没有修复它。 projectA依赖于projectB,projectB依赖于projectC。 projectA-build。格拉德尔 projectB-构建。格拉德尔 ProjectA编译良好,但有运行时错误-从project ectC获取类的ClassNot

  • 场景:我的项目启用maven enforcer插件依赖收敛规则。它依赖于一个库,该库通过使用dependencyManagement声明更正了自己的依赖项收敛,但它似乎不会影响下游依赖项版本的解析。 我正在谈论的错误消息类型的示例(请注意,这两个版本都被继承为模块下的传递依赖项): 显示类似的不一致。管理了传递版本: 但是将其显示为冲突: 这似乎是一个潜在的无休止的问题。如果我在中使用depend