从mojo修改maven插件配置的正确方法

从mojo修改maven插件配置的正确方法,maven,maven-3,maven-plugin,Maven,Maven 3,Maven Plugin,我知道这是一个主观问题,很可能会被关闭。但我不知道从哪里问这个问题才能得到答案 maven android插件有一个小麻烦——它修改了原始清单文件,如果您在工作文件夹中运行maven,您的vcs会建议您提交这些更改 示例:我们有几个环境要运行,如果我使用beta环境构建,它将在AndroidManifest.xml中修改应用程序名称 这可以通过复制原始清单并将副本引用到android maven插件来轻松解决。但我已经决定让开发人员更容易,所以插件将自动完成这项工作,除非开发人员指定要在原始清单

我知道这是一个主观问题,很可能会被关闭。但我不知道从哪里问这个问题才能得到答案

maven android插件有一个小麻烦——它修改了原始清单文件,如果您在工作文件夹中运行maven,您的vcs会建议您提交这些更改

示例:我们有几个环境要运行,如果我使用beta环境构建,它将在AndroidManifest.xml中修改应用程序名称

这可以通过复制原始清单并将副本引用到android maven插件来轻松解决。但我已经决定让开发人员更容易,所以插件将自动完成这项工作,除非开发人员指定要在原始清单下完成此更新

修改功能(复制文件并替换保留对文件引用的属性)很容易,但问题是我需要将此属性传递给其他mojo

抽象mojo
AbstractAndroidMojo
中定义的属性,它没有
execute
方法。所有其他Mojo都扩展了这个类。定义如下:

/**
 * The <code>AndroidManifest.xml</code> file.
 *
 * @parameter default-value="${project.basedir}/AndroidManifest.xml"
 */
protected File androidManifestFile;
我接着说:

但不幸的是,这不起作用。有许多明确的方法可以使其工作,但所有这些方法都需要更改所有当前的MOJO

我想知道是否有人知道为什么答案不起作用,或者如何让它起作用

更新插件的代码可在此处找到:


感谢所有阅读到最后的读者。

您是否在同一生命周期阶段运行您的目标?如果没有,在你提供的帖子中写着:

注意:在当前阶段结束时,将放弃任何配置更改

要考虑的另一件事是:目标是否按您预期的顺序运行?看看这篇文章:-也许是你在插件的订购上遇到了问题

还有一件事需要考虑:也许你更喜欢一个更干净的解决方案——在android maven插件中添加这样的功能?曼弗雷德·莫瑟(Manfred Moser)通常对拉式请求支持的提案持开放态度;)


我很可能会在我的插件中做同样的事情。唯一的区别是,我正在重用maven dependency plugin中的目标,以复制自定义插件生命周期中的依赖项。我正在尝试为InstallShield项目构建制作一个插件。

谢谢您的回答,但我已经停止了这个想法,需要澄清一下。我尝试过使用相同的解决方案,但在MavenProject实例中添加了失败的配置,但似乎即使运行顺序正确,也没有像之前实例化的那样将其添加到Mojo中。我将使用maven executor项目,但将首先尝试查看MavenSession和BuildPluginManager
private void updatePluginConfiguration ( String newManifestFileValue )
{
    for ( Plugin plugin : project.getBuild().getPlugins() )
    {
        if ( plugin.getArtifactId().equals( "android-maven-plugin" ) )
        {
            Xpp3Dom configuration = (Xpp3Dom) plugin.getConfiguration();
            Xpp3Dom manifestFileParameter = configuration.getChild( "androidManifestFile" );
            if ( manifestFileParameter == null )
            {
                manifestFileParameter = new Xpp3Dom( "androidManifestFile" );
                configuration.addChild( manifestFileParameter );
            }
            manifestFileParameter.setValue( newManifestFileValue );
            break;
        }
    }
}