This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch MNG-7758_workaround
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 30dbf2bb47dbb4df05b8c108f78e27cc40b2b3ba
Author: Michael Osipov <[email protected]>
AuthorDate: Sat Apr 22 23:30:56 2023 +0200

    [MNG-7770] Implement workaround for MNG-7758/MRESOLVER-335
---
 .../maven/artifact/resolver/DefaultArtifactResolver.java      |  4 +++-
 .../java/org/apache/maven/project/DefaultProjectBuilder.java  |  5 ++++-
 .../apache/maven/project/artifact/MavenMetadataSource.java    | 11 ++++++++---
 .../project/collector/MultiModuleCollectionStrategy.java      |  5 ++++-
 .../repository/internal/DefaultArtifactDescriptorReader.java  |  8 ++++++--
 5 files changed, 25 insertions(+), 8 deletions(-)

diff --git 
a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
 
b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
index 6277c1787..48537f771 100644
--- 
a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
+++ 
b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
@@ -187,7 +187,9 @@ public class DefaultArtifactResolver implements 
ArtifactResolver, Disposable {
 
                 result = repoSystem.resolveArtifact(session, artifactRequest);
             } catch (org.eclipse.aether.resolution.ArtifactResolutionException 
e) {
-                if (e.getCause() instanceof 
org.eclipse.aether.transfer.ArtifactNotFoundException) {
+                // This is a workaround for MNG-7758/MRESOLVER-335
+                if (e.getResult().getExceptions().stream()
+                        .anyMatch(re -> re instanceof 
org.eclipse.aether.transfer.ArtifactNotFoundException)) {
                     throw new ArtifactNotFoundException(
                             "Could not find artifact '" + artifact + "'", 
artifact, remoteRepositories, e);
                 } else {
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java 
b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index 55d52cac5..8235ef302 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -307,7 +307,10 @@ public class DefaultProjectBuilder implements 
ProjectBuilder {
             pomArtifact = pomResult.getArtifact();
             localProject = pomResult.getRepository() instanceof 
WorkspaceRepository;
         } catch (org.eclipse.aether.resolution.ArtifactResolutionException e) {
-            if (e.getResults().get(0).isMissing() && allowStubModel) {
+            // This is a workaround for MNG-7758/MRESOLVER-335
+            if (e.getResult().getExceptions().stream()
+                            .anyMatch(re -> re instanceof 
org.eclipse.aether.transfer.ArtifactNotFoundException)
+                    && allowStubModel) {
                 return build(null, createStubModelSource(artifact), config);
             }
             throw new ProjectBuildingException(artifact.getId(), "Error 
resolving project artifact", e);
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
 
b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
index 41af27985..d4398ad09 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
@@ -83,7 +83,6 @@ import 
org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RepositoryPolicy;
 import org.eclipse.aether.repository.WorkspaceReader;
-import org.eclipse.aether.transfer.ArtifactNotFoundException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -672,16 +671,22 @@ public class MavenMetadataSource implements 
ArtifactMetadataSource {
         if (e.getCause() instanceof MultipleArtifactsNotFoundException) {
             return true;
         }
+        // This is a workaround for MNG-7758/MRESOLVER-335
         return e.getCause() instanceof 
org.eclipse.aether.resolution.ArtifactResolutionException
-                && e.getCause().getCause() instanceof 
ArtifactNotFoundException;
+                && 
((org.eclipse.aether.resolution.ArtifactResolutionException) e.getCause())
+                        .getResult().getExceptions().stream()
+                                .anyMatch(re -> re instanceof 
org.eclipse.aether.transfer.ArtifactNotFoundException);
     }
 
     private boolean isNonTransferablePom(Exception e) {
         if (e.getCause() instanceof ArtifactResolutionException) {
             return true;
         }
+        // This is a workaround for MNG-7758/MRESOLVER-335
         return e.getCause() instanceof 
org.eclipse.aether.resolution.ArtifactResolutionException
-                && !(e.getCause().getCause() instanceof 
ArtifactNotFoundException);
+                && 
((org.eclipse.aether.resolution.ArtifactResolutionException) e.getCause())
+                        .getResult().getExceptions().stream()
+                                .noneMatch(re -> re instanceof 
org.eclipse.aether.transfer.ArtifactNotFoundException);
     }
 
     private Properties getSystemProperties() {
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/collector/MultiModuleCollectionStrategy.java
 
b/maven-core/src/main/java/org/apache/maven/project/collector/MultiModuleCollectionStrategy.java
index fa38120f4..2379bb228 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/collector/MultiModuleCollectionStrategy.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/collector/MultiModuleCollectionStrategy.java
@@ -160,7 +160,10 @@ public class MultiModuleCollectionStrategy implements 
ProjectCollectionStrategy
                     Predicate<Exception> pluginArtifactNotFoundException = exc 
-> exc instanceof PluginManagerException
                             && exc.getCause() instanceof 
PluginResolutionException
                             && exc.getCause().getCause() instanceof 
ArtifactResolutionException
-                            && exc.getCause().getCause().getCause() instanceof 
ArtifactNotFoundException;
+                            // This is a workaround for MNG-7758/MRESOLVER-335
+                            && ((ArtifactResolutionException) 
exc.getCause().getCause())
+                                    .getResult().getExceptions().stream()
+                                            .anyMatch(re -> re instanceof 
ArtifactNotFoundException);
 
                     Predicate<Plugin> isPluginPartOfRequestScope = plugin -> 
projectsInRequestScope.stream()
                             .anyMatch(project -> 
project.getGroupId().equals(plugin.getGroupId())
diff --git 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
index 8a3ed3ed6..2caea1216 100644
--- 
a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
+++ 
b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
@@ -170,8 +170,12 @@ public class DefaultArtifactDescriptorReader implements 
ArtifactDescriptorReader
                 pomArtifact = resolveResult.getArtifact();
                 result.setRepository(resolveResult.getRepository());
             } catch (ArtifactResolutionException e) {
-                if (e.getCause() instanceof ArtifactNotFoundException) {
-                    missingDescriptor(session, trace, a, (Exception) 
e.getCause());
+                // This is a workaround for MNG-7758/MRESOLVER-335
+                if (e.getResult().getExceptions().stream().anyMatch(re -> re 
instanceof ArtifactNotFoundException)) {
+                    missingDescriptor(session, trace, a, (Exception) 
e.getResult().getExceptions().stream()
+                            .filter(re -> re instanceof 
ArtifactNotFoundException)
+                            .findFirst()
+                            .get());
                     if ((getPolicy(session, a, request) & 
ArtifactDescriptorPolicy.IGNORE_MISSING) != 0) {
                         return null;
                     }

Reply via email to