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);
}