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: + * + * + * 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); }