This is an automated email from the ASF dual-hosted git repository. slachiewicz pushed a commit to branch fix/issue-267-use-project-files-velocity in repository https://gitbox.apache.org/repos/asf/maven-remote-resources-plugin.git
commit 89f44f2db0e07c603428e5f8c2892a7f3225ce40 Author: Elliotte Rusty Harold <[email protected]> AuthorDate: Sun Aug 2 12:49:19 2026 +0000 Render project .vm overrides with Velocity when useProjectFiles is set (#267) --- .../remote/AbstractProcessRemoteResourcesMojo.java | 27 ++++++++++++++++++---- .../resources/remote/RemoteResourcesMojoTest.java | 25 ++++++++++++++++++++ 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java b/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java index 1dcda56..715456f 100644 --- a/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java +++ b/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java @@ -706,15 +706,34 @@ public abstract class AbstractProcessRemoteResourcesMojo extends AbstractMojo { return false; } - private boolean copyProjectRootIfExists(File outputFile, String bundleResourceName) throws IOException { + private boolean copyProjectRootIfExists( + File outputFile, String bundleResourceName, VelocityContext context, String encoding) + throws IOException, MojoExecutionException { if (!useProjectFiles) { return false; } File source = new File(project.getBasedir(), bundleResourceName); + File templateSource = new File(project.getBasedir(), bundleResourceName + TEMPLATE_SUFFIX); + + if (!source.exists() && templateSource.exists()) { + source = templateSource; + } + if (source.exists()) { - getLog().debug("Use project file '" + source + "' as resource"); - FilteringUtils.copyFile(source, outputFile, null, null, ChangeDetection.CONTENT); + if (source == templateSource) { + getLog().debug("Use project file '" + source + "' as resource with Velocity"); + try (CachingOutputStream os = new CachingOutputStream(outputFile); + Writer writer = getWriter(encoding, os); + Reader reader = getReader(encoding, source)) { + velocity.evaluate(context, writer, "", reader); + } catch (ParseErrorException | MethodInvocationException | ResourceNotFoundException e) { + throw new MojoExecutionException("Error rendering velocity resource: " + source, e); + } + } else { + getLog().debug("Use project file '" + source + "' as resource"); + FilteringUtils.copyFile(source, outputFile, null, null, ChangeDetection.CONTENT); + } return true; } @@ -1009,7 +1028,7 @@ public abstract class AbstractProcessRemoteResourcesMojo extends AbstractMojo { continue; } - if (copyProjectRootIfExists(outputFile, projectResource)) { + if (copyProjectRootIfExists(outputFile, projectResource, context, bundle.getSourceEncoding())) { continue; } diff --git a/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java b/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java index ef101de..b7c0168 100644 --- a/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java +++ b/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java @@ -372,6 +372,31 @@ public class RemoteResourcesMojoTest extends AbstractMojoTestCase { assertSame(snapshotArtifact, project.getArtifacts().iterator().next()); } + public void testUseProjectFilesRendersVelocityTemplate() throws Exception { + final MavenProjectResourcesStub project = createTestProject("default-useprojectfiles"); + final ProcessRemoteResourcesMojo mojo = lookupProcessMojoWithSettings(project, new String[] {"test:test:1.4"}); + + setupDefaultProject(project); + + FileUtils.fileWrite( + new File(project.getBasedir(), "FILTER.txt.vm").getAbsolutePath(), "local override: $project.name"); + + String path = pathOf(new DefaultArtifact( + "test", "test", VersionRange.createFromVersion("1.4"), null, "jar", "", new DefaultArtifactHandler())); + + File file = new File(path); + file.getParentFile().mkdirs(); + buildResourceBundle("default-useprojectfiles-create", null, new String[] {"FILTER.txt.vm"}, file); + + setVariableValueToObject(mojo, "useProjectFiles", true); + + mojo.execute(); + + File outputFile = new File((File) getVariableValueFromObject(mojo, "outputDirectory"), "FILTER.txt"); + String data = FileUtils.fileRead(outputFile); + assertTrue(data.contains("local override: Test Project default-useprojectfiles")); + } + public void testVelocityUTF8() throws Exception { final MavenProjectResourcesStub project = createTestProject("default-utf8"); final ProcessRemoteResourcesMojo mojo = lookupProcessMojoWithSettings(project, new String[] {"test:test:1.2"});
