This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/maven-remote-resources-plugin.git

commit 94e7ad9738c1aca7984a7bf77d95cef5a4ed06cb
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"});

Reply via email to