2016-09-27 2 views
2

Я думаю, что я уже знаю ответ, но был бы признателен, если кто-то сможет подтвердить это для меня.maven-shade-plugin and singletons

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 plugin help?

+0

Как maven-shade-plugin связан с singleton? –

+0

Я предполагаю, что в многостраничном проекте мы включаем несколько реализаций класса (например) mypackage.Mysingleton. И я боюсь, что эти реализации не могут видеть статические свойства друг друга. – Alexander

ответ

1

Вы описали сценарий, в котором один и тот же класс может оказаться в пути к классам более одного раза.

В таком приложении загрузчик классов заберет первый найденный при поиске этого класса. Как только он ее обнаружит, этот класс загружается и инициализируется этим загрузчиком классов, и он больше не будет искать его. Обычно это не приводит к проблемам, и вы по-прежнему будете иметь синглтон, как хотите: только один экземпляр.

Если по какой-либо причине у вас есть несколько классных погрузчиков под рукой, каждый из них может загрузить этот класс из другого места. Таким образом, вы можете завершить несколько экземпляров singleton.

Плагин для теней, кажется, не лучший инструмент для этого. Я бы предложил использовать его только для автономных приложений, которые вы упаковываете в один затененный JAR - конечный продукт.

Мы всегда используем плагин сборки, поскольку он обеспечивает более мелкозернистый контроль над упакованным сборкой. Но вы не должны использовать затененные JAR как зависимости, вместо этого просто используйте основные библиотеки. Даже если у вас одинаковая зависимость в разных путях зависимостей в вашем проекте, плагин сборки будет упаковывать его только один раз.

+0

Хорошо, я понял. Хотел бы я уменьшить нашу зависимость от maven-shade-plugin. В такой крупной организации, как наша, «мегапроект» зависит от нескольких компонентов, которые, в свою очередь, зависят от одной и той же библиотеки. Эта библиотека является активным проектом, и время от времени в нее вносятся изменения. Без maven-shade-plugin все компоненты должны были быть обновлены синхронно, что было логичным кошмаром. maven-shade-plugin, казалось, вылечил это, но теперь я вижу эти проблемы с этим. – Alexander