【问题标题】:How to use entire plugin configuration in Maven Mojo如何在 Maven Mojo 中使用整个插件配置
【发布时间】:2018-01-03 21:55:43
【问题描述】:

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

现在,我想使用 pom.xml 中的 <configuration> 标记使 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

虽然我可以像这样重新排列&lt;configuration&gt;

<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&lt;String, Object&gt; 或类似名称对我来说也可以。

【问题讨论】:

  • 您为什么要尝试将 Spring Boot 集成到 Maven 插件中?出于什么目的?你想解决什么样的问题?
  • Plexus 文档让我很困惑,我不想解开 Sisu/Guice 的混乱。我正在构建一个用于构建静态网站/博客的命令行应用程序,当我 90% 的时间都在使用 Spring (Boot) 时,这对我来说是最有效的方式。我正在尝试在不依赖任何构建工具的情况下构建它,而只是编写将其转换为 Maven 或 Gradle 插件的瘦适配器。
  • 使用spring boot parent和一些依赖还不够瘦?
  • 我明白你的意思。可能使用 Maven Exec 插件足以在我的 Maven 生命周期中使用独立的 Spring Boot 应用程序。我会考虑到这一点。谢谢你质疑我的计划。 ;)

标签: java spring maven


【解决方案1】:

我认为没有直接的方法来做你所要求的。但是,您可以尝试以下替代方案。

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

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

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

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

【讨论】:

  • 感谢您的回答。我会玩你建议的方法。尤其是备选方案 2) 和 3) 看起来很有希望。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多