在BuildConfig.groovy
[...]
grails.project.dependency.resolver = "maven"
[...]
我有一个grails应用程序,包括2个自定义插件(托管在我们的nexus maven repo上):gw-mr:1.7.3-RELEASE
和gw-mr-security:1.7.4-RELEASE
这两个插件依赖于同一个库mr-client
。但是gw-mr
落后于gw-mr-security
,并且一段时间没有重建,但其代码没有改变。与此同时,gw-mr-security
已被提升,并使用了较新版本的公共库:mr-client
。因此,如果我们看一下gw-mr
的POM:
[...]
<dependency>
<groupId>irrelevant</groupId>
<artifactId>mr-client</artifactId>
<version>3.6.5-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
[...]
看着gw-mr-security
的POM,我们看到了:
[...]
<dependency>
<groupId>irrelevant</groupId>
<artifactId>mr-client</artifactId>
<version>3.9.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
[...]
所以,确实gw-mr-security
宣布mr-client
的更高版本而不是gw-mr
。
当我在主机grails应用程序中包含这两个插件时,我可以看到一些非常奇怪的东西,当我运行grails dependency-report compile
时:
[...]
+--- irrelevant:gw-mr:1.7.3-RELEASE
| \--- irrelevant:mr-client:3.6.5-20170921.151252-2
+--- irrelevant:gw-mr-security:1.7.4-RELEASE
+--- irrelevant:gw-rest:1.7.8-RELEASE
[...]
所以,即使我的应用程序在其依赖项中声明了两个插件(BuildConfig.groovy):
[...]
compile "irrelevant:gw-mr:1.7.3-RELEASE"
compile "irrelevant:gw-mr-security:1.7.4-RELEASE"
[...]
grails仍然不会检查传递依赖关系并驱逐gw-mr
(3.6.5-SNAPSHOT
)对gw-mr-security
(3.9.0-SNAPSHOT
)中包含的更新版本的依赖关系。
当然,当我在主机应用程序中明确包含传递依赖时:
[...]
compile "irrelevant:mr-client:3.9.0-SNAPSHOT"
[...]
然后在我的战争中包装了正确的图书馆。
我的假设错了,grails驱逐了插件中包含的旧版本的传递依赖项吗?
感谢您的任何见解。