Может и должен Maven POM указать, требуется ли Maven 3 или новее?
В настоящее время я делаю некоторую очистку проектов Java, которые используют Maven, и используют среду IDE NetBeans для "отладки" проблем в POM. Я установил Maven 3.0.4 в среду IDE как версию Maven, но другие разработчики или наша система непрерывной интеграции могут иметь разные настройки.
Возможно ли "принудительно применять" конкретную версию Maven непосредственно в POM (например, с помощью определенного элемента Maven 3)?
Ответы
Ответ 1
Да, вы можете и должны. Некоторые плагины Maven требуют Maven 3 или новее.
Используйте плагин maven-enforcer, добавив следующее к вашему pom.xml
:
<build>
<plugins>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.3.1</version>
<executions>
<execution>
<id>enforce-maven-3</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>3.0.5</version>
</requireMavenVersion>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Ответ 2
Другим вариантом является использование элемента предварительных условий в pom, например:
<project>
...
<prerequisites>
<maven>3.0.0</maven>
</prerequisites>
...
</project>
Как отмечено ответ Михала Калиновского - этот простой подход не так хорошо работает для детских проектов.
Краткое описание того, какой подход будет работать лучше всего для вас, см. здесь: принудительное использование maven 3 - когда использовать плагин maven для принудительного использования? когда использовать элемент предпосылки pom?
Ответ 3
Лучшее, что вы можете сделать, это использовать плагин Enforcer. Вот пример:
http://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html
В Maven для этого не существует метода "вне коробки". Фактически существует тег prerequisites
, но он не работает хорошо, потому что дети не наследуют его.