我正在尝试构建一个内部使用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>
或类似物对我来说也没问题。
答案 0 :(得分:1)
我不认为有一种直接的方式去做你所要求的事情。但是,您可以尝试以下替代方案。
1)您可以使用项目属性:
<project>
...
<properties>
<key1>value1</key1>
<key2>value1</key2>
</properties>
...
</project>
2)有几种方法可以在运行时访问mojo配置:请参阅答案here。
3)这更像是一个想法,而不是一个答案:您可以查看@Parameter
注释的工作原理,并将代码添加到您的插件中,该代码将使用相同的注释并填充Map
或Properties
对象。