Только что начал с Maven по-настоящему;Я получил большой сюрприз сразу.
Я понимаю (или думаю, что понимаю) концепцию толстых банок / банок.Упакуйте ваш код со всеми зависимостями и т. Д. maven-shade-plugin
, нашел документы, какой-то пример, проверил, что он работает.Теперь добавьте его в мой POC-проект, который пришел из maven-archetype-quickstart - что может пойти не так, а?
Короче говоря, быстрый старт организовать следующим образом:
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
...
Так что я просто добавил плагин для затенения, готовый назвать его днем:
<!-- Maven Shade Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<!-- Run shade goal on package phase -->
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
Не так быстро.Во-первых, я заметил, что mvn clean package
не упоминал, что выполняется maven-shade-plugin (как это делал рабочий пример).Последовали часы поисков, и я смотрел в лицо "первопричину" - <pluginManagement>
, предложенный архетипом быстрого старта, было ли это - как-то .Удаление этого тега волшебным образом позволило maven.shade.plugin выполнять свою работу.В противном случае, нет.
(Реплика: https://github.com/alexakarpov/shade-me unshade
- это плохая ветвь, мастер - хорошая).
Поговорим о нарушении принципа наименьшего сюрприза, а =) Может кто-нибудь объяснить, что происходит?Комментарий в сгенерированном pom упомянул кое-что о родительском pom, но я пока ничего не делаю с настройкой multi-pom ..