如何在Maven Mojo中使用整个插件配置

时间:2018-01-03 21:55:44

标签: java spring maven

我正在尝试构建一个内部使用Spring Boot应用程序的Maven插件。

现在,我想使用<configuration>中的pom.xml标记配置Spring Boot应用。

<plugin>
    <groupId>org.example</groupId>
    <artifactId>my-maven-plugin</artifactId>
    <version>0.1.0-SNAPSHOT</version>
    <configuration>
        <my-maven-plugin.key1>value1</my-maven-plugin.key1>
        <my-maven-plugin.key2>value2</my-maven-plugin.key2>
    </configuration>
</plugin>

可以使用@Parameter注释将这些属性注入Mojo。

@Mojo(name = "generate", defaultPhase = LifecyclePhase.SITE)
public class GenerateMojo extends AbstractMojo {

    @Parameter(name = "my-maven-plugin.key1", readonly = true)
    private String key1;

    @Parameter(name = "my-maven-plugin.key2", readonly = true)
    private String key2;

    @Override
    public void execute() {

        Properties props = new Properties();
        props.setProperty("my-maven-plugin.key1", key1);
        props.setProperty("my-maven-plugin.key2", key2);

        new SpringApplicationBuilder(GenerateApp.class)
                .web(false)
                .bannerMode(OFF)
                .logStartupInfo(false)
                .properties(props)
                .run();
    }
}

正在创建一个可以在Spring中使用的Properties对象。但是我想避免自己构建Properties

虽然我可以像这样重新排列<configuration>

<configuration>
    <my-maven-plugin>
        <key1>value1</key1>
        <key2>value2</key2>
    </my-maven-plugin>
</configuration>

并注入所有属性

@Parameter(name = "my-maven-plugin", readonly = true)
private Properties myProperties;

我不希望将所有属性包装在另一个标签中,因为这在Maven插件中感觉更自然。

有没有办法在Maven中的单个Properties对象中注入整个配置而不将属性包装在另一个标签中? Map<String, Object>或类似物对我来说也没问题。

1 个答案:

答案 0 :(得分:1)

我不认为有一种直接的方式去做你所要求的事情。但是,您可以尝试以下替代方案。

1)您可以使用项目属性:

<project>
  ...
  <properties>
    <key1>value1</key1>
    <key2>value1</key2>
  </properties>
  ...
</project>

2)有几种方法可以在运行时访问mojo配置:请参阅答案here

3)这更像是一个想法,而不是一个答案:您可以查看@Parameter注释的工作原理,并将代码添加到您的插件中,该代码将使用相同的注释并填充MapProperties对象。