如何以编程方式调用 maven-resources-plugin

2023-12-27

我正在编写一个自定义 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无法访问我的魔力project,以及CopyResourceMojo没有setProject()我可以使用的方法。

I have考虑使用mojo-executor-maven-plugin。我遇到的问题是,使用这个库调用插件需要编写反映该插件的 XML 配置的代码。我的插件将收到一个资源列表(就像maven-resources-plugin可以)所以如果我要使用mojo-executor-maven-plugin,我想我必须编写代码来评估包含和排除。我希望利用maven-resources-plugin为此,该行为与以资源列表作为参数的其他插件 100% 一致。

有没有其他方法可以从代码调用插件,或者将项目注入另一个mojo?或者还有其他方法可以实现这一点?


我最终找到了一种使用 MavenResourcesFiltering 和 MavenResourcesExecution 来做到这一点的方法。文档在这里:http://maven.apache.org/shared/maven-filtering/usage.html http://maven.apache.org/shared/maven-filtering/usage.html

我能够让这段代码做我想做的事:

/* Class members */
@Parameter(defaultValue="${project}",required=true, readonly=true)
protected MavenProject project;

@Parameter( defaultValue = "${session}", required = true, readonly = true )
protected MavenSession session;

@Component( role=org.apache.maven.shared.filtering.MavenResourcesFiltering.class, hint="default")
protected MavenResourcesFiltering mavenResourcesFiltering;

@Parameter( property = "encoding", defaultValue = "${project.build.sourceEncoding}" )
protected String encoding;

@Parameter
protected List<Resource> resources;


...

//Inside my plugin's execute() method: 
List<String> nonFilteredFileExtensions = new ArrayList<String>();
//resources is a parameter to my plugin, dir and filters are calculated within the plugin
MavenResourcesExecution mre = new MavenResourcesExecution(resources, dir, this.project, this.encoding, filters, nonFilteredFileExtensions, session);
mavenResourcesFiltering.filterResources(mre);

我以通常的方式在插件配置中定义资源:

<resources>
    <resource>
        <directory>G:/MyPluginProject/src/test/resources/project-to-test/resources</directory>
        <excludes>
            <exclude>*.DAT</exclude>
        </excludes>
        <filtering>true</filtering>
    </resource>
</resources>

奇怪的是<directory>,绝对路径工作正常,但我似乎无法让它与诸如${basedir}。我可能在这里忽略了一些明显的事情......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式调用 maven-resources-plugin 的相关文章

随机推荐