从自定义的魔力访问Maven插件的运行时配置的最佳方式?(Best way to access th

2019-07-31 19:46发布

我正在写一个自定义的Maven2 MOJO。 我需要访问另外一个插件的运行时配置,从这个MOJO。

做这个的最好方式是什么?

Answer 1:

你可以得到目前已经在使用以下步骤构建使用插件的列表:

首先,你需要得到的Maven到当前项目注入到你的魔力,可以使用下面定义的类变量得到这个。

/**
 * The maven project.
 * 
 * @parameter expression="${project}"
 * @readonly
 */
 private MavenProject project;

然后你可以使用下面的方法得到这个版本使用的插件列表。

mavenProject.getBuildPlugins()

可以遍历虽然这列表,直到找到您要提取配置的插件。

最后,你可以配置为Xpp3Dom。

plugin.getConfiguration()

注意:如果你改变了其他插件的配置(而不仅仅是提取信息),它只会继续改变当前不相及后续阶段。



Answer 2:

使用属性肯定是一条路可走,但效果并不理想。 它仍然需要用户来定义整个POM多个地方$ {propertyName的}。 我想,让我的插件没有修改用户的POM,比插件定义本身的其他工作。

我没有看到访问另一个MOJO的运行时性能过于紧密耦合。 如果其他MOJO在构建层次结构定义的任何地方,我想我的MOJO尊重相同的配置。

我目前的解决办法是:

private Plugin lookupPlugin(String key) {

    List plugins = getProject().getBuildPlugins();

    for (Iterator iterator = plugins.iterator(); iterator.hasNext();) {
        Plugin plugin = (Plugin) iterator.next();
        if(key.equalsIgnoreCase(plugin.getKey())) {
            return plugin;
        }
    }
    return null;
}


/**
 * Extracts nested values from the given config object into a List.
 * 
 * @param childname the name of the first subelement that contains the list
 * @param config the actual config object
 */
private List extractNestedStrings(String childname, Xpp3Dom config) {

    final Xpp3Dom subelement = config.getChild(childname);
    if (subelement != null) {
        List result = new LinkedList();
        final Xpp3Dom[] children = subelement.getChildren();
        for (int i = 0; i < children.length; i++) {
            final Xpp3Dom child = children[i];
            result.add(child.getValue());
        }
        getLog().info("Extracted strings: " + result);
        return result;
    }

    return null;
}

这已经工作了几个小建立我已经与测试。 包括多模块的构建。



Answer 3:

我不知道你会怎么做,完全是,但在我看来,这可能不是最好的设计决策。 如果可能的话,你的目标应该是从任何其他插件解耦的Mojo在那里。

相反,我会建议使用自定义属性分解出单独的插件的配置的任何重复。

您可以通过使用属性部分设置在你的POM中自定义属性“foo”的:

<project>
  ...
  <properties>
    <foo>value</foo>
  </properties>
  ...
</project>

该物业foo是现在任何地方访问POM中使用美元符号+大括号表示法:

<somePluginProperty>${foo}</somePluginProperty>


文章来源: Best way to access the runtime configuration of a maven plugin from a custom mojo?