[ https://issues.apache.org/jira/browse/MNG-6732?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Guillaume Nodet updated MNG-6732: --------------------------------- Fix Version/s: 4.x / Backlog > DefaultArtifactDescriptorReader.loadPom to check IGNORE_MISSING policy upon > ArtifactTransferException > ----------------------------------------------------------------------------------------------------- > > Key: MNG-6732 > URL: https://issues.apache.org/jira/browse/MNG-6732 > Project: Maven > Issue Type: Improvement > Components: Core > Affects Versions: 3.6.1 > Reporter: Tomo Suzuki > Priority: Major > Fix For: 4.0.x-candidate, 4.x / Backlog > > Attachments: 62884438-89260580-bd04-11e9-8c4a-897d4b736dc7.png > > Time Spent: 0.5h > Remaining Estimate: 0h > > h1. Problem > Sometimes [Linkage Checker enforcer > rule|https://github.com/GoogleCloudPlatform/cloud-opensource-java/tree/master/enforcer-rules] > does not receive resolved artifact list because of a missing artifact even > when the missing artifact is unused after Maven's dependency mediation. > h1. Background > The enforcer rule fails to retrieve artifact list through > {{DefaultProjectDependenciesResolver.resolve}} when applied to > [grpc-java-by-example/chat-example/chat-vaadin-client|https://github.com/saturnism/grpc-java-by-example/tree/master/chat-example/chat-vaadin-client] > because of the missing {{xerces:xerces-impl:2.6.2}}, even though the > artifact does not appear in the final dependency graph. The artifact does not > appear in the graph because of Maven's dependency mediation. > Artifact xerces:xerces-impl:2.6.2 is not published in Maven Central. > In contrast, the enforcer rule can retrieve artifact list when applied to > [https://github.com/suztomo/spring-cloud-gcp/tree/v1.1.2-linkage-checker] > project even though it outputs "[WARNING] The POM for > xerces:xerces-impl:jar:2.6.2 is missing, no dependency information > available". The missing artifact does not appear in final dependency graph. > [https://github.com/GoogleCloudPlatform/cloud-opensource-java/issues/834] > h1. Diagnosis > Currently {{DefaultArtifactDescriptorReader.loadPom}} method checks > "ArtifactDescriptorPolicy.IGNORE_MISSING" policy upon > ArtifactNotFoundException. This allows > {{DefaultProjectDependenciesResolver.resolve}} calls > {{repoSystem.resolveDependencies}} to obtain partially resolved artifact > list, rather than failing entirely, when there is a missing artifact (such as > {{xerces:xerces-impl:2.6.2}}) > However, when a retired Maven repository is involved (such as > [http://repository.codehaus.org/] ), > {{DefaultArtifactDescriptorReader.loadPom}} gets an ArtifactTransferException > and throws ArtifactDescriptorException without checking > "ArtifactDescriptorPolicy.IGNORE_MISSING" policy (excerpt below), and thus > {{DefaultProjectDependenciesResolver.resolve}} does not return partially > resolved artifact list. > {code:java} > catch ( ArtifactResolutionException e ) > { > if ( e.getCause() instanceof ArtifactNotFoundException ) > { > missingDescriptor( session, trace, a, (Exception) > e.getCause() ); > if ( ( getPolicy( session, a, request ) & > ArtifactDescriptorPolicy.IGNORE_MISSING ) != 0 ) > { > return null; > } > } > result.addException( e ); > throw new ArtifactDescriptorException( result ); > } > {code} > from > [DefaultArtifactDescriptorReader.java|https://github.com/apache/maven/blob/d3ace78/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java#L255] > ArtifactNotFoundException is a special case of > [ArtifactTransferException|https://maven.apache.org/resolver/apidocs/org/eclipse/aether/transfer/ArtifactTransferException.html]. > h1. Example Project > Example project to demonstrate the diagnosis: > [https://github.com/suztomo/maven-missing-artifact] . In this example, even > though module-b and module-c have the same dependency section, module-c fails > to run Maven because of a repository section containing a retired repository > URL. -- This message was sent by Atlassian Jira (v8.20.10#820010)