Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package maven-filtering for openSUSE:Factory 
checked in at 2026-03-05 17:30:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/maven-filtering (Old)
 and      /work/SRC/openSUSE:Factory/.maven-filtering.new.561 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "maven-filtering"

Thu Mar  5 17:30:48 2026 rev:12 rq:1336714 version:3.5.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/maven-filtering/maven-filtering.changes  
2025-10-10 17:13:09.330853848 +0200
+++ /work/SRC/openSUSE:Factory/.maven-filtering.new.561/maven-filtering.changes 
2026-03-05 17:33:39.056681507 +0100
@@ -1,0 +2,25 @@
+Mon Mar  2 12:38:14 UTC 2026 - Fridrich Strba <[email protected]>
+
+- Upgrade to upstream version 3.5.0
+  * New features and improvements
+    + Introduce ChangeDetection
+    + Use Release Drafter from shared and improvements
+  * Bug Fixes
+    + Issue 289: filter file names one component at a time on 3.x
+      branch
+  * Maintenance
+    + Update site descriptor
+    + Cleanup tests
+    + Enable Github Issues (3.x)
+    + Add PR Automation
+  * Dependency updates
+    + Bump org.apache.maven.shared:maven-shared-components from 43
+      to 47
+    + Bump org.codehaus.plexus:plexus-testing from 1.3.0 to 2.1.0
+    + Bump Maven to 3.9.12
+    + Bump org.apache.commons:commons-lang3 from 3.16.0 to 3.20.0
+    + Bump org.codehaus.plexus:plexus-interpolation from 1.27 to 1.29
+    + Bump commons-io:commons-io from 2.16.1 to 2.21.0
+    + Bump org.hamcrest:hamcrest from 2.2 to 3.0
+
+-------------------------------------------------------------------

Old:
----
  maven-filtering-3.4.0-source-release.zip

New:
----
  maven-filtering-3.5.0-source-release.zip

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ maven-filtering.spec ++++++
--- /var/tmp/diff_new_pack.jhHLAB/_old  2026-03-05 17:33:39.712708748 +0100
+++ /var/tmp/diff_new_pack.jhHLAB/_new  2026-03-05 17:33:39.712708748 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package maven-filtering
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           maven-filtering
-Version:        3.4.0
+Version:        3.5.0
 Release:        0
 Summary:        Shared component providing resource filtering
 License:        Apache-2.0
@@ -59,8 +59,6 @@
 
 %pom_xpath_remove pom:project/pom:parent/pom:relativePath
 
-%pom_remove_dep :plexus-xml
-
 %build
 mkdir -p lib
 build-jar-repository -s lib \

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.jhHLAB/_old  2026-03-05 17:33:39.744710076 +0100
+++ /var/tmp/diff_new_pack.jhHLAB/_new  2026-03-05 17:33:39.748710243 +0100
@@ -1,6 +1,6 @@
-mtime: 1760085168
-commit: 1efd3a3789568c9c8e69506eac45e0c3a721e592aabbf92048fd417b0192f635
+mtime: 1772456459
+commit: 672fafcb418d0e85ea6bef472fd6909c371c348d7dba09387a53db7c8d68fab1
 url: https://src.opensuse.org/java-packages/maven-filtering.git
-revision: 1efd3a3789568c9c8e69506eac45e0c3a721e592aabbf92048fd417b0192f635
+revision: 672fafcb418d0e85ea6bef472fd6909c371c348d7dba09387a53db7c8d68fab1
 projectscmsync: https://src.opensuse.org/java-packages/_ObsPrj
 

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-03-02 14:01:33.000000000 +0100
@@ -0,0 +1 @@
+.osc

++++++ maven-filtering-3.4.0-source-release.zip -> 
maven-filtering-3.5.0-source-release.zip ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maven-filtering-3.4.0/.gitignore 
new/maven-filtering-3.5.0/.gitignore
--- old/maven-filtering-3.4.0/.gitignore        2024-08-28 15:27:34.000000000 
+0200
+++ new/maven-filtering-3.5.0/.gitignore        1970-01-01 01:00:00.000000000 
+0100
@@ -1,19 +0,0 @@
-target/
-.project
-.classpath
-.settings/
-.svn/
-bin/
-# Intellij
-*.ipr
-*.iml
-*~
-.idea
-out/
-.DS_Store
-/bootstrap
-/dependencies.xml
-.java-version
-*.versionsBackup
-.checkstyle
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maven-filtering-3.4.0/DEPENDENCIES 
new/maven-filtering-3.5.0/DEPENDENCIES
--- old/maven-filtering-3.4.0/DEPENDENCIES      2024-08-28 15:27:34.000000000 
+0200
+++ new/maven-filtering-3.5.0/DEPENDENCIES      2026-03-02 11:11:22.000000000 
+0100
@@ -8,22 +8,19 @@
 
 From: 'an unknown organization'
 
-  - javax.inject (http://code.google.com/p/atinject/) 
javax.inject:javax.inject:jar:1
-    License: The Apache Software License, Version 2.0  
(http://www.apache.org/licenses/LICENSE-2.0.txt)
-
   - plexus-build-api 
(http://forge.sonatype.com/spice-parent/plexus-build-api/) 
org.sonatype.plexus:plexus-build-api:jar:0.0.7
     License: Apache Public License 2.0  
(http://www.apache.org/licenses/LICENSE-2.0)
 
 
 From: 'Codehaus Plexus' (https://codehaus-plexus.github.io/)
 
-  - Plexus Interpolation API 
(https://codehaus-plexus.github.io/plexus-pom/plexus-interpolation/) 
org.codehaus.plexus:plexus-interpolation:bundle:1.27
+  - plexus-build-api 
(https://codehaus-plexus.github.io/plexus-pom/plexus-build-api/) 
org.codehaus.plexus:plexus-build-api:jar:1.2.0
     License: Apache License, Version 2.0  
(https://www.apache.org/licenses/LICENSE-2.0.txt)
 
-  - Plexus Common Utilities (https://codehaus-plexus.github.io/plexus-utils/) 
org.codehaus.plexus:plexus-utils:jar:4.0.1
-    License: Apache License, Version 2.0  
(https://www.apache.org/licenses/LICENSE-2.0.txt)
+  - Plexus Interpolation API 
(https://codehaus-plexus.github.io/plexus-pom/plexus-interpolation/) 
org.codehaus.plexus:plexus-interpolation:bundle:1.29
+    License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)
 
-  - Plexus XML Utilities (https://codehaus-plexus.github.io/plexus-xml/) 
org.codehaus.plexus:plexus-xml:jar:3.0.1
+  - Plexus Common Utilities (https://codehaus-plexus.github.io/plexus-utils/) 
org.codehaus.plexus:plexus-utils:jar:3.6.0
     License: Apache License, Version 2.0  
(https://www.apache.org/licenses/LICENSE-2.0.txt)
 
 
@@ -33,15 +30,6 @@
     License: MIT License  (http://www.opensource.org/licenses/mit-license.php)
 
 
-From: 'The Apache Software Foundation' (https://www.apache.org/)
-
-  - Apache Commons IO (https://commons.apache.org/proper/commons-io/) 
commons-io:commons-io:jar:2.16.1
-    License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)
-
-  - Apache Commons Lang (https://commons.apache.org/proper/commons-lang/) 
org.apache.commons:commons-lang3:jar:3.16.0
-    License: Apache-2.0  (https://www.apache.org/licenses/LICENSE-2.0.txt)
-
-
 
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maven-filtering-3.4.0/NOTICE 
new/maven-filtering-3.5.0/NOTICE
--- old/maven-filtering-3.4.0/NOTICE    2024-08-28 15:27:34.000000000 +0200
+++ new/maven-filtering-3.5.0/NOTICE    2026-03-02 11:11:22.000000000 +0100
@@ -1,5 +1,5 @@
 Apache Maven Filtering
-Copyright 2002-2024 The Apache Software Foundation
+Copyright 2002-2026 The Apache Software Foundation
 
 
 This product includes software developed at
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maven-filtering-3.4.0/README.md 
new/maven-filtering-3.5.0/README.md
--- old/maven-filtering-3.4.0/README.md 2024-08-28 15:27:34.000000000 +0200
+++ new/maven-filtering-3.5.0/README.md 2026-03-02 11:11:22.000000000 +0100
@@ -17,15 +17,20 @@
 Contributing to [Apache Maven 
Filtering](https://maven.apache.org/shared/maven-filtering/)
 ======================
 
-[![ASF 
Jira](https://img.shields.io/endpoint?url=https%3A%2F%2Fmaven.apache.org%2Fbadges%2Fasf_jira-MSHARED.json)][jira]
 [![Apache License, Version 2.0, January 
2004](https://img.shields.io/github/license/apache/maven.svg?label=License)][license]
+[![Maven 
Central](https://img.shields.io/maven-central/v/org.apache.maven.shared/maven-filtering.svg?label=Maven%20Central&filter=3*)](https://search.maven.org/artifact/org.apache.maven.shared/maven-filtering)
+[![Reproducible 
Builds](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/jvm-repo-rebuild/reproducible-central/master/content/org/apache/maven/shared/maven-filtering/badge.json)](https://github.com/jvm-repo-rebuild/reproducible-central/blob/master/content/org/apache/maven/shared/maven-filtering/README.md)
+[![Jenkins 
Status](https://img.shields.io/jenkins/s/https/ci-maven.apache.org/job/Maven/job/maven-box/job/maven-filtering/job/maven-filtering-3.x.svg)][build-3]
+[![Jenkins 
tests](https://img.shields.io/jenkins/t/https/ci-maven.apache.org/job/Maven/job/maven-box/job/maven-filtering/job/maven-filtering-3.x.svg)][test-results-3]
+
+Maven 4: [master](https://github.com/apache/maven-filtering/tree/master)
 [![Maven 
Central](https://img.shields.io/maven-central/v/org.apache.maven.shared/maven-filtering.svg?label=Maven%20Central)](https://search.maven.org/artifact/org.apache.maven.shared/maven-filtering)
-[![Reproducible 
Builds](https://img.shields.io/badge/Reproducible_Builds-ok-green?labelColor=blue)](https://github.com/jvm-repo-rebuild/reproducible-central/blob/master/content/org/apache/maven/shared/maven-filtering/README.md)
+[![Reproducible 
Builds](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/jvm-repo-rebuild/reproducible-central/master/content/org/apache/maven/shared/maven-filtering/badge.json)](https://github.com/jvm-repo-rebuild/reproducible-central/blob/master/content/org/apache/maven/shared/maven-filtering/README.md)
 [![Jenkins 
Status](https://img.shields.io/jenkins/s/https/ci-maven.apache.org/job/Maven/job/maven-box/job/maven-filtering/job/master.svg)][build]
 [![Jenkins 
tests](https://img.shields.io/jenkins/t/https/ci-maven.apache.org/job/Maven/job/maven-box/job/maven-filtering/job/master.svg)][test-results]
 
 
-You have found a bug or you have an idea for a cool new feature? Contributing
+You have found a bug, or you have an idea for a cool new feature? Contributing
 code is a great way to give something back to the open source community. Before
 you dig right into the code, there are a few guidelines that we need
 contributors to follow so that we can have a chance of keeping on top of
@@ -34,7 +39,6 @@
 Getting Started
 ---------------
 
-+ Make sure you have a [JIRA account](https://issues.apache.org/jira/).
 + Make sure you have a [GitHub account](https://github.com/signup/free).
 + If you're planning to implement a new feature, it makes sense to discuss 
your changes 
   on the [dev list][ml-list] first. 
@@ -60,41 +64,29 @@
   + Create minimal diffs - disable on save actions like reformat source code 
or organize imports. 
     If you feel the source code should be reformatted, create a separate PR 
for this change.
   + Check for unnecessary whitespace with `git diff --check` before committing.
-+ Make sure your commit messages are in the proper format. Your commit message 
should contain the key of the JIRA issue.
-```
-[MSHARED-XXX] - Subject of the JIRA Ticket
- Optional supplemental description.
-```
 + Make sure you have added the necessary tests (JUnit/IT) for your changes.
 + Run all the tests with `mvn -Prun-its verify` to assure nothing else was 
accidentally broken.
 + Submit a pull request to the repository in the Apache organization.
-+ Update your JIRA ticket and include a link to the pull request in the ticket.
 
 If you plan to contribute on a regular basis, please consider filing a 
[contributor license agreement][cla].
 
-Making Trivial Changes
-----------------------
-
-For changes of a trivial nature to comments and documentation, it is not always
-necessary to create a new ticket in JIRA.  In this case, it is appropriate to
-start the first line of a commit with '(doc)' instead of a ticket number.
-
 Additional Resources
 --------------------
 
 + [Contributing 
patches](https://maven.apache.org/guides/development/guide-maven-development.html#Creating_and_submitting_a_patch)
-+ [Apache Maven Shared Components project page][jira]
 + [Contributor License Agreement][cla]
 + [General GitHub documentation](https://help.github.com/)
 + [GitHub pull request 
documentation](https://help.github.com/send-pull-requests/)
-+ [Apache Maven Twitter Account](https://twitter.com/ASFMavenProject)
-+ #Maven IRC channel on freenode.org
++ [Apache Maven X Account](https://x.com/ASFMavenProject)
++ [Apache Maven Bluesky Account](https://bsky.app/profile/maven.apache.org)
++ [Apache Maven Mastodon 
Account](https://mastodon.social/deck/@[email protected])
 
-[jira]: https://issues.apache.org/jira/projects/MSHARED/
 [license]: https://www.apache.org/licenses/LICENSE-2.0
 [ml-list]: https://maven.apache.org/mailing-lists.html
 [code-style]: https://maven.apache.org/developers/conventions/code.html
 [cla]: https://www.apache.org/licenses/#clas
 [maven-wiki]: https://cwiki.apache.org/confluence/display/MAVEN/Index
 [test-results]: 
https://ci-maven.apache.org/job/Maven/job/maven-box/job/maven-filtering/job/master/lastCompletedBuild/testReport/
+[test-results-3]: 
https://ci-maven.apache.org/job/Maven/job/maven-box/job/maven-filtering/job/maven-filtering-3.x/lastCompletedBuild/testReport/
 [build]: 
https://ci-maven.apache.org/job/Maven/job/maven-box/job/maven-filtering/job/master/
+[build-3]: 
https://ci-maven.apache.org/job/Maven/job/maven-box/job/maven-filtering/job/maven-filtering-3.x/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maven-filtering-3.4.0/pom.xml 
new/maven-filtering-3.5.0/pom.xml
--- old/maven-filtering-3.4.0/pom.xml   2024-08-28 15:27:34.000000000 +0200
+++ new/maven-filtering-3.5.0/pom.xml   2026-03-02 11:11:22.000000000 +0100
@@ -23,12 +23,12 @@
   <parent>
     <groupId>org.apache.maven.shared</groupId>
     <artifactId>maven-shared-components</artifactId>
-    <version>43</version>
+    <version>47</version>
     <relativePath />
   </parent>
 
   <artifactId>maven-filtering</artifactId>
-  <version>3.4.0</version>
+  <version>3.5.0</version>
 
   <name>Apache Maven Filtering</name>
   <description>A component to assist in filtering of resource files with 
properties from a Maven project.</description>
@@ -42,12 +42,12 @@
   <scm>
     
<connection>scm:git:https://gitbox.apache.org/repos/asf/maven-filtering.git</connection>
     
<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/maven-filtering.git</developerConnection>
-    <tag>maven-filtering-3.4.0</tag>
+    <tag>maven-filtering-3.5.0</tag>
     
<url>https://github.com/apache/maven-filtering/tree/${project.scm.tag}</url>
   </scm>
   <issueManagement>
-    <system>JIRA</system>
-    
<url>https://issues.apache.org/jira/issues/?jql=project%20%3D%20MSHARED%20AND%20component%20%3D%20maven-filtering</url>
+    <system>GitHub Issues</system>
+    <url>https://github.com/apache/maven-filtering/issues</url>
   </issueManagement>
   <ciManagement>
     <system>Jenkins</system>
@@ -61,10 +61,10 @@
   </distributionManagement>
 
   <properties>
-    <mavenVersion>3.6.3</mavenVersion>
+    <mavenVersion>3.9.12</mavenVersion>
     <slf4jVersion>1.7.36</slf4jVersion>
-    <plexusBuildApiVersion>0.0.7</plexusBuildApiVersion>
-    
<project.build.outputTimestamp>2024-08-28T15:27:34Z</project.build.outputTimestamp>
+    <version.plexus-utils>3.6.0</version.plexus-utils>
+    
<project.build.outputTimestamp>2026-03-02T11:11:22Z</project.build.outputTimestamp>
     <!-- don't fail check for some rules that are too hard to enforce (could 
even be told broken for some)
          and those that are enforced by the formatting checks from spotless -->
     
<checkstyle.violation.ignore>ParameterNumber,MethodLength,FileLength</checkstyle.violation.ignore>
@@ -72,19 +72,30 @@
 
   <dependencies>
     <dependency>
-      <groupId>javax.inject</groupId>
-      <artifactId>javax.inject</artifactId>
-      <version>1</version>
-    </dependency>
-    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>${slf4jVersion}</version>
     </dependency>
     <dependency>
-      <groupId>org.sonatype.plexus</groupId>
+      <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-build-api</artifactId>
-      <version>${plexusBuildApiVersion}</version>
+      <version>1.2.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-interpolation</artifactId>
+      <version>1.29</version>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+      <version>1</version>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
@@ -104,29 +115,6 @@
       <version>${mavenVersion}</version>
       <scope>provided</scope>
     </dependency>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-xml</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-interpolation</artifactId>
-      <version>1.27</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>2.16.1</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-      <version>3.16.0</version>
-    </dependency>
 
     <dependency>
       <groupId>org.mockito</groupId>
@@ -137,13 +125,13 @@
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-testing</artifactId>
-      <version>1.3.0</version>
+      <version>2.1.0</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.hamcrest</groupId>
       <artifactId>hamcrest</artifactId>
-      <version>2.2</version>
+      <version>3.0</version>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -167,7 +155,12 @@
       <artifactId>org.eclipse.sisu.inject</artifactId>
       <scope>test</scope>
     </dependency>
-
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>2.21.0</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
--- 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
        2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
        2026-03-02 11:11:22.000000000 +0100
@@ -28,6 +28,8 @@
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.interpolation.Interpolator;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * @since 1.0-beta-3
  */
@@ -84,6 +86,13 @@
     private Consumer<Interpolator> interpolatorCustomizer;
 
     /**
+     * Change detection strategy to determine whether an existing file should 
be overwritten.
+     *
+     * @since 3.5.0
+     */
+    private ChangeDetection changeDetection = ChangeDetection.CONTENT;
+
+    /**
      * Create instance.
      */
     protected AbstractMavenFilteringRequest() {
@@ -360,4 +369,23 @@
     public void setInterpolatorCustomizer(Consumer<Interpolator> 
interpolatorCustomizer) {
         this.interpolatorCustomizer = interpolatorCustomizer;
     }
+
+    /**
+     * Change detection strategy to determine whether an existing file should 
be overwritten.
+     *
+     * @since 3.5.0
+     */
+    public ChangeDetection getChangeDetection() {
+        return changeDetection;
+    }
+
+    /**
+     * Sets the change detection strategy to determine whether an existing 
file should be overwritten.
+     *
+     * @param changeDetection the change detection strategy to use, must not 
be {@code null}.
+     * @since 3.5.0
+     */
+    public void setChangeDetection(ChangeDetection changeDetection) {
+        this.changeDetection = requireNonNull(changeDetection);
+    }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/ChangeDetection.java
 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/ChangeDetection.java
--- 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/ChangeDetection.java
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/ChangeDetection.java
      2026-03-02 11:11:22.000000000 +0100
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.shared.filtering;
+
+/**
+ * Change detection strategies: to decide whether an <strong>existing target 
file</strong> needs to be overwritten or not.
+ *
+ * @since 3.5.0
+ */
+public enum ChangeDetection {
+    /**
+     * Only consider the file timestamp to determine is overwrite of existing 
file needed. This was default before 3.4.0.
+     */
+    TIMESTAMP,
+    /**
+     * Only consider the content of the file to determine is overwrite of 
existing file needed. This is the default since 3.4.0.
+     */
+    CONTENT,
+    /**
+     * Combine timestamp and content change detection for existing file.
+     */
+    TIMESTAMP_AND_CONTENT,
+    /**
+     * Disable change detection; always overwrite existing file.
+     */
+    ALWAYS,
+    /**
+     * Disable change detection; never overwrite existing file.
+     */
+    NEVER;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
--- 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
       2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
       2026-03-02 11:11:22.000000000 +0100
@@ -45,6 +45,7 @@
         this.buildContext = requireNonNull(buildContext);
     }
 
+    @Deprecated
     @Override
     public void copyFile(
             File from,
@@ -56,15 +57,40 @@
             String encoding,
             MavenSession mavenSession)
             throws MavenFilteringException {
+        copyFile(
+                from,
+                to,
+                filtering,
+                mavenProject,
+                filters,
+                escapedBackslashesInFilePath,
+                encoding,
+                mavenSession,
+                ChangeDetection.CONTENT);
+    }
+
+    @Override
+    public void copyFile(
+            File from,
+            File to,
+            boolean filtering,
+            MavenProject mavenProject,
+            List<String> filters,
+            boolean escapedBackslashesInFilePath,
+            String encoding,
+            MavenSession mavenSession,
+            ChangeDetection changeDetection)
+            throws MavenFilteringException {
         MavenResourcesExecution mre = new MavenResourcesExecution();
         mre.setMavenProject(mavenProject);
         mre.setFileFilters(filters);
         mre.setEscapeWindowsPaths(escapedBackslashesInFilePath);
         mre.setMavenSession(mavenSession);
         mre.setInjectProjectBuildFilters(true);
+        mre.setChangeDetection(changeDetection);
 
         List<FilterWrapper> filterWrappers = getDefaultFilterWrappers(mre);
-        copyFile(from, to, filtering, filterWrappers, encoding);
+        copyFile(from, to, filtering, filterWrappers, encoding, 
changeDetection);
     }
 
     @Override
@@ -76,24 +102,57 @@
                 mavenFileFilterRequest.getTo(),
                 mavenFileFilterRequest.isFiltering(),
                 filterWrappers,
-                mavenFileFilterRequest.getEncoding());
+                mavenFileFilterRequest.getEncoding(),
+                mavenFileFilterRequest.getChangeDetection());
     }
 
+    @Deprecated
     @Override
     public void copyFile(File from, File to, boolean filtering, 
List<FilterWrapper> filterWrappers, String encoding)
             throws MavenFilteringException {
+        copyFile(from, to, filtering, filterWrappers, encoding, 
ChangeDetection.CONTENT);
+    }
+
+    @Override
+    @Deprecated
+    public void copyFile(
+            File from,
+            File to,
+            boolean filtering,
+            List<FilterWrapper> filterWrappers,
+            String encoding,
+            boolean overwrite)
+            throws MavenFilteringException {
+        copyFile(
+                from,
+                to,
+                filtering,
+                filterWrappers,
+                encoding,
+                overwrite ? ChangeDetection.ALWAYS : ChangeDetection.CONTENT);
+    }
+
+    @Override
+    public void copyFile(
+            File from,
+            File to,
+            boolean filtering,
+            List<FilterWrapper> filterWrappers,
+            String encoding,
+            ChangeDetection changeDetection)
+            throws MavenFilteringException {
         try {
             if (filtering) {
                 if (getLogger().isDebugEnabled()) {
                     getLogger().debug("filtering " + from.getPath() + " to " + 
to.getPath());
                 }
                 FilterWrapper[] array = filterWrappers.toArray(new 
FilterWrapper[0]);
-                FilteringUtils.copyFile(from, to, encoding, array, false);
+                FilteringUtils.copyFile(from, to, encoding, array, 
changeDetection);
             } else {
                 if (getLogger().isDebugEnabled()) {
                     getLogger().debug("copy " + from.getPath() + " to " + 
to.getPath());
                 }
-                FilteringUtils.copyFile(from, to, encoding, new 
FilterWrapper[0], false);
+                FilteringUtils.copyFile(from, to, encoding, new 
FilterWrapper[0], changeDetection);
             }
 
             buildContext.refresh(to);
@@ -104,18 +163,4 @@
                     e);
         }
     }
-
-    @Override
-    @Deprecated
-    public void copyFile(
-            File from,
-            File to,
-            boolean filtering,
-            List<FilterWrapper> filterWrappers,
-            String encoding,
-            boolean overwrite)
-            throws MavenFilteringException {
-        // overwrite forced to false to preserve backward comp
-        copyFile(from, to, filtering, filterWrappers, encoding);
-    }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
--- 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
       2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
       2026-03-02 11:11:22.000000000 +0100
@@ -27,19 +27,21 @@
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.nio.file.FileSystems;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.model.Resource;
 import org.codehaus.plexus.util.DirectoryScanner;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.Scanner;
+import org.codehaus.plexus.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.sonatype.plexus.build.incremental.BuildContext;
@@ -93,7 +95,7 @@
     }
 
     private static String getExtension(String fileName) {
-        String rawExt = FilenameUtils.getExtension(fileName);
+        String rawExt = FileUtils.getExtension(fileName);
         return rawExt == null ? null : rawExt.toLowerCase(Locale.ROOT);
     }
 
@@ -280,7 +282,7 @@
                 File destinationFile = getDestinationFile(outputDirectory, 
targetPath, name, mavenResourcesExecution);
 
                 if (mavenResourcesExecution.isFlatten() && 
destinationFile.exists()) {
-                    if (mavenResourcesExecution.isOverwrite()) {
+                    if (mavenResourcesExecution.getChangeDetection() == 
ChangeDetection.ALWAYS) {
                         LOGGER.warn("existing file " + 
destinationFile.getName() + " will be overwritten by " + name);
                     } else {
                         throw new MavenFilteringException("existing file " + 
destinationFile.getName()
@@ -303,7 +305,7 @@
                         resource.isFiltering() && filteredExt,
                         mavenResourcesExecution.getFilterWrappers(),
                         encoding,
-                        mavenResourcesExecution.isOverwrite());
+                        mavenResourcesExecution.getChangeDetection());
             }
 
             // deal with deleted source files
@@ -501,21 +503,33 @@
      */
     private String filterFileName(String name, List<FilterWrapper> wrappers) 
throws MavenFilteringException {
 
-        Reader reader = new StringReader(name);
-        for (FilterWrapper wrapper : wrappers) {
-            reader = wrapper.getReader(reader);
-        }
-
-        try (StringWriter writer = new StringWriter()) {
-            IOUtils.copy(reader, writer);
-            String filteredFilename = writer.toString();
+        StringBuilder sb = new StringBuilder();
+        Path path = Paths.get(name);
+        Iterator<Path> iterator = path.iterator();
+        while (iterator.hasNext()) {
+            String component = iterator.next().toString();
+            Reader reader = new StringReader(component);
+            for (FilterWrapper wrapper : wrappers) {
+                reader = wrapper.getReader(reader);
+            }
+
+            try (StringWriter writer = new StringWriter()) {
+                IOUtil.copy(reader, writer);
+                String filteredComponent = writer.toString();
+                sb.append(filteredComponent);
+                if (iterator.hasNext()) {
+                    sb.append(FileSystems.getDefault().getSeparator());
+                }
 
-            if (LOGGER.isDebugEnabled()) {
-                LOGGER.debug("renaming filename " + name + " to " + 
filteredFilename);
+            } catch (IOException e) {
+                throw new MavenFilteringException("Failed filtering filename" 
+ name, e);
             }
-            return filteredFilename;
-        } catch (IOException e) {
-            throw new MavenFilteringException("Failed filtering filename" + 
name, e);
         }
+        String filteredFilename = sb.toString();
+
+        if (LOGGER.isDebugEnabled()) {
+            LOGGER.debug("renaming filename " + name + " to " + 
filteredFilename);
+        }
+        return filteredFilename;
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
--- 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
       2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
       2026-03-02 11:11:22.000000000 +0100
@@ -24,6 +24,7 @@
 import java.io.Reader;
 import java.io.Writer;
 import java.nio.charset.Charset;
+import java.nio.file.FileSystemException;
 import java.nio.file.Files;
 import java.nio.file.NoSuchFileException;
 import java.nio.file.attribute.PosixFilePermission;
@@ -31,7 +32,6 @@
 import java.util.StringTokenizer;
 import java.util.regex.Pattern;
 
-import org.apache.commons.lang3.SystemUtils;
 import org.codehaus.plexus.util.io.CachingOutputStream;
 import org.codehaus.plexus.util.io.CachingWriter;
 
@@ -41,6 +41,12 @@
  */
 public final class FilteringUtils {
     /**
+     * Logic borrowed from Commons-Lang3: we really need only this, to decide 
is it Windows.
+     * It is nonsense to import whole commons-lang3 just for this test.
+     */
+    private static final boolean IS_WINDOWS =
+            System.getProperty("os.name", "unknown").startsWith("Windows");
+    /**
      * The number of bytes in a kilobyte.
      */
     private static final int ONE_KB = 1024;
@@ -114,7 +120,7 @@
         }
 
         // deal with absolute files
-        if (filenm.startsWith(File.separator) || (SystemUtils.IS_OS_WINDOWS && 
filenm.indexOf(":") > 0)) {
+        if (filenm.startsWith(File.separator) || (IS_WINDOWS && 
filenm.indexOf(":") > 0)) {
             File file = new File(filenm);
 
             try {
@@ -305,12 +311,67 @@
      * @param encoding the file output encoding (only if wrappers is not empty)
      * @param wrappers array of {@link FilterWrapper}
      * @throws IOException if an IO error occurs during copying or filtering
+     * @deprecated Use {@link #copyFile(File, File, String, FilterWrapper[], 
ChangeDetection)} instead.
      */
+    @Deprecated
     public static void copyFile(File from, File to, String encoding, 
FilterWrapper[] wrappers) throws IOException {
-        setReadWritePermissions(to);
+        copyFile(from, to, encoding, wrappers, ChangeDetection.CONTENT);
+    }
+
+    /**
+     * Copies a file from the source to the destination, applying the 
specified filters if provided.
+     *
+     * @param from the file to copy
+     * @param to the destination file
+     * @param encoding the file output encoding (only if wrappers is not empty)
+     * @param wrappers array of {@link FilterWrapper}
+     * @param changeDetection the strategy to apply if to is existing file
+     * @throws IOException if an IO error occurs during copying or filtering
+     * @return {@code true} if the file was copied.
+     */
+    public static boolean copyFile(
+            File from, File to, String encoding, FilterWrapper[] wrappers, 
ChangeDetection changeDetection)
+            throws IOException {
+        boolean needsCopy = false;
+        boolean unconditionally = false;
+        switch (changeDetection) {
+            case NEVER:
+                needsCopy = !to.isFile();
+                unconditionally = true;
+                break;
+            case ALWAYS:
+                needsCopy = true;
+                unconditionally = true;
+                break;
+            case TIMESTAMP:
+                needsCopy = to.lastModified() < from.lastModified();
+                unconditionally = true;
+                break;
+            case CONTENT:
+                needsCopy = true;
+                break;
+            case TIMESTAMP_AND_CONTENT:
+                needsCopy = to.lastModified() < from.lastModified();
+                break;
+            default:
+                throw new IllegalArgumentException("Unsupported change 
detection mode: " + changeDetection);
+        }
+        boolean copied = false;
+        if (needsCopy) {
+            if (unconditionally) {
+                copied = copyUnconditionally(from, to, encoding, wrappers);
+            } else {
+                copied = copyIfContentsChanged(from, to, encoding, wrappers);
+            }
+        }
+        return copied;
+    }
 
+    private static boolean copyUnconditionally(File from, File to, String 
encoding, FilterWrapper[] wrappers)
+            throws IOException {
+        setReadWritePermissions(to);
         if (wrappers == null || wrappers.length == 0) {
-            try (OutputStream os = new CachingOutputStream(to.toPath())) {
+            try (OutputStream os = Files.newOutputStream(to.toPath())) {
                 Files.copy(from.toPath(), os);
             }
         } else {
@@ -320,7 +381,7 @@
                 for (FilterWrapper wrapper : wrappers) {
                     wrapped = wrapper.getReader(wrapped);
                 }
-                try (Writer writer = new CachingWriter(to.toPath(), charset)) {
+                try (Writer writer = Files.newBufferedWriter(to.toPath(), 
charset)) {
                     char[] buffer = new char[COPY_BUFFER_LENGTH];
                     int nRead;
                     while ((nRead = wrapped.read(buffer, 0, 
COPY_BUFFER_LENGTH)) >= 0) {
@@ -329,8 +390,38 @@
                 }
             }
         }
+        copyFilePermissions(from, to);
+        return true;
+    }
 
+    private static boolean copyIfContentsChanged(File from, File to, String 
encoding, FilterWrapper[] wrappers)
+            throws IOException {
+        setReadWritePermissions(to);
+        boolean copied = false;
+        if (wrappers == null || wrappers.length == 0) {
+            try (CachingOutputStream os = new 
CachingOutputStream(to.toPath())) {
+                Files.copy(from.toPath(), os);
+                copied = os.isModified();
+            }
+        } else {
+            Charset charset = charset(encoding);
+            try (Reader fileReader = Files.newBufferedReader(from.toPath(), 
charset)) {
+                Reader wrapped = fileReader;
+                for (FilterWrapper wrapper : wrappers) {
+                    wrapped = wrapper.getReader(wrapped);
+                }
+                try (CachingWriter writer = new CachingWriter(to.toPath(), 
charset)) {
+                    char[] buffer = new char[COPY_BUFFER_LENGTH];
+                    int nRead;
+                    while ((nRead = wrapped.read(buffer, 0, 
COPY_BUFFER_LENGTH)) >= 0) {
+                        writer.write(buffer, 0, nRead);
+                    }
+                    copied = writer.isModified();
+                }
+            }
+        }
         copyFilePermissions(from, to);
+        return copied;
     }
 
     /**
@@ -343,12 +434,12 @@
      * @param wrappers array of {@link FilterWrapper}
      * @param overwrite unused
      * @throws IOException if an IO error occurs during copying or filtering
-     * @deprecated use {@link #copyFile(File, File, String, FilterWrapper[])} 
instead
+     * @deprecated use {@link #copyFile(File, File, String, FilterWrapper[], 
ChangeDetection)} instead
      */
     @Deprecated
     public static void copyFile(File from, File to, String encoding, 
FilterWrapper[] wrappers, boolean overwrite)
             throws IOException {
-        copyFile(from, to, encoding, wrappers);
+        copyFile(from, to, encoding, wrappers, overwrite ? 
ChangeDetection.ALWAYS : ChangeDetection.CONTENT);
     }
 
     /**
@@ -367,7 +458,7 @@
             Files.setPosixFilePermissions(destination.toPath(), 
Files.getPosixFilePermissions(source.toPath()));
         } catch (NoSuchFileException nsfe) {
             // ignore if destination file or symlink does not exist
-        } catch (UnsupportedOperationException e) {
+        } catch (UnsupportedOperationException | FileSystemException e) {
             // fallback to setting partial permissions
             destination.setExecutable(source.canExecute());
             destination.setReadable(source.canRead());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java
 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java
--- 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java
      2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java
      2026-03-02 11:11:22.000000000 +0100
@@ -42,6 +42,7 @@
      * @param encoding The encoding which is used during the filtering process.
      * @throws MavenFilteringException in case of failure.
      * @see DefaultFilterInfo#getDefaultFilterWrappers(MavenProject, List, 
boolean,MavenSession, MavenResourcesExecution)
+     * @deprecated Use {@link #copyFile(File, File, boolean, MavenProject, 
List, boolean, String, MavenSession, ChangeDetection)} instead.
      */
     void copyFile(
             File from,
@@ -55,6 +56,33 @@
             throws MavenFilteringException;
 
     /**
+     * Will copy a file with some filtering using defaultFilterWrappers.
+     *
+     * @param from file to copy/filter
+     * @param to destination file
+     * @param filtering enable or not filtering
+     * @param mavenProject {@link MavenProject}
+     * @param mavenSession {@link MavenSession}
+     * @param escapedBackslashesInFilePath escape backslashes in file path.
+     * @param filters {@link List} of String which are path to a Property file
+     * @param encoding The encoding which is used during the filtering process.
+     * @throws MavenFilteringException in case of failure.
+     * @see DefaultFilterInfo#getDefaultFilterWrappers(MavenProject, List, 
boolean,MavenSession, MavenResourcesExecution)
+     * @since 3.5.0
+     */
+    void copyFile(
+            File from,
+            File to,
+            boolean filtering,
+            MavenProject mavenProject,
+            List<String> filters,
+            boolean escapedBackslashesInFilePath,
+            String encoding,
+            MavenSession mavenSession,
+            ChangeDetection changeDetection)
+            throws MavenFilteringException;
+
+    /**
      * @param mavenFileFilterRequest the request
      * @throws MavenFilteringException in case of failure.
      * @since 1.0-beta-3
@@ -68,7 +96,9 @@
      * @param filterWrappers {@link List} of FileUtils.FilterWrapper
      * @param encoding The encoding used during the filtering.
      * @throws MavenFilteringException In case of an error.
+     * @deprecated use {@link #copyFile(File, File, boolean, List, String, 
ChangeDetection)} instead
      */
+    @Deprecated
     void copyFile(File from, File to, boolean filtering, List<FilterWrapper> 
filterWrappers, String encoding)
             throws MavenFilteringException;
 
@@ -81,7 +111,7 @@
      * @param overwrite unused
      * @throws MavenFilteringException In case of an error.
      * @since 1.0-beta-2
-     * @deprecated use {@link #copyFile(File, File, boolean, List, String)} 
instead
+     * @deprecated use {@link #copyFile(File, File, boolean, List, String, 
ChangeDetection)} instead
      */
     @Deprecated
     void copyFile(
@@ -92,4 +122,23 @@
             String encoding,
             boolean overwrite)
             throws MavenFilteringException;
+
+    /**
+     * @param from The source file
+     * @param to The destination file
+     * @param filtering true to apply filtering
+     * @param filterWrappers The filters to be applied.
+     * @param encoding The encoding to use
+     * @param changeDetection The change detection mode to use to determine if 
the file should be copied/filtered.
+     * @throws MavenFilteringException In case of an error.
+     * @since 3.5.0
+     */
+    void copyFile(
+            File from,
+            File to,
+            boolean filtering,
+            List<FilterWrapper> filterWrappers,
+            String encoding,
+            ChangeDetection changeDetection)
+            throws MavenFilteringException;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java
 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java
--- 
old/maven-filtering-3.4.0/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java
      2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java
      2026-03-02 11:11:22.000000000 +0100
@@ -87,13 +87,6 @@
     private boolean addDefaultExcludes = true;
 
     /**
-     * Overwrite existing files even if the destination files are newer. 
<code>false</code> by default.
-     *
-     * @since 1.0-beta-2
-     */
-    private boolean overwrite = false;
-
-    /**
      * Copy any empty directories included in the Resources.
      *
      * @since 1.0-beta-2
@@ -352,11 +345,13 @@
     /**
      * Overwrite existing files even if the destination files are newer.
      *
-     * @return {@link #overwrite}
+     * @return {@code true} if operation always overwrites.
      * @since 1.0-beta-2
+     * @deprecated Use #getChangeDetection() instead.
      */
+    @Deprecated
     public boolean isOverwrite() {
-        return overwrite;
+        return getChangeDetection() == ChangeDetection.ALWAYS;
     }
 
     /**
@@ -364,9 +359,11 @@
      *
      * @param overwrite overwrite true or false.
      * @since 1.0-beta-2
+     * @deprecated Use #setChangeDetection(ChangeDetection) instead.
      */
+    @Deprecated
     public void setOverwrite(boolean overwrite) {
-        this.overwrite = overwrite;
+        setChangeDetection(overwrite ? ChangeDetection.ALWAYS : 
ChangeDetection.CONTENT);
     }
 
     /**
@@ -440,7 +437,7 @@
         mre.setMavenSession(this.getMavenSession());
         
mre.setNonFilteredFileExtensions(copyList(this.getNonFilteredFileExtensions()));
         mre.setOutputDirectory(this.getOutputDirectory());
-        mre.setOverwrite(this.isOverwrite());
+        mre.setChangeDetection(this.getChangeDetection());
         
mre.setProjectStartExpressions(copyList(this.getProjectStartExpressions()));
         mre.setResources(copyList(this.getResources()));
         mre.setResourcesBaseDirectory(this.getResourcesBaseDirectory());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maven-filtering-3.4.0/src/site/site.xml 
new/maven-filtering-3.5.0/src/site/site.xml
--- old/maven-filtering-3.4.0/src/site/site.xml 2024-08-28 15:27:34.000000000 
+0200
+++ new/maven-filtering-3.5.0/src/site/site.xml 2026-03-02 11:11:22.000000000 
+0100
@@ -19,7 +19,8 @@
 under the License.
 -->
 
-<project xmlns="http://maven.apache.org/DECORATION/1.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 
http://maven.apache.org/xsd/decoration-1.0.0.xsd";>
+<site xmlns="http://maven.apache.org/SITE/2.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+      xsi:schemaLocation="http://maven.apache.org/SITE/2.0.0 
https://maven.apache.org/xsd/site-2.0.0.xsd";>
   <body>
     <menu name="Overview">
       <item name="Introduction" href="index.html"/>
@@ -32,4 +33,4 @@
       <item name="Download" href="download.html"/>
     </menu>
   </body>
-</project>
+</site>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java
 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java
--- 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java
       2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java
       2026-03-02 11:11:22.000000000 +0100
@@ -18,7 +18,6 @@
  */
 package org.apache.maven.shared.filtering;
 
-import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
 
@@ -96,26 +95,26 @@
                 .thenReturn("DONE");
 
         Reader in = new StringReader("aaaFILTER.a.MEaaa");
-        Reader reader = getAaa_AaaReader(in, interpolator);
+        Reader reader = getAaaAaaReader(in, interpolator);
 
         assertEquals("DONE", IOUtils.toString(reader));
 
         in = new StringReader("abcFILTER.a.MEabc");
-        reader = getAbc_AbcReader(in, interpolator);
+        reader = getAbcAbcReader(in, interpolator);
         assertEquals("DONE", IOUtils.toString(reader));
     }
 
     // MSHARED-235: reader exceeds readAheadLimit
     @Test
-    void markInvalid() throws IOException {
+    void markInvalid() throws Exception {
         try (Reader reader = getAtReader(new 
StringReader("@\").replace(p,\"]\").replace(q,\""), interpolator, "\\")) {
             assertEquals("@\").replace(p,\"]\").replace(q,\"", 
IOUtils.toString(reader));
         }
     }
 
-    protected abstract Reader getAbc_AbcReader(Reader in, Interpolator 
interpolator);
+    protected abstract Reader getAbcAbcReader(Reader in, Interpolator 
interpolator);
 
-    protected abstract Reader getAaa_AaaReader(Reader in, Interpolator 
interpolator);
+    protected abstract Reader getAaaAaaReader(Reader in, Interpolator 
interpolator);
 
     protected abstract Reader getDollarBracesReader(Reader in, Interpolator 
interpolator, String escapeString);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/BoundedReaderTest.java
 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/BoundedReaderTest.java
--- 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/BoundedReaderTest.java
    2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/BoundedReaderTest.java
    2026-03-02 11:11:22.000000000 +0100
@@ -19,7 +19,6 @@
 package org.apache.maven.shared.filtering;
 
 import java.io.BufferedReader;
-import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
 
@@ -32,7 +31,7 @@
     private final Reader sr = new BufferedReader(new 
StringReader("01234567890"));
 
     @Test
-    void readTillEnd() throws IOException {
+    void readTillEnd() throws Exception {
         try (BoundedReader mr = new BoundedReader(sr, 3)) {
             mr.mark(3);
             mr.read();
@@ -43,7 +42,7 @@
     }
 
     @Test
-    void readMulti() throws IOException {
+    void readMulti() throws Exception {
         char[] cbuf = new char[4];
         for (int i = 0; i < cbuf.length; i++) {
             cbuf[i] = 'X';
@@ -61,7 +60,7 @@
     }
 
     @Test
-    void readMultiWithOffset() throws IOException {
+    void readMultiWithOffset() throws Exception {
 
         char[] cbuf = new char[4];
         for (int i = 0; i < cbuf.length; i++) {
@@ -80,7 +79,7 @@
     }
 
     @Test
-    void resetWorks() throws IOException {
+    void resetWorks() throws Exception {
         try (BoundedReader mr = new BoundedReader(sr, 3)) {
             mr.read();
             mr.read();
@@ -94,7 +93,7 @@
     }
 
     @Test
-    void skipTest() throws IOException {
+    void skipTest() throws Exception {
         try (BoundedReader mr = new BoundedReader(sr, 3)) {
             mr.skip(2);
             mr.read();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
--- 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
   2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
   2026-03-02 11:11:22.000000000 +0100
@@ -21,7 +21,6 @@
 import javax.inject.Inject;
 
 import java.io.File;
-import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
 import java.nio.file.Files;
@@ -158,7 +157,7 @@
     }
 
     @Test
-    void testInterpolatorCustomizer() throws MavenFilteringException, 
IOException {
+    void interpolatorCustomizer() throws Exception {
         AbstractMavenFilteringRequest req = new 
AbstractMavenFilteringRequest();
         req.setInterpolatorCustomizer(i -> {
             i.addValueSource(new AbstractValueSource(false) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
--- 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
   2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
   2026-03-02 11:11:22.000000000 +0100
@@ -23,6 +23,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -991,7 +992,7 @@
         Resource resource = new Resource();
         resource.setDirectory(unitFilesDir);
         resource.setFiltering(true);
-        resource.addInclude("${pom.version}*");
+        resource.addInclude("**/${pom.version}*");
         resource.setTargetPath("testTargetPath");
 
         MavenResourcesExecution mavenResourcesExecution = new 
MavenResourcesExecution(
@@ -1009,6 +1010,49 @@
 
         File[] files = targetPathFile.listFiles();
         assertEquals(1, files.length);
+        assertEquals("subfolder", files[0].getName());
+        assertTrue(files[0].isDirectory());
+
+        files = files[0].listFiles();
+        assertEquals(1, files.length);
+        assertEquals("1.0.txt", files[0].getName());
+    }
+
+    @Test
+    void filterFileNameWithFileSeparatorAsEscape() throws Exception {
+
+        String unitFilesDir = getBasedir() + 
"/src/test/units-files/maven-filename-filtering";
+
+        Resource resource = new Resource();
+        resource.setDirectory(unitFilesDir);
+        resource.setFiltering(true);
+        resource.addInclude("**/${pom.version}*");
+        resource.setTargetPath("testTargetPath");
+
+        MavenResourcesExecution mavenResourcesExecution = new 
MavenResourcesExecution(
+                Collections.singletonList(resource),
+                outputDirectory,
+                mavenProject,
+                "UTF-8",
+                Collections.<String>emptyList(),
+                Collections.<String>emptyList(),
+                new StubMavenSession());
+        mavenResourcesExecution.setFilterFilenames(true);
+
+        // more likely to occur on windows, where the file
+        // separator is the same as the common escape string "\"
+        
mavenResourcesExecution.setEscapeString(FileSystems.getDefault().getSeparator());
+        mavenResourcesFiltering.filterResources(mavenResourcesExecution);
+
+        File targetPathFile = new File(outputDirectory, "testTargetPath");
+
+        File[] files = targetPathFile.listFiles();
+        assertEquals(1, files.length);
+        assertEquals("subfolder", files[0].getName());
+        assertTrue(files[0].isDirectory());
+
+        files = files[0].listFiles();
+        assertEquals(1, files.length);
         assertEquals("1.0.txt", files[0].getName());
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java
 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java
--- 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java
       2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java
       2026-03-02 11:11:22.000000000 +0100
@@ -24,12 +24,12 @@
 
 public class InterpolatorFilterReaderLineEndingTest extends 
AbstractInterpolatorFilterReaderLineEndingTest {
     @Override
-    protected Reader getAaa_AaaReader(Reader in, Interpolator interpolator) {
+    protected Reader getAaaAaaReader(Reader in, Interpolator interpolator) {
         return new InterpolatorFilterReaderLineEnding(in, interpolator, "aaa", 
"aaa", true);
     }
 
     @Override
-    protected Reader getAbc_AbcReader(Reader in, Interpolator interpolator) {
+    protected Reader getAbcAbcReader(Reader in, Interpolator interpolator) {
         return new InterpolatorFilterReaderLineEnding(in, interpolator, "abc", 
"abc", true);
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java
 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java
--- 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java
 2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java
 2026-03-02 11:11:22.000000000 +0100
@@ -49,7 +49,7 @@
     }
 
     @Override
-    protected Reader getAaa_AaaReader(Reader in, Interpolator interpolator) {
+    protected Reader getAaaAaaReader(Reader in, Interpolator interpolator) {
         MultiDelimiterInterpolatorFilterReaderLineEnding reader =
                 new MultiDelimiterInterpolatorFilterReaderLineEnding(in, 
interpolator, true);
         reader.setDelimiterSpecs(Collections.singleton("aaa*aaa"));
@@ -57,7 +57,7 @@
     }
 
     @Override
-    protected Reader getAbc_AbcReader(Reader in, Interpolator interpolator) {
+    protected Reader getAbcAbcReader(Reader in, Interpolator interpolator) {
         MultiDelimiterInterpolatorFilterReaderLineEnding reader =
                 new MultiDelimiterInterpolatorFilterReaderLineEnding(in, 
interpolator, true);
         reader.setDelimiterSpecs(Collections.singleton("abc*abc"));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/PropertyUtilsTest.java
 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/PropertyUtilsTest.java
--- 
old/maven-filtering-3.4.0/src/test/java/org/apache/maven/shared/filtering/PropertyUtilsTest.java
    2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/test/java/org/apache/maven/shared/filtering/PropertyUtilsTest.java
    2026-03-02 11:11:22.000000000 +0100
@@ -29,7 +29,9 @@
 import org.junit.jupiter.api.Test;
 
 import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Olivier Lamy
@@ -102,7 +104,7 @@
      * @throws IOException if problem writing file
      */
     @Test
-    void circularReferences() throws IOException {
+    void circularReferences() throws Exception {
         File circularProperties = File.createTempFile("circular", 
".properties");
         circularProperties.deleteOnExit();
 
@@ -123,7 +125,7 @@
      * @throws IOException if problem writing file
      */
     @Test
-    void circularReferences3Vars() throws IOException {
+    void circularReferences3Vars() throws Exception {
         File circularProperties = File.createTempFile("circular", 
".properties");
         circularProperties.deleteOnExit();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/test/units-files/includeEmptyDirs/empty-directory/.gitignore
 
new/maven-filtering-3.5.0/src/test/units-files/includeEmptyDirs/empty-directory/.gitignore
--- 
old/maven-filtering-3.4.0/src/test/units-files/includeEmptyDirs/empty-directory/.gitignore
  2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/test/units-files/includeEmptyDirs/empty-directory/.gitignore
  1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-# just here to make the directory non-empty
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/test/units-files/includeEmptyDirs/empty-directory-child/empty-child/.gitignore
 
new/maven-filtering-3.5.0/src/test/units-files/includeEmptyDirs/empty-directory-child/empty-child/.gitignore
--- 
old/maven-filtering-3.4.0/src/test/units-files/includeEmptyDirs/empty-directory-child/empty-child/.gitignore
        2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/test/units-files/includeEmptyDirs/empty-directory-child/empty-child/.gitignore
        1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-# just here to make the directory non-empty
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/test/units-files/maven-filename-filtering/${pom.version}.txt
 
new/maven-filtering-3.5.0/src/test/units-files/maven-filename-filtering/${pom.version}.txt
--- 
old/maven-filtering-3.4.0/src/test/units-files/maven-filename-filtering/${pom.version}.txt
  2024-08-28 15:27:34.000000000 +0200
+++ 
new/maven-filtering-3.5.0/src/test/units-files/maven-filename-filtering/${pom.version}.txt
  1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maven-filtering-3.4.0/src/test/units-files/maven-filename-filtering/subfolder/${pom.version}.txt
 
new/maven-filtering-3.5.0/src/test/units-files/maven-filename-filtering/subfolder/${pom.version}.txt
--- 
old/maven-filtering-3.4.0/src/test/units-files/maven-filename-filtering/subfolder/${pom.version}.txt
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/maven-filtering-3.5.0/src/test/units-files/maven-filename-filtering/subfolder/${pom.version}.txt
        2026-03-02 11:11:22.000000000 +0100
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.

++++++ maven-filtering-build.xml ++++++
--- /var/tmp/diff_new_pack.jhHLAB/_old  2026-03-05 17:33:40.088724362 +0100
+++ /var/tmp/diff_new_pack.jhHLAB/_new  2026-03-05 17:33:40.096724694 +0100
@@ -10,11 +10,11 @@
 
   <property name="project.groupId" value="org.apache.maven.shared"/>
   <property name="project.artifactId" value="maven-filtering"/>
-  <property name="project.version" value="3.4.0"/>
+  <property name="project.version" value="3.5.0"/>
   <property name="project.name" value="Apache Maven Filtering"/>
   <property name="project.organization.name" value="The Apache Software 
Foundation"/>
 
-  <property name="spec.version" value="3.4"/>
+  <property name="spec.version" value="3.5"/>
 
   <property name="compiler.release" value="8"/>
   <property name="compiler.source" value="1.${compiler.release}"/>

Reply via email to