Maven2 - проблема с pluginManagement и отношениями отцов и детей

Статический контроль типов C# не позволит Вам сделать так, но можно одурачить его с кастингом для возражения. Я не рекомендовал бы делать это, это, вероятно, показывает архитектурную проблему, но так или иначе:

using System;

class Foo<T>
{
  public T value;

  public void Increment()
  {
   if (value is int) value = (T)(object)(((int)(object)value)+1);
  }
}

static class Program
{
    static void Main()
    {
     Foo<int> x = new Foo<int>();
     x.Increment();
     x.Increment();
      Console.WriteLine(x.value); 
    }     
}
16
задан Newtopian 13 August 2009 в 05:59
поделиться

3 ответа

Добавление конфигурации плагина в pluginManagement означает, что эта конфигурация будет использоваться, если плагин объявлен, но вам все равно нужно объявить плагин в разделе сборки любого POM, который хочет его использовать.

Ключевая часть, которая объясняет это из раздела, который вы процитировали, это:

Однако это настраивает только те плагины, на которые фактически ссылаются внутри элемента plugins в дочерних элементах

Итак, если вы сделаете это в дочернем pom, будет применена конфигурация из родительского:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-dependency-plugin</artifactId>
    </plugin>
  </plugins>
</build>

Обновление: чтобы ответить на фактический вопрос, контент из раздела pluginManagement всегда объединяется с любым объявление плагина. Чтобы родитель не делал этого, вы можете определить раздел pluginManagement в профиле, и активируйте этот профиль для дочерних проектов, но не для родительского. Затем дочерние проекты должны будут объявить этот профиль.

Например:

<profiles>
  <profile>
    <id>for-children</id>
    <build>
      <pluginManagement>
        <plugins>
          <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.0</version>
            <executions>
              <!--Some stuff for the children-->
            </executions>
          </plugin>
        </plugins>
      </pluginManagement>
    </build>  
  </profile>
</profiles>
<build>
  <plugins>
    <plugin>
      <artifactId>maven-dependency-plugin</artifactId>
        <version>2.0</version>
        <inherited>false</inherited> <!-- this perticular config is NOT for kids... for parent only -->
          <!--some stuff for adults only-->
        </executions>
     </plugin>
  </plugins>
</build>
13
ответ дан 30 November 2019 в 22:10
поделиться

Вы должны назначить идентификатор для выполнения, чтобы maven знала, какие из них перезаписывают друг друга, а какие являются независимыми.

0
ответ дан 30 November 2019 в 22:10
поделиться

Я всегда думал, что дочерний POM может наследовать определение подключаемого модуля из родительского раздела pluginManagement и указывать только выполнения, которые он хочет запустить из этого подключаемого модуля, ссылаясь на них с помощью ID и привязка выполнения к фазе . Пока определение parent находится в pluginManagement (а не непосредственно в подключаемых модулях) и не привязано к фазе, на этой фазе будет выполняться только конкретное выполнение (с идентификатором).

Из прочтения вышеизложенного и из моей текущей проблемы, похоже, что это неправда: похоже, что дочерний POM унаследует всю конфигурацию плагина, включая все исполнения. Что касается выполнения, единственное, что может сделать ребенок, - это переопределить определенные значения - он не может выбрать, какие выполнения запускать, а какие нет.

Это ошибка? Какая польза от возможности связывать каждое выполнение с фазой (или нет), если все исполнения будут выполняться? Я видел это только с maven-dependency-plugin: unpack (привязанным к фазе package ), но с другими плагинами мне просто повезло ...

Черт.

5
ответ дан 30 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: