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 楼答案
您描述了一个场景,在这个场景中,同一个类可能会多次出现在类路径中
在这样的应用程序中,类装入器将在查找该类时拾取第一个找到的类。一旦找到它,这个类将被这个类装入器装入并初始化,他将不再查找它。通常情况下,这不会导致问题,而且您仍然可以使用所需的单例:仅一个实例
如果出于某种原因,您手头有多个类加载器,那么每个类加载器都可以从另一个位置加载这个类。因此,您可以以几个单例实例结束
shade插件似乎不是最好的工具。我建议您仅将其用于打包在单个着色JAR(最终产品)中的独立应用程序
我们总是使用汇编插件,因为它对打包的汇编提供了更细粒度的控制。但不应该使用着色JAR作为依赖项,而应该简单地使用核心库。即使在项目的不同依赖路径中有相同的依赖项,汇编插件也只会打包一次