2013-03-27 74 views
0

我知道这是主观性问题,它很可能会被关闭。但我不知道在哪里问这个问题得到答案。从mojo修改maven插件配置的正确方法

maven android插件有一个小问题 - 它修改原始清单文件,如果你正在工作文件夹中运行maven,你的vcs提议你提交这些修改。

示例:如果使用测试版构建构建版本,我们会运行多个环境,它将修改AndroidManifest.xml中的应用程序名称。

这可以很容易地通过复制原始清单并将参考复制到android maven插件来解决。但是我决定让开发者更容易,所以插件会自动执行此操作,除非开发人员指定他希望在原始清单下完成此更新。

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

在摘要mojo AbstractAndroidMojo中定义的属性,它没有execute方法。而所有其他mojos扩展这个类。该定义是这样的:

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

我跟着这个answer

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

但不幸的是,这并不工作。有很多明确的方法可以使它工作,但所有这些方法都需要改变所有当前的mojos。

我想知道是否有人知道为什么答案不起作用或如何使其工作。

更新插件的代码可以在这里找到: https://github.com/emartynov/maven-android-plugin/tree/keep-android-manifest

感谢大家谁读,直到结束。

回答

1

你是否在相同的生命周期阶段运行你的目标?如果没有,在你提供的文章中写道:

注意:在当前阶段结束时会丢弃任何配置更改。

要考虑的另一件事是:目标是否按照您的期望运行?看看这篇文章:http://www.mkyong.com/maven/maven-plugin-execution-order-in-same-phase/ - 也许是你遇到问题的插件排序。

要考虑的其他事情:或许你更喜欢更清洁的解决方案 - 将这种功能添加到android-maven-plugin中? Manfred Moser通常愿意接受拉请求支持的提案;)

我会在我的插件中最合适地做同样的事情。唯一的区别是我重复使用maven-dependency-plugin中的目标来复制自定义插件生命周期内的依赖关系。我正在尝试为InstallShield项目构建插件。

+0

谢谢你的回答,但我已经停止了这个工作的想法 – 2013-11-23 20:49:20

+0

好的,需要清理一下。我尝试过使用相同的解决方案并失败 - 在MavenProject实例中添加了配置,但似乎即使运行顺序是正确的,也不会将它添加到Mojo中,就像它在早期实例化一样。我将使用maven-executor项目,但会尝试首先查看MavenSession和BuildPluginManager – tptak 2013-11-23 22:25:01