【问题标题】:maven-shade-plugin and singletonsmaven-shade-plugin 和单例
【发布时间】:2016-09-27 17:04:34
【问题描述】:

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

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-plugin 代替 maven-shade 插件会有帮助吗?

【问题讨论】:

  • maven-shade-plugin 和单例有什么关系?
  • 我假设在一个多阴影项目中,我们包括了几个(例如)mypackage.Mysingleton 类的实现。而且我怕这些实现看不到对方的静态属性。

标签: java maven maven-shade-plugin


【解决方案1】:

您描述了一个场景,其中同一个类可能不止一次地出现在类路径中。

在这样的应用程序中,类加载器将在查找该类时选择第一个找到的类。一旦找到了,这个类就被这个类加载器加载初始化了,他不会再去查找了。通常这不会导致问题,并且您仍然可以拥有所需的单例:只有一个实例。

如果 - 由于某种原因 - 您手头有多个类加载器,它们每个都可以从另一个位置加载这个类。所以你可以以几个单例实例结束。

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

我们总是使用程序集插件,因为它可以对打包的程序集进行更细粒度的控制。但是您不应该使用阴影 JAR 作为依赖项,而应该简单地使用核心库。即使你的项目中各个依赖路径有相同的依赖,组装插件也只会打包一次。

【讨论】:

  • 好的,我知道了。我希望我可以减少对 maven-shade-plugin 的依赖。在像我们这样的大型组织中,“大型项目”依赖于几个组件,而这些组件又依赖于同一个库。该库是一个活跃的项目,有时会在其中引入重大更改。如果没有 maven-shade-plugin,所有组件都必须同步升级,这是一场后勤噩梦。 maven-shade-plugin 似乎可以解决这个问题,但现在我看到了这些问题。
猜你喜欢
  • 2014-09-05
  • 2019-03-04
  • 1970-01-01
  • 2013-08-19
  • 2013-02-19
  • 2013-04-11
  • 1970-01-01
  • 2015-09-24
  • 2013-11-28
相关资源
最近更新 更多