【问题标题】:Maven: Fat jar as local dependencyMaven:Fat jar 作为本地依赖项
【发布时间】:2021-02-27 16:48:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: java maven jar dependency-management maven-shade-plugin


    【解决方案1】:

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

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

    如果您对内容进行遮蔽,则可能不会出现此类冲突。

    【讨论】:

    • 如果类路径上有多个同名资源,那么类路径的构建顺序突然变得很重要。您通常不希望这种额外的复杂性。请参阅stackoverflow.com/questions/6644440/… 了解更多信息。
    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2012-07-28
    • 2019-06-29
    • 1970-01-01
    相关资源
    最近更新 更多