Как Maven определяет, какую версию плагина использовать для плагинов, используемых из командной строки?
(используя Maven 3.0.3 на Mac с Java 7)
когда я запускаю mvn dependency:analyze-duplicate
maven использует версию 2.1 (независимо от того, доступен ли 2.8 в моем локальном РЕПО или нет) плагина и жалуется:
[ERROR] Could not find goal 'analyze-duplicate' in plugin org.apache.maven.plugins:maven-dependency-plugin:2.1 among available goals unpack-dependencies,....
когда я запускаю его как mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:analyze
он работает нормально.
Я бы предположил, что maven всегда возвращается к самой последней версии (даже если еще не в локальном РЕПО), если версия явно не указана?
что я упустил? Спасибо всем за ваше время отвечать.
2 ответов
для некоторых плагинов Apache Maven определил версию по умолчанию в одном и только super-pom, который может быть обновлен с более новой версией Maven. Смотрите текущую магистраль: https://git-wip-us.apache.org/repos/asf?p=maven.git;a=blob_plain;f=maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0.xml
<pluginManagement>
<!-- NOTE: These plugins will be removed from future versions of the super POM -->
<!-- They are kept for the moment as they are very unlikely to conflict with lifecycle mappings (MNG-4453) -->
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</pluginManagement>
в Maven-3.1 были обновлены как Maven-dependency-plugin, так и Maven-release-plugin. Предыдущие версии все еще использовали 2.1 и 2.0 (в тот же приказ).
таким образом, это значение по умолчанию, если вы не указали версию в своем pom.xml
или если у вас его нет.
чтобы увидеть эффективный pom, выполните mvn org.apache.maven.plugins:maven-help-plugin:2.2:effective-pom
или help:effective-pom
, но затем вы полагаетесь (снова) на версию в super-pom.
описан процесс разрешения версии плагина здесь.
короче говоря Maven будет использовать первую версию, найденную по этим правилам в следующем порядке:
- версия, определенная в POM проекта
- версия, определенная в реестре плагинов (если включена)
- метаданные последней версии
- версия метаданных
поэтому посмотрите в своем проекте POM (или родительском pom), если вы указали версию для этого плагина есть.
обновление: Что касается вашей проблемы, причина в том, что Maven-dependency-plugin версии 2.1 указан в разделе pluginManagement maven супер пом. Ваш проект POM наследует эти настройки, и поэтому версия 2.1 используется по умолчанию (Upvote ответ @Robert Scholte, который указал на это первым!)