如何在没有项目的情况下从 Mojo 插件的 pom.xml 设置 Mojo 参数

Posted

技术标签:

【中文标题】如何在没有项目的情况下从 Mojo 插件的 pom.xml 设置 Mojo 参数【英文标题】:How can i set Mojo Paramater from the pom.xml of Mojo plugin without project 【发布时间】:2016-09-07 10:44:09 【问题描述】:

我写了一个 Mojo 插件。它有一个像这样的参数:

*@Mojo(name = "showModus", requiresProject = false, defaultPhase = LifecyclePhase.PROCESS_RESOURCES)<br>
public class ShowModus extends AbstractMojo  <br>
@Parameter (property = "modus", defaultValue = "$modus")<br>
private String modus;*

在 Mojo Plugin 的 Pom.xml 中,我为此定义了一个属性:

<properties><modus>1.1.1</modus></properties>

如果我在每个 mvn 的项目订单下直接调用 Mojo 目标,它工作正常

但是如果我直接调用 mojo 插件形式的 maven repo 或。在没有 mojo 插件的目录中,未设置参数方式。

我了解到mvn找不到mojo插件项目的pom.xml,因此无法设置参数值。

有什么方法可以将 mojo maven 插件的 pom 属性设置为生成的 plugin.xml 吗?

我想直接从 maven repo 调用(使用)mojo maven 插件,并带有某些参数,它们的值设置或从插件的 pom.xml 注入

问候

【问题讨论】:

【参考方案1】:

我不完全理解您为什么要将这些值写为pom.xml 中的属性。 在 Java 常量中编写要容易得多。但也许这个决定有一些方面。

一些基础知识:

    您可以使用MavenXpp3Reader 读取和解析pom.xml(该类是maven-model 模块的一部分) Maven 将 pom.xml 写入 jar 中的 /META-INF/maven/&lt;groupId&gt;/&lt;artifactId&gt;/pom.xml 插件本身在执行 maven 目标时位于类路径中 您可以使用getClass().getResourceAsStream(...) 访问类路径资源 可以通过getProperties方法获取属性

打包所有这些部分看起来像这样:

final String pathToPluginPom = "/META-INF/maven/de.example/example-maven-plugin/pom.xml";
try (InputStream stream = getClass().getResourceAsStream(pathToPluginPom)) 
    final MavenXpp3Reader reader = new MavenXpp3Reader();
    final Model model = reader.read(stream);
    final Properties properties = model.getProperties();
    final String myPropertyValue = properties.getProperty("myproperty");
    getLog().info("Property: " + myPropertyValue);
 catch (final IOException | XmlPullParserException ex) 
    getLog().error("ERROR!", ex);

【讨论】:

以上是关于如何在没有项目的情况下从 Mojo 插件的 pom.xml 设置 Mojo 参数的主要内容,如果未能解决你的问题,请参考以下文章

Java Maven MOJO - 从项目 POM 中获取信息

将价值从 Mojo 传递到 pom

如何在没有插件的情况下从特定类别的帖子的 URL 中删除日期?

Maven:我的 mojo 如何访问自己的资源?

如何在没有动画的情况下从集合视图中删除项目?

基本 maven 插件项目不工作,Mojo 插件描述符不生成