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 f57f6d1..790887c 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 @@ -663,15 +663,34 @@ protected boolean copyResourceIfExists( 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); + 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); + } return true; } @@ -942,7 +961,7 @@ protected void processResourceBundles(ClassLoader classLoader, VelocityContext c 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 583732b..c393341 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 @@ -165,6 +165,31 @@ public void testSimpleBundlesWithClassifier() throws Exception { assertTrue(file.exists()); } + 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"});