Maven:Fat jar 作为本地依赖

Maven: Fat jar as local dependency

通过在本地存储库中安装 jar 文件或向本地 jar 提供 link 并将范围设置为“系统”,可以在 pom.xml 中包含本地文件”。 如果我包含一个 fat jar(= 一个包含所有传递依赖项的 jar)会发生什么? Maven 是否仍然能够正确检测依赖冲突,我是否仍然能够排除我的“fat jar 依赖”的一些传递依赖?

问题是我正在处理一个遗留软件项目,它之前没有使用任何构建工具/依赖管理工具(所以所有需要的 jar 都只是下载并添加到类路径)。我正在尝试将其转换为 Maven 项目。这对于所有开源依赖项来说都不是很难(因为几乎所有的依赖项都可以在 Maven Central 或其他存储库中获得)。在某些情况下,我们拥有很久以前获得的专有库,并以 fat jar 的形式提供。

maven 阴影插件在这种情况下会有帮助吗?

作为依赖项的胖 JAR 是危险的,因为如果胖 jar 包含 x.jar 的内容并且 x.jar 也出现在类路径中,那么您通常会发生冲突。 Maven 不会解决冲突,因为 Maven 不知道您的胖 JAR 中包含哪些 JAR。

因此,当您有一个胖 JAR 依赖项时,您需要确保胖 JAR 中的所有内容都不是项目其他地方的依赖项,如果是,您应该将其排除。

如果您对内容进行阴影处理,您可能不会遇到此类冲突。