使用 Maven 依赖项的轻量级方法?
Lightweight way to use a Maven dependency?
当您想使用某些 Java 库中的实用程序时,您通常会做什么?我的意思是,如果您将它添加为 Maven 依赖项,整个库是否包含在组装的 JAR 中?
我没有任何存储问题,我不介意 JAR 变得臃肿,但我很好奇在这种情况下是否有一些策略可以减少 JAR 的大小。
谢谢
更糟糕的是:您不仅将“整个库”添加到您的项目中,而且还添加了它的依赖项,无论您是否需要它们。
Joachim Sauer 说得对,除非您希望它 运行 可用,否则不要将依赖项捆绑到您的工件中。但是恕我直言,这只是将问题转移到了另一个点。最终,你想要 运行 东西。在某些时候,构建了一个 运行 可用的 JAR、一个 WAR 或一个 EAR,它将包含整个依赖树(减去每个工件只获得一个版本的事实)。
Maven 阴影插件可以帮助您通过仅添加“必要的”类 来最小化您的 jar(参见 Minimize an Uber Jar correctly, Using Shade-Plugin)。但这在一般情况下当然很棘手:
- 类 未找到 non-Java 元素引用。
- 类 未找到反射使用的。
- 如果您正在进行一些依赖项注入,则只需使用代码中的接口。所以这些实现可能会被淘汰。
所以您的 minimizedJar 通常可能太小了。
如您所见,我不知道对此有任何通用的解决方案。
什么是明智的方法?
- 不要构建有五个用途的 JAR,而是构建小的 JAR。为避免大量不同的构建过程,请使用 multi-module 个项目。
- 不要将库添加为依赖项,除非您确实需要它们。最好复制一个方法来转换字符串,而不是为此目的添加整个字符串库。
当您想使用某些 Java 库中的实用程序时,您通常会做什么?我的意思是,如果您将它添加为 Maven 依赖项,整个库是否包含在组装的 JAR 中?
我没有任何存储问题,我不介意 JAR 变得臃肿,但我很好奇在这种情况下是否有一些策略可以减少 JAR 的大小。
谢谢
更糟糕的是:您不仅将“整个库”添加到您的项目中,而且还添加了它的依赖项,无论您是否需要它们。
Joachim Sauer 说得对,除非您希望它 运行 可用,否则不要将依赖项捆绑到您的工件中。但是恕我直言,这只是将问题转移到了另一个点。最终,你想要 运行 东西。在某些时候,构建了一个 运行 可用的 JAR、一个 WAR 或一个 EAR,它将包含整个依赖树(减去每个工件只获得一个版本的事实)。
Maven 阴影插件可以帮助您通过仅添加“必要的”类 来最小化您的 jar(参见 Minimize an Uber Jar correctly, Using Shade-Plugin)。但这在一般情况下当然很棘手:
- 类 未找到 non-Java 元素引用。
- 类 未找到反射使用的。
- 如果您正在进行一些依赖项注入,则只需使用代码中的接口。所以这些实现可能会被淘汰。
所以您的 minimizedJar 通常可能太小了。
如您所见,我不知道对此有任何通用的解决方案。
什么是明智的方法?
- 不要构建有五个用途的 JAR,而是构建小的 JAR。为避免大量不同的构建过程,请使用 multi-module 个项目。
- 不要将库添加为依赖项,除非您确实需要它们。最好复制一个方法来转换字符串,而不是为此目的添加整个字符串库。