Управление зависимостями Maven для зависимостей плагина
В последнее время я столкнулся с проблемой:
Как я установил управление зависимостями для моего проекта, у меня был дочерний pom, использующий плагин с зависимостями, который я хочу синхронизировать с зависимостями, объявленными в моем управлении зависимостями.
В корневом помпе я заявил в своем управлении зависимостями:
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.4.0</version>
</dependency>
...
<dependencies>
<dependencyManagement>
И в дочернем помпе у меня есть плагин, которому нужен gwt-user:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.4.0</version>
<dependencies>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.4.0</version>
</dependency>
...
</dependencies>
...
</plugin>
Однако, если я удалю версию зависимости, используемую в gwt-maven-plugin, компиляция завершится неудачно.
Есть ли другой способ его достижения?
PS: Существует связанный пост Выбор версии зависимостей в maven и плагине maven, который не отвечает на мой вопрос
Ответы
Ответ 1
Согласно следующим ссылкам, это не представляется возможным:
Вот обходной путь, который я нашел, и хотел поделиться со всеми, если у других людей была такая же проблема:
В моем корневом помпе я определил свойство, управление зависимостями и управление плагином:
<properties>
<gwtVersion>2.4.0</gwtVersion>
<gwtMavenPluginVersion>2.4.0</gwtMavenPluginVersion>
</properties>
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>${gwtVersion}</version>
</dependency>
...
<dependencies>
<dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>${gwtMavenPluginVersion}</version>
<dependencies>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>${gwtVersion}</version>
</dependency>
...
</dependencies>
...
</plugins>
...
</pluginManagement>
</build>
И в моем дочернем пом, используя отношения, предоставляемые с помощью управления плагинами (см. Maven2 - проблема с подключением pluginManagement и отношения родитель-потомок), я просто объявляю зависимость плагина
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
</plugin>
Теперь, если я изменю версию в свойствах, она автоматически воздействует на все прямые зависимости и зависимостей плагина.
Ответ 2
Для родительского POM для управления версиями плагина, которые использует ребенок, вы должны объявить <plugin>
в разделе <pluginManagement>
родительского POM.
Вы определили com.google.gwt:gwt-user
как <dependency>
в разделе <dependencyManagement>
.
Я не уверен, планируете ли вы использовать gwt-user
как плагин или как зависимость, но он должен быть указан как один и тот же объект как для наследования для работы.
Ответ 3
Другая возможность заключается в том, чтобы импортировать все зависимости родительского POM:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.4.0</version>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}</version>
</dependency>
...
</dependencies>
...
</plugin>
Не самое красивое решение, но работает:-)
Ответ 4
В моем случае я использовал плагин причала maven с зависимостью от hsqldb. Я скопировал некоторые образцы строк из книги соната (я думаю, что там, где я получил строки) для использования плагина причала, который задал groupId как hsqldb. Я использую версию 2.3.2 hsqldb. В моем родительском pom в разделе dependencyManagement и моем модуле persistence groupId является org.hsqldb. Неисправность groupIds была причиной того, что я получил ошибку, потому что в этой старой группе не существует версии 2.3.2. Как только я сменил groupId с hsqldb на org.hsqldb, все заработало.