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

cstamas pushed a commit to branch maven-resources-plugin-3.x
in repository https://gitbox.apache.org/repos/asf/maven-resources-plugin.git


The following commit(s) were added to refs/heads/maven-resources-plugin-3.x by 
this push:
     new caefcde  Bug: use change detecton strategies (#462)
caefcde is described below

commit caefcde4cbcf0f46c8d9b0adeecc5b04c6d08c62
Author: Tamas Cservenak <[email protected]>
AuthorDate: Thu Feb 26 19:40:48 2026 +0100

    Bug: use change detecton strategies (#462)
    
    Use the change detection strategy from maven-filtering
    
    Depends on https://github.com/apache/maven-filtering/pull/323
    
    Fixes #453
---
 .mvn/maven.config                                  |  2 +
 pom.xml                                            | 13 ++----
 .../maven/plugins/resources/ResourcesMojo.java     | 50 +++++++++++++++++++++-
 .../maven/plugins/resources/filters/ItFilter.java  |  8 ++--
 4 files changed, 59 insertions(+), 14 deletions(-)

diff --git a/.mvn/maven.config b/.mvn/maven.config
new file mode 100644
index 0000000..68f6bcc
--- /dev/null
+++ b/.mvn/maven.config
@@ -0,0 +1,2 @@
+-Dapache.snapshots
+
diff --git a/pom.xml b/pom.xml
index 7edd494..6111ca7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -76,6 +76,7 @@ under the License.
     
<project.build.outputTimestamp>2025-11-22T21:31:20Z</project.build.outputTimestamp>
 
     <version.slf4j>1.7.36</version.slf4j>
+    <version.plexus-utils>3.6.0</version.plexus-utils>
     <version.maven-invoker-plugin>3.9.1</version.maven-invoker-plugin>
   </properties>
 
@@ -84,12 +85,11 @@ under the License.
     <dependency>
       <groupId>org.apache.maven.shared</groupId>
       <artifactId>maven-filtering</artifactId>
-      <version>3.4.0</version>
+      <version>3.4.1-SNAPSHOT</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-      <version>3.20.0</version>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
     </dependency>
 
     <!-- Maven (provided) -->
@@ -148,11 +148,6 @@ under the License.
       <version>${version.slf4j}</version>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
diff --git 
a/src/main/java/org/apache/maven/plugins/resources/ResourcesMojo.java 
b/src/main/java/org/apache/maven/plugins/resources/ResourcesMojo.java
index 27dd610..539f700 100644
--- a/src/main/java/org/apache/maven/plugins/resources/ResourcesMojo.java
+++ b/src/main/java/org/apache/maven/plugins/resources/ResourcesMojo.java
@@ -30,7 +30,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Resource;
 import org.apache.maven.plugin.AbstractMojo;
@@ -39,9 +38,11 @@ import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.filtering.ChangeDetection;
 import org.apache.maven.shared.filtering.MavenFilteringException;
 import org.apache.maven.shared.filtering.MavenResourcesExecution;
 import org.apache.maven.shared.filtering.MavenResourcesFiltering;
+import org.codehaus.plexus.util.StringUtils;
 
 /**
  * Copy resources for the main source code to the main output directory. 
Always uses the project.build.resources element
@@ -156,10 +157,32 @@ public class ResourcesMojo extends AbstractMojo {
      * Overwrite existing files even if the destination files are newer.
      *
      * @since 2.3
+     * @deprecated Use {@link #changeDetection} instead.
      */
+    @Deprecated
     @Parameter(defaultValue = "false")
     private boolean overwrite;
 
+    /**
+     * The strategy to use for change detection. Supported values are listed 
below. If this parameter is configured,
+     * it will override the value of {@link #overwrite}.
+     *
+     * Strategies and their behavior are as follows:
+     * <ul>
+     *     <li><strong>content</strong>: This is the default strategy since 
version 3.4.0. Overwrites existing target file only if content differs.</li>
+     *     <li><strong>timestamp</strong>: This was the default strategy 
before version 3.4.0. Overwrites existing target file only if target timestamp 
is older than source timestamp.</li>
+     *     <li><strong>timestamp+content</strong>: Combines the two strategies 
above; if timestamp is older and if content differs, existing target file will 
be overwritten.</li>
+     *     <li><strong>always</strong>: Always overwrites existing target 
file. Equivalent of {@code overwrite=true}.</li>
+     *     <li><strong>never</strong>: Never overwrites existing target 
file.</li>
+     * </ul>
+     *
+     * Note: default value of this parameter is handled programmatically (as 
"content") for programmatic detection reasons.
+     *
+     * @since 3.5.0
+     */
+    @Parameter
+    private String changeDetection;
+
     /**
      * Copy any empty directories included in the Resources.
      *
@@ -323,7 +346,7 @@ public class ResourcesMojo extends AbstractMojo {
             mavenResourcesExecution.setInjectProjectBuildFilters(false);
 
             mavenResourcesExecution.setEscapeString(escapeString);
-            mavenResourcesExecution.setOverwrite(overwrite);
+            mavenResourcesExecution.setChangeDetection(getChangeDetection());
             mavenResourcesExecution.setIncludeEmptyDirs(includeEmptyDirs);
             
mavenResourcesExecution.setSupportMultiLineFiltering(supportMultiLineFiltering);
             mavenResourcesExecution.setFilterFilenames(fileNameFiltering);
@@ -350,6 +373,29 @@ public class ResourcesMojo extends AbstractMojo {
         }
     }
 
+    private ChangeDetection getChangeDetection() {
+        if (changeDetection != null) {
+            switch (changeDetection) {
+                case "content":
+                    return ChangeDetection.CONTENT;
+                case "timestamp":
+                    return ChangeDetection.TIMESTAMP;
+                case "timestamp+content":
+                    return ChangeDetection.TIMESTAMP_AND_CONTENT;
+                case "always":
+                    return ChangeDetection.ALWAYS;
+                case "never":
+                    return ChangeDetection.NEVER;
+                default:
+                    throw new IllegalArgumentException("Invalid value for 
changeDetection: " + changeDetection);
+            }
+        } else if (overwrite) {
+            return ChangeDetection.ALWAYS;
+        } else {
+            return ChangeDetection.CONTENT;
+        }
+    }
+
     /**
      * This solves https://issues.apache.org/jira/browse/MRESOURCES-99.<br/>
      * BUT:<br/>
diff --git 
a/src/test/java/org/apache/maven/plugins/resources/filters/ItFilter.java 
b/src/test/java/org/apache/maven/plugins/resources/filters/ItFilter.java
index d7c2504..22c4ccc 100644
--- a/src/test/java/org/apache/maven/plugins/resources/filters/ItFilter.java
+++ b/src/test/java/org/apache/maven/plugins/resources/filters/ItFilter.java
@@ -23,6 +23,8 @@ import javax.inject.Singleton;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -31,8 +33,6 @@ import 
org.apache.maven.shared.filtering.MavenFilteringException;
 import org.apache.maven.shared.filtering.MavenResourcesExecution;
 import org.apache.maven.shared.filtering.MavenResourcesFiltering;
 
-import static org.apache.commons.io.FileUtils.writeLines;
-
 /**
  * @author Olivier Lamy
  * @since 2.5
@@ -73,7 +73,9 @@ public class ItFilter implements MavenResourcesFiltering {
                             .getMavenSession()
                             .getSystemProperties()
                             .getProperty("toto"));
-            writeLines(f, lines);
+            Path target = f.toPath();
+            Files.createDirectories(target.getParent());
+            Files.write(target, lines);
         } catch (IOException e) {
             throw new MavenFilteringException(e.getMessage(), e);
         }

Reply via email to