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

时间:2016-09-07 10:44:09

标签: maven-plugin mojo

我写了一个Mojo插件。它有一个Pamameter,如:

*@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插件的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 个答案:

答案 0 :(得分:0)

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

一些基础知识:

  1. 您可以使用MavenXpp3Reader阅读并解析pom.xml(此类是maven-model模块的一部分)
  2. Maven将pom.xml写入/META-INF/maven/<groupId>/<artifactId>/pom.xml
  3. 的jar中
  4. 插件本身在执行maven目标时位于类路径上
  5. 您可以使用getClass().getResourceAsStream(...)
  6. 访问类路径资源
  7. 您可以使用方法getProperties
  8. 获取属性

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

    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);
    }