You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2026/05/13 14:18:54 UTC
(maven) branch maven-4.0.x-test-fixes updated (6c192d4d61 -> b408c74f7d)
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a change to branch maven-4.0.x-test-fixes
in repository https://gitbox.apache.org/repos/asf/maven.git
from 6c192d4d61 Fix #11920: skip expression validation for profile repository URLs
new aaeae6c3f9 fix: propagate addResource() to model Build for Maven 3 compat
new ea61c53f1c fix: sync Build.resources from sources set for Maven 3 compat
new b408c74f7d fix: only sync Build.resources for <sources> projects
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../maven/project/DefaultProjectBuilder.java | 8 +++
.../org/apache/maven/project/MavenProject.java | 20 ++++++--
.../apache/maven/project/ResourceIncludeTest.java | 58 ++++++++++++++++++++++
3 files changed, 82 insertions(+), 4 deletions(-)
(maven) 01/03: fix: propagate addResource() to model Build for Maven 3 compat
Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch maven-4.0.x-test-fixes
in repository https://gitbox.apache.org/repos/asf/maven.git
commit aaeae6c3f983ef91042b34bae395c9e631597a8f
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Tue Mar 31 11:41:57 2026 +0200
fix: propagate addResource() to model Build for Maven 3 compat
When a Maven 3 plugin dynamically adds a resource via
project.addResource() or project.getResources().add(), the resource
was only added to the internal sources set but not to the model's
Build.resources. This caused project.getBuild().getResources() to be
out of sync with project.getResources(), breaking plugins like
maven-source-plugin that access resources through the Build model.
Co-Authored-By: Claude Opus 4.6 <no...@anthropic.com>
---
.../org/apache/maven/project/MavenProject.java | 7 +++
.../apache/maven/project/ResourceIncludeTest.java | 58 ++++++++++++++++++++++
2 files changed, 65 insertions(+)
diff --git a/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java b/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
index 45731697a7..72a81e64a4 100644
--- a/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
+++ b/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
@@ -838,6 +838,13 @@ private Resource toConnectedResource(SourceRoot sourceRoot, ProjectScope scope)
private void addResource(ProjectScope scope, Resource resource) {
addSourceRoot(new DefaultSourceRoot(getBaseDirectory(), scope, resource.getDelegate()));
+ // Also update the model's Build to maintain compatibility with code that
+ // accesses resources via project.getBuild().getResources()
+ if (scope == ProjectScope.MAIN) {
+ getModelBuild().addResource(resource);
+ } else {
+ getModelBuild().addTestResource(resource);
+ }
}
/**
diff --git a/impl/maven-core/src/test/java/org/apache/maven/project/ResourceIncludeTest.java b/impl/maven-core/src/test/java/org/apache/maven/project/ResourceIncludeTest.java
index 519dbd5770..57ad0dbfc8 100644
--- a/impl/maven-core/src/test/java/org/apache/maven/project/ResourceIncludeTest.java
+++ b/impl/maven-core/src/test/java/org/apache/maven/project/ResourceIncludeTest.java
@@ -281,4 +281,62 @@ void testTargetPathEdgeCases() {
placeholderResult.getTargetPath(),
"Property placeholder in targetPath should be preserved");
}
+
+ /**
+ * Verifies that resources added via {@code project.addResource()} or
+ * {@code project.getResources().add()} are visible through both
+ * {@code project.getResources()} and {@code project.getBuild().getResources()}.
+ * This is important for Maven 3 compatibility, since plugins may access
+ * resources through either path.
+ *
+ * @see <a href="https://github.com/apache/maven-source-plugin/pull/281">maven-source-plugin#281</a>
+ */
+ @Test
+ void testAddResourceVisibleViaBuildGetResources() {
+ // Initial state: one resource in sources, none added dynamically
+ assertEquals(1, project.getResources().size());
+ int initialBuildResources = project.getBuild().getResources().size();
+
+ // Add a resource dynamically (simulating what maven-remote-resources-plugin does)
+ Resource dynamicResource = new Resource();
+ dynamicResource.setDirectory("target/maven-shared-archive-resources");
+ project.addResource(dynamicResource);
+
+ // Verify visible via project.getResources()
+ List<Resource> projectResources = project.getResources();
+ assertEquals(2, projectResources.size(), "Dynamic resource should be visible via project.getResources()");
+
+ // Verify ALSO visible via project.getBuild().getResources()
+ List<Resource> buildResources = project.getBuild().getResources();
+ assertEquals(
+ initialBuildResources + 1,
+ buildResources.size(),
+ "Dynamic resource should also be visible via project.getBuild().getResources()");
+
+ boolean found =
+ buildResources.stream().anyMatch(r -> r.getDirectory().contains("maven-shared-archive-resources"));
+ assertTrue(found, "getBuild().getResources() should contain the dynamically added resource");
+ }
+
+ /**
+ * Same as above but using {@code project.getResources().add()} path.
+ */
+ @Test
+ void testAddResourceViaListVisibleViaBuildGetResources() {
+ int initialBuildResources = project.getBuild().getResources().size();
+
+ Resource dynamicResource = new Resource();
+ dynamicResource.setDirectory("target/maven-shared-archive-resources");
+ project.getResources().add(dynamicResource);
+
+ List<Resource> buildResources = project.getBuild().getResources();
+ assertEquals(
+ initialBuildResources + 1,
+ buildResources.size(),
+ "Resource added via getResources().add() should be visible via getBuild().getResources()");
+
+ boolean found =
+ buildResources.stream().anyMatch(r -> r.getDirectory().contains("maven-shared-archive-resources"));
+ assertTrue(found, "getBuild().getResources() should contain the resource added via getResources().add()");
+ }
}
(maven) 02/03: fix: sync Build.resources from sources set for Maven 3 compat
Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch maven-4.0.x-test-fixes
in repository https://gitbox.apache.org/repos/asf/maven.git
commit ea61c53f1ce89272b9b2c8f9635a3bc41cf71e5d
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Wed Apr 1 10:41:25 2026 +0200
fix: sync Build.resources from sources set for Maven 3 compat
Also sync the model's Build.resources after project building so that
project.getBuild().getResources() is consistent with
project.getResources() even when resources are defined via <sources>
(Maven 4.1.0 model) rather than legacy <resources>.
Co-Authored-By: Claude Opus 4.6 <no...@anthropic.com>
---
.../org/apache/maven/project/DefaultProjectBuilder.java | 6 ++++++
.../main/java/org/apache/maven/project/MavenProject.java | 13 +++++++++----
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index bcc0e28abb..efa4ce2efc 100644
--- a/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ b/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -771,6 +771,12 @@ implicit fallback (only if they match the default, e.g., inherited)
sourceContext.handleResourceConfiguration(ProjectScope.MAIN);
sourceContext.handleResourceConfiguration(ProjectScope.TEST);
}
+
+ // Sync model Build resources from sources set so that
+ // project.getBuild().getResources() is consistent with project.getResources().
+ // This is needed for Maven 3 plugin compatibility, since some plugins
+ // (e.g. maven-source-plugin) access resources via project.getBuild().getResources().
+ project.syncBuildResources();
}
project.setActiveProfiles(
diff --git a/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java b/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
index 72a81e64a4..e6c2c05acb 100644
--- a/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
+++ b/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
@@ -848,16 +848,21 @@ private void addResource(ProjectScope scope, Resource resource) {
}
/**
- * @deprecated {@link Resource} is replaced by {@link SourceRoot}.
+ * Syncs {@code Build.resources/testResources} from the {@code sources} set
+ * for Maven 3 plugin compatibility (e.g. when resources come from {@code <sources>}).
*/
+ void syncBuildResources() {
+ getModelBuild().setResources(new java.util.ArrayList<>(getResources()));
+ getModelBuild().setTestResources(new java.util.ArrayList<>(getTestResources()));
+ }
+
+ /** @deprecated {@link Resource} is replaced by {@link SourceRoot}. */
@Deprecated(since = "4.0.0")
public void addResource(Resource resource) {
addResource(ProjectScope.MAIN, resource);
}
- /**
- * @deprecated {@link Resource} is replaced by {@link SourceRoot}.
- */
+ /** @deprecated {@link Resource} is replaced by {@link SourceRoot}. */
@Deprecated(since = "4.0.0")
public void addTestResource(Resource testResource) {
addResource(ProjectScope.TEST, testResource);
(maven) 03/03: fix: only sync Build.resources for projects
Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch maven-4.0.x-test-fixes
in repository https://gitbox.apache.org/repos/asf/maven.git
commit b408c74f7d757bbd8bf0512925e2695584e862f4
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Wed Apr 1 11:09:40 2026 +0200
fix: only sync Build.resources for <sources> projects
Avoid syncing Build.resources for legacy projects to prevent
Path.toString() from converting forward slashes to backslashes
on Windows (fixes PomConstructionTest.testTargetPathResourceRegression).
Co-Authored-By: Claude Opus 4.6 <no...@anthropic.com>
---
.../java/org/apache/maven/project/DefaultProjectBuilder.java | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index efa4ce2efc..f9c645be33 100644
--- a/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ b/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -772,11 +772,13 @@ implicit fallback (only if they match the default, e.g., inherited)
sourceContext.handleResourceConfiguration(ProjectScope.TEST);
}
- // Sync model Build resources from sources set so that
- // project.getBuild().getResources() is consistent with project.getResources().
- // This is needed for Maven 3 plugin compatibility, since some plugins
- // (e.g. maven-source-plugin) access resources via project.getBuild().getResources().
- project.syncBuildResources();
+ // When resources are defined via <sources> (4.1.0 model), sync them to
+ // the model's Build so project.getBuild().getResources() is consistent.
+ // For legacy <resources>, the model already has the correct resources.
+ if (sourceContext.hasSources(Language.RESOURCES, ProjectScope.MAIN)
+ || sourceContext.hasSources(Language.RESOURCES, ProjectScope.TEST)) {
+ project.syncBuildResources();
+ }
}
project.setActiveProfiles(