【发布时间】:2014-04-15 18:06:13
【问题描述】:
我正在编写一个自定义 Maven 插件,插件的部分工作是过滤复制一些资源。
我写的代码是这样的:
CopyResourcesMojo rm = new CopyResourcesMojo();
rm.setOutputDirectory(outputDir); //determined dynamically in a loop
rm.setOverwrite(true);
rm.setFilters(filters); //determined dynamically in a loop
rm.setResources(this.resources); //Actually is of type List<Resource>
rm.execute(); //NulPointerException because rm's project member is null.
这会引发NullPointerException,因为CopyResourceMojo 无法访问我的mojo 的project,并且CopyResourceMojo 没有我可以使用的setProject() 方法。
我已经研究过使用mojo-executor-maven-plugin。我遇到的问题是,使用这个库调用插件涉及编写反映该插件的 XML 配置的代码。我的插件将收到一个资源列表(就像maven-resources-plugin 一样)所以如果我要使用mojo-executor-maven-plugin,我想我必须编写代码来评估包含和排除。我希望为此使用maven-resources-plugin,以便该行为与其他将资源列表作为参数的插件100% 一致。
有没有其他方法可以从代码中调用插件,或者将项目注入另一个 mojo?或者其他方式来实现这一点?
【问题讨论】:
-
问题是你到底想用你的插件实现什么?您真的确定需要编写一个特殊的插件来满足您的需求吗?你能解释一下它们可能是其他插件已经完成了你需要的所有东西吗?
-
@khmarbaise:基于插件配置中的值列表,插件创建一系列自定义过滤器文件,并选择性地过滤具有特定文件的某些资源。它实际上可以在没有任何特殊插件的情况下完成,但是这样做的配置有点吓人,我担心它会成为维护的噩梦。在 Java 中实现相同的目标(创建过滤器)比在 pom 文件中要容易得多。现在我希望能够从插件中运行复制/过滤过程,并在特定资源上使用特定过滤器。
-
@khmarbaise:这是我们构建过程的一部分,我还没有看到任何类似的插件。
标签: java maven maven-plugin