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