0

我的用例:

使用Gradle Shadow 插件构建一个带有重新定位的 Google Guice 依赖项的 Java 库(可能是每个其他的 dep),以避免下游项目中的依赖项问题,但保留其他依赖项的原样。这意味着下游项目仍然通过 Maven 存储库获取这些依赖项,因为它们是在库 pom.xml 中定义的。

我认为这是使用这个插件的主要原因之一,重新定位依赖项,但仍然像以前一样为您提供作为普通库的项目。对我来说,配置我的用例并不是很直观。我只想启用重定位而不创建fatjar。

我的示例项目按预期工作,但我不喜欢我需要将依赖项定义为shadow和两次implementation

shadow => 依赖项作为运行时依赖项添加到已发布的 pom 中(参见代码

implementation => 用于编译项目本身的依赖项,例如在您的 IDE 中。

你知道更好的方法吗?

更新

我的示例项目中的配置适用于 Guice 依赖项,因为它按预期重新定位,但缺少传递依赖项。当然这会导致 ClassNotFoundExecption (在我的真实项目中),因为 Guice 没有找到自己依赖的类。

4

1 回答 1

2

如果您想创建一个只有一个特定依赖项要重定位的库 jar,并且由于Shadow 插件的工作原理,您的项目的其他依赖项仍在已发布的 pom 中,则没有其他解决方案。

所以我更新了我的示例项目并找到了 2 个可能的解决方案来解决缺少传递依赖项的问题(我的问题中的 siehe 更新块)。

选项1:将所有传递依赖项(以及依赖项的依赖项)添加到 shadowJar 块:https ://github.com/dacrome/gradle-shadow-plugin-example/tree/successful-config-option-1

选项2:仅将Guice的第一级依赖项添加到依赖项块中: https ://github.com/dacrome/gradle-shadow-plugin-example/tree/successful-config-option-2

我更喜欢选项1。

于 2020-07-10T17:58:36.207 回答