Оказывается, это сложно сделать в основном из-за времени «настройки» плагинов в зависимости от времени выполнения Maven. Изменение «конфигурации» из getBuildPlugins обычно не работает.
Лучшим методом является значение по умолчанию, если вы пишете целевой плагин, в противном случае используйте свойства.
Со свойствами, но вы должны быть осторожны при использовании свойств. Следует помнить, что если ваше POM (или любой родительский элемент) определяет значение для свойства, ссылка $ {property} будет заменена при загрузке POM. Однако если свойство «property» отсутствует, ссылка $ {property} остается и заменяется только нулевым значением в последний возможный момент.
«значение по умолчанию» также оценивается в последний возможный момент, и я думаю, что это более безопасное решение, поскольку существует логическая причина, по которой его следует оценивать в последний возможный момент, где-как несуществующее свойство может быть просто деталь реализации, которая может измениться в будущих версиях Maven.
В моем случае мне пришлось прибегнуть к свойствам, потому что я хотел контролировать «classesDirectory» плагина surefire. Я хотел, чтобы он продолжал использовать значение по умолчанию $ {project.build.outputDirectory}, когда Cobertura не был запущен, но когда он запускался, я хотел, чтобы он использовал $ {project.build.outputDirectory} /generated-classes/cobertura.
.
Определите в разделе плагинов:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<classesDirectory>${instrumentedClassesDirectory}</classesDirectory>
</configuration>
</plugin>
Затем в плагине «source»:
getProject().getProperties().put("instrumentedClassesDirectory", coberturaDir);
И убедитесь, что ни в коем случае не помещайте что-либо подобное в любой POM:
<properties>
<instrumentedClassesDirectory>${project.build.outputDirectory}</instrumentedClassesDirectory>
</properties>
потому что, если вы это сделаете, даже если значение свойства установлено вашим исходным плагином, целевой плагин не увидит значение. Вы можете игнорировать это последнее предупреждение, если вы используете свойство, переданное в значение по умолчанию исходного плагина, но, как сказано в моем случае, это не сработает, потому что я не хотел изменять значение project.build.outputDirectory.