Статический контроль типов 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);
}
}
Добавление конфигурации плагина в 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>
Вы должны назначить идентификатор для выполнения, чтобы maven знала, какие из них перезаписывают друг друга, а какие являются независимыми.
Я всегда думал, что дочерний POM может наследовать определение подключаемого модуля из родительского раздела pluginManagement и указывать только выполнения, которые он хочет запустить из этого подключаемого модуля, ссылаясь на них с помощью ID и привязка выполнения к фазе . Пока определение parent находится в pluginManagement (а не непосредственно в подключаемых модулях) и не привязано к фазе, на этой фазе будет выполняться только конкретное выполнение (с идентификатором).
Из прочтения вышеизложенного и из моей текущей проблемы, похоже, что это неправда: похоже, что дочерний POM унаследует всю конфигурацию плагина, включая все исполнения. Что касается выполнения, единственное, что может сделать ребенок, - это переопределить определенные значения - он не может выбрать, какие выполнения запускать, а какие нет.
Это ошибка? Какая польза от возможности связывать каждое выполнение с фазой (или нет), если все исполнения будут выполняться? Я видел это только с maven-dependency-plugin: unpack (привязанным к фазе package ), но с другими плагинами мне просто повезло ...
Черт.