Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java maven shade插件和单例_Java_Maven_Maven Shade Plugin - Fatal编程技术网

Java maven shade插件和单例

Java maven shade插件和单例,java,maven,maven-shade-plugin,Java,Maven,Maven Shade Plugin,我想我已经知道答案了,但如果有人能帮我确认一下,我将不胜感激 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 a

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

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 assembly插件而不是maven shade插件会有帮助吗?

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

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

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

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


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

maven shade插件与singleton的关系如何?我假设在一个多阴影项目中,我们包含了几个(例如)mypackage.Mysingleton类的实现。我担心这些实现无法看到彼此的静态属性。我希望我能减少我们对maven shade插件的依赖。在像我们这样的大型组织中,“megaproject”依赖于几个组件,而这些组件又依赖于同一个库。该库是一个活动项目,偶尔会引入一些破坏性的更改。没有maven shade插件,所有组件都必须同步升级,这是一场后勤噩梦。maven shade插件似乎可以解决这个问题,但现在我看到了这些问题。