我知道这是主观问题,很可能会被关闭。但我不知道在哪里问这个问题才能得到答案。
maven android插件有一个小烦人的东西 - 它修改原始清单文件,如果你在工作文件夹中运行maven,你的vcs建议你提交这些更改。
示例:如果我使用beta环境构建版本,我们会运行多个环境,它会修改 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
感谢所有读到最后的人。
答案 0 :(得分:1)
您是否在同一生命周期阶段内实现目标?如果没有,在你提供的帖子中写道:
注意:在当前阶段结束时,将丢弃任何配置更改。
另一件需要考虑的事情是:目标按预期顺序运行吗?看看这篇文章:http://www.mkyong.com/maven/maven-plugin-execution-order-in-same-phase/ - 也许是你遇到问题的插件排序。
要考虑的其他事情:或许你更喜欢更清洁的解决方案 - 将这样的功能添加到android-maven-plugin? Manfred Moser通常对拉动请求支持的提案持开放态度;)
我最有可能在我的插件中做同样的事情。唯一的区别是我正在重用maven-dependency-plugin中的目标来复制我的自定义插件生命周期中的依赖项。我正在尝试为InstallShield项目构建一个插件。