Есть еще одна вещь, которая, на мой взгляд, недостаточно выделена, и это нежелательное наследование .
Вот пример:
Я заявляю в моем parent
pom:
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
</dependencies>
бах! У меня это есть в моих Child A
, Child B
и Child C
модулях:
- Причастность, унаследованная от детских помпонов
- Одно место для управления
- Нет необходимости переопределять что-либо в детских poms
- Я все еще могу переопределить и переопределить на
version 18.0
за Child B
, если захочу.
Но что, если мне не понадобится гуава в Child C
, а также в будущих модулях Child D
и Child E
?
Они все еще наследуют его, и это нежелательно!
Это похоже на запах кода Java God Object, где вы наследуете некоторые полезные биты от класса, а также массу нежелательных вещей.
Здесь <dependencyManagement>
вступает в игру. Когда вы добавляете это в родительский pom, все ваши дочерние модули перестают видеть его . И, таким образом, вы вынуждены заходить в каждый отдельный модуль, который ему нужен, и объявлять его снова (Child A
и Child B
, но без версии).
И, очевидно, вы не делаете это для Child C
, и, следовательно, ваш модуль остается худым.