有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java mavenshadeplugin和Singleton

我想我已经知道答案了,但如果有人能帮我确认一下,我将不胜感激

A) We are including a library in a build using maven-shade-plugin;
B) This library implements singleton(s);
C) Our resulting jar (uber-jar) is, in turn, used in a build of a megaproject;
D) Other jars in a megaproject also using the same library (A);

库(A)是否会在整个大型项目中扮演一个单独的角色? 对于工件的每个着色副本,我们最终会得到一组单独的静态变量吗? 使用maven汇编插件而不是maven shade插件会有帮助吗


共 (1) 个答案

  1. # 1 楼答案

    您描述了一个场景,在这个场景中,同一个类可能会多次出现在类路径中

    在这样的应用程序中,类装入器将在查找该类时拾取第一个找到的类。一旦找到它,这个类将被这个类装入器装入并初始化,他将不再查找它。通常情况下,这不会导致问题,而且您仍然可以使用所需的单例:仅一个实例

    如果出于某种原因,您手头有多个类加载器,那么每个类加载器都可以从另一个位置加载这个类。因此,您可以以几个单例实例结束

    shade插件似乎不是最好的工具。我建议您仅将其用于打包在单个着色JAR(最终产品)中的独立应用程序

    我们总是使用汇编插件,因为它对打包的汇编提供了更细粒度的控制。但不应该使用着色JAR作为依赖项,而应该简单地使用核心库。即使在项目的不同依赖路径中有相同的依赖项,汇编插件也只会打包一次