Подтвердить что ты не робот

Управление зависимостями 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, который не отвечает на мой вопрос

4b9b3361

Ответ 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, все заработало.