Собственный плагин maven с вложенными сложными объектами и значениями по умолчанию

Разрабатывая некоторые из моих плагинов Maven, я натолкнулся на идею более структурированного способа предоставления конфигураций, но я не уверен, что есть способ, который работает.

Возможно ли иметь MOJO, который имеет экземпляры из BaseSettings а также MavenSettings используется таким образом, или я вынужден "засунуть" эти поля непосредственно в мои MOJO?

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugins.annotations.Parameter;

public abstract class SomeSpecialAbstractMojo extends AbstractMojo{

    @Parameter
    protected BaseSettings baseSettings = new BaseSettings();

    @Parameter
    protected MavenSettings mavenSettings = new MavenSettings();
}

-

import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;

public class MavenSettings {

    @Parameter(name = "project", property = "project", readonly = true, required = true)
    protected MavenProject project;

    @Component
    protected MavenProjectHelper projectHelper;
}

-

import org.apache.maven.plugins.annotations.Parameter;

public class BaseSettings {

    @Parameter(name = "skip", defaultValue = "false")
    protected boolean skip = false;

    @Parameter(name="verbose", defaultValue = "true")
    protected boolean verbose = true;
}

Идея заключалась в том, чтобы объединить некоторые общие свойства в свое собственное "пространство", что делает мои MOJO меньше и мой код более структурированным.

РЕДАКТИРОВАТЬ: Я хочу иметь такой вид конфигурации исполнения:

<configuration>
    <baseSettings>
        <verbose>true</verbose>
    </baseSettings>
    <!-- mavenSettings is omitted, I want to "auto-use-default" here -->
    <otherComplexSettings>
        <complexValue1>value1</complexValue1>
    </otherComplexSettings>
</configuration>
<executions>
    <execution>
        <id>goal1-call</id>
        <goals>
            <goal>mojo1</goal>
        </goals>
        <configuration>
            <otherComplexSettings>
                <complexValue1>override-value1</complexValue1>
            </otherComplexSettings>
        </configuration>
    </execution>
    <execution>
        <id>goal2-call</id>
        <goals>
            <goal>mojo2</goal>
        </goals>
        <configuration>
            <!-- only part of mojo2 -->
            <anotherComplexSettings>
                <complexValue3>value3</complexValue3>
            </anotherComplexSettings>
        </configuration>
    </execution>
    <execution>
        <id>goal3-call</id>
        <goals>
            <goal>mojo3</goal>
        </goals>
        <configuration>
            <otherComplexSettings>
                <complexValue1>override-value012</complexValue1>
            </otherComplexSettings>
        </configuration>
    </execution>
    <execution>
        <id>goal4-call</id>
        <goals>
            <goal>mojo4</goal>
        </goals>
    </execution>
</executions>

0 ответов

Не уверен, что это ответ на ваш вопрос, но вы можете использовать свои собственные POJO в качестве параметров. Вот пример. Вы также можете использовать свойства или карты.

Другие вопросы по тегам