diff --git a/pom.xml b/pom.xml
index aaff0bf..30e3625 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,15 +71,32 @@ under the License.
- 3.4.0
+ 3.4.1-SNAPSHOT
3.9.12
8
2025-11-22T21:31:20Z
+ 3.6.0
3.9.1
+
+ org.apache.maven.shared
+ maven-filtering
+ ${mavenFilteringVersion}
+
+
+ org.codehaus.plexus
+ plexus-utils
+
+
+
+ javax.inject
+ javax.inject
+ 1
+ provided
+
org.apache.maven
maven-plugin-api
@@ -104,27 +121,7 @@ under the License.
${version.maven-plugin-tools}
provided
-
- org.codehaus.plexus
- plexus-utils
- test
-
-
- org.apache.maven.shared
- maven-filtering
- ${mavenFilteringVersion}
-
-
- commons-io
- commons-io
- 2.21.0
- test
-
-
- org.apache.commons
- commons-lang3
- 3.20.0
-
+
org.apache.maven.plugin-testing
maven-plugin-testing-harness
@@ -142,11 +139,6 @@ under the License.
4.11.0
test
-
- javax.inject
- javax.inject
- 1
-
org.slf4j
slf4j-simple
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.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.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:
+ *
+ * - content: This is the default strategy since version 3.4.0. Overwrites existing target file only if content differs.
+ * - timestamp: This was the default strategy before version 3.4.0. Overwrites existing target file only if target timestamp is older than source timestamp.
+ * - timestamp+content: Combines the two strategies above; if timestamp is older and if content differs, existing target file will be overwritten.
+ * - always: Always overwrites existing target file. Equivalent of {@code overwrite=true}.
+ * - never: Never overwrites existing target file.
+ *
+ *
+ * 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 void execute() throws MojoExecutionException {
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 void execute() throws MojoExecutionException {
}
}
+ 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.
* BUT:
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 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.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 void filterResources(MavenResourcesExecution mavenResourcesExecution) thr
.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);
}