From f954a246d84d0846cedeaa308868031a577e1e46 Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Wed, 19 Jul 2023 05:03:41 +0200 Subject: [PATCH] Revert "Use resolve() method that actually throws exception. Respect remote repository chaching." This reverts commit e2a14bf32a5bddabee71e0fc2e35f575f7d1aacc. fixes #6222 ArtifactResolutionExceptions when working with maven projects --- .../modules/maven/embedder/MavenEmbedder.java | 22 ++++++++++--------- .../AbstractProjectClassPathImplTest.java | 7 +----- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/MavenEmbedder.java b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/MavenEmbedder.java index 7608be22037c..4bf4c3895402 100644 --- a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/MavenEmbedder.java +++ b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/MavenEmbedder.java @@ -45,7 +45,6 @@ import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolutionRequest; import org.apache.maven.artifact.resolver.ArtifactResolutionResult; -import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.cli.configuration.SettingsXmlConfigurationProcessor; import org.apache.maven.execution.DefaultMavenExecutionRequest; import org.apache.maven.execution.DefaultMavenExecutionResult; @@ -94,7 +93,6 @@ import org.openide.util.BaseUtilities; import org.eclipse.aether.repository.Authentication; import org.eclipse.aether.DefaultRepositorySystemSession; -import org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManagerFactory; import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; import org.eclipse.aether.repository.LocalRepository; import org.eclipse.aether.repository.NoLocalRepositoryManagerException; @@ -372,13 +370,17 @@ public ArtifactRepository createRemoteRepository(String url, String id) { */ public void resolve(Artifact sources, List remoteRepositories, ArtifactRepository localRepository) throws ArtifactResolutionException, ArtifactNotFoundException { setUpLegacySupport(); - - // must call internal Resolver API directly, as the RepositorySystem does not report an exception, - // even in ArtifactResolutionResult: resolve(ArtifactResolutionRequest request) catches the exception and - // swallows ArtifactNotFoundException. - // The existing calling code that handles these exception cannot work, in fact, when using resolve(ArtifactResolutionRequest request) API. - lookupComponent(ArtifactResolver.class).resolveAlways(sources, remoteRepositories, localRepository); + ArtifactResolutionRequest req = new ArtifactResolutionRequest(); + req.setLocalRepository(localRepository); + req.setRemoteRepositories(remoteRepositories); + req.setArtifact(sources); + req.setOffline(isOffline()); + ArtifactResolutionResult result = repositorySystem.resolve(req); normalizePath(sources); + // XXX check result for exceptions and throw them now? + for (Exception ex : result.getExceptions()) { + LOG.log(Level.FINE, null, ex); + } } //TODO possibly rename.. build sounds like something else.. @@ -509,7 +511,7 @@ public MavenExecutionRequest createMavenExecutionRequest(){ return req; } - + /** * Needed to avoid an NPE in {@link org.eclipse.org.eclipse.aether.DefaultArtifactResolver#resolveArtifacts} under some conditions. * (Also {@link org.eclipse.org.eclipse.aether.DefaultMetadataResolver#resolve}; wherever a {@link org.eclipse.aether.RepositorySystemSession} is used.) @@ -522,7 +524,7 @@ public void setUpLegacySupport() { } DefaultRepositorySystemSession session = new DefaultRepositorySystemSession(); session.setOffline(isOffline()); - EnhancedLocalRepositoryManagerFactory f = lookupComponent(EnhancedLocalRepositoryManagerFactory.class); + SimpleLocalRepositoryManagerFactory f = new SimpleLocalRepositoryManagerFactory(); try { session.setLocalRepositoryManager(f.newInstance(session, new LocalRepository(getLocalRepository().getBasedir()))); } catch (NoLocalRepositoryManagerException ex) { diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/classpath/AbstractProjectClassPathImplTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/classpath/AbstractProjectClassPathImplTest.java index c1f5edfd7831..78a54701ca08 100644 --- a/java/maven/test/unit/src/org/netbeans/modules/maven/classpath/AbstractProjectClassPathImplTest.java +++ b/java/maven/test/unit/src/org/netbeans/modules/maven/classpath/AbstractProjectClassPathImplTest.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.logging.Level; import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.codehaus.plexus.util.FileUtils; import org.netbeans.junit.NbTestCase; import org.netbeans.modules.maven.embedder.EmbedderFactory; @@ -61,11 +60,7 @@ public void testGetFile() throws Exception { File downloaded = new File(repo, "nbtest/grp/art/1.10-SNAPSHOT/art-1.10-20210520.222429-1.jar"); Artifact a = EmbedderFactory.getProjectEmbedder().createArtifact("nbtest.grp", "art", "1.10-20210520.222429-1", "jar"); assertNull(AbstractProjectClassPathImpl.getFile(a)); - try { - EmbedderFactory.getProjectEmbedder().resolve(a, Collections.emptyList(), EmbedderFactory.getProjectEmbedder().getLocalRepository()); - } catch (ArtifactNotFoundException ex) { - // the downloaded artifact was not found, expected as only -SNAPSHOT is installed. - } + EmbedderFactory.getProjectEmbedder().resolve(a, Collections.emptyList(), EmbedderFactory.getProjectEmbedder().getLocalRepository()); assertEquals(installed, a.getFile()); assertEquals(installed, AbstractProjectClassPathImpl.getFile(a)); FileUtils.mkdir(downloaded.getParent());