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

mbien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 1aabe20219 #6525: maven execution should setup LegacySupport before 
running Maven
     new 1fc0a4e56d Merge pull request #6552 from 
sdedic/maven/execute-legacy-support
1aabe20219 is described below

commit 1aabe202194c62c9a26235eec866302dae7a11e7
Author: Svata Dedic <svatopluk.de...@oracle.com>
AuthorDate: Mon Oct 16 17:53:04 2023 +0200

    #6525: maven execution should setup LegacySupport before running Maven
---
 .../modules/maven/embedder/MavenEmbedder.java      | 115 ++++++++++++---------
 1 file changed, 69 insertions(+), 46 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 0216b7d2df..72a12f21f2 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
@@ -20,6 +20,8 @@
 package org.netbeans.modules.maven.embedder;
 
 import java.io.File;
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -35,7 +37,6 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 import org.apache.maven.DefaultMaven;
 import org.apache.maven.Maven;
-import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.InvalidRepositoryException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -98,8 +99,8 @@ import org.openide.util.Exceptions;
 import org.openide.util.BaseUtilities;
 import org.eclipse.aether.repository.Authentication;
 import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystemSession;
 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;
 import org.eclipse.aether.util.repository.AuthenticationBuilder;
@@ -479,6 +480,7 @@ public final class MavenEmbedder {
      * @throws ModelBuildingException if the POM or parents could not even be 
parsed; warnings are not reported
      */
     public ModelBuildingResult executeModelBuilder(File pom) throws 
ModelBuildingException {
+        setUpLegacySupport();
         ModelBuilder mb = lookupComponent(ModelBuilder.class);
         assert mb!=null : "ModelBuilder component not found in maven";
         ModelBuildingRequest req = new DefaultModelBuildingRequest();
@@ -598,6 +600,11 @@ public final class MavenEmbedder {
         return req;
     }
     
+    /**
+     * Do not keep the reference to the session. Plexus will hopefully keep it 
for us.
+     */
+    private volatile Reference<MavenSession> thisRepositorySession = new 
WeakReference<>(null);
+    
     /**
      * 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.)
@@ -605,54 +612,70 @@ public final class MavenEmbedder {
      */
     public void setUpLegacySupport() {
         LegacySupport support = lookupComponent(LegacySupport.class);
-        if (support.getSession() != null) {
-            return;
-        }
-        DefaultRepositorySystemSession session = new 
DefaultRepositorySystemSession();
-        session.setOffline(isOffline());
-        EnhancedLocalRepositoryManagerFactory f = 
lookupComponent(EnhancedLocalRepositoryManagerFactory.class);
-        try {
-            session.setLocalRepositoryManager(f.newInstance(session, new 
LocalRepository(getLocalRepository().getBasedir())));
-        } catch (NoLocalRepositoryManagerException ex) {
-            LOG.log(Level.WARNING, null, ex);
-        }
-        // Adapted from DefaultMaven.newRepositorySession, but does not look 
like that can be called directly:
-        DefaultMirrorSelector mirrorSelector = new DefaultMirrorSelector();
-        Settings _settings = getSettings();
-        for (Mirror m : _settings.getMirrors()) {
-            mirrorSelector.add(m.getId(), m.getUrl(), m.getLayout(), false, 
m.getMirrorOf(), m.getMirrorOfLayouts());
+        MavenSession existing = support.getSession();
+        MavenSession initializedSession = thisRepositorySession.get();
+        if (existing != null) {
+            RepositorySystemSession existingRepo = 
existing.getRepositorySession();
+            if (initializedSession != null && 
initializedSession.getRepositorySession() == existingRepo) {
+                return;
+            }
         }
-        session.setMirrorSelector(mirrorSelector);
-        SettingsDecryptionResult decryptionResult = 
settingsDecrypter.decrypt(new DefaultSettingsDecryptionRequest(_settings));
-        
-        DefaultProxySelector proxySelector = new DefaultProxySelector();
-        for (Proxy p : decryptionResult.getProxies()) {
-            if (p.isActive()) {
+        if (initializedSession == null) {
+            DefaultRepositorySystemSession session = new 
DefaultRepositorySystemSession();
+            session.setOffline(isOffline());
+            EnhancedLocalRepositoryManagerFactory f = 
lookupComponent(EnhancedLocalRepositoryManagerFactory.class);
+            try {
+                session.setLocalRepositoryManager(f.newInstance(session, new 
LocalRepository(getLocalRepository().getBasedir())));
+            } catch (NoLocalRepositoryManagerException ex) {
+                LOG.log(Level.WARNING, null, ex);
+            }
+            // Adapted from DefaultMaven.newRepositorySession, but does not 
look like that can be called directly:
+            DefaultMirrorSelector mirrorSelector = new DefaultMirrorSelector();
+            Settings _settings = getSettings();
+            for (Mirror m : _settings.getMirrors()) {
+                mirrorSelector.add(m.getId(), m.getUrl(), m.getLayout(), 
false, m.getMirrorOf(), m.getMirrorOfLayouts());
+            }
+            session.setMirrorSelector(mirrorSelector);
+            SettingsDecryptionResult decryptionResult = 
settingsDecrypter.decrypt(new DefaultSettingsDecryptionRequest(_settings));
+
+            DefaultProxySelector proxySelector = new DefaultProxySelector();
+            for (Proxy p : decryptionResult.getProxies()) {
+                if (p.isActive()) {
+                    AuthenticationBuilder ab = new AuthenticationBuilder();
+                    ab.addUsername(p.getUsername());
+                    ab.addPassword(p.getPassword());
+                    Authentication a = ab.build();
+                   //#null -> getProtocol() #209499
+                   proxySelector.add(new 
org.eclipse.aether.repository.Proxy(p.getProtocol(), p.getHost(), p.getPort(), 
a), p.getNonProxyHosts());
+                }
+            }
+            session.setProxySelector(proxySelector);
+            DefaultAuthenticationSelector authenticationSelector = new 
DefaultAuthenticationSelector();
+            for (Server s : decryptionResult.getServers()) {
                 AuthenticationBuilder ab = new AuthenticationBuilder();
-                ab.addUsername(p.getUsername());
-                ab.addPassword(p.getPassword());
-                Authentication a = ab.build();
-               //#null -> getProtocol() #209499
-               proxySelector.add(new 
org.eclipse.aether.repository.Proxy(p.getProtocol(), p.getHost(), p.getPort(), 
a), p.getNonProxyHosts());
+                ab.addUsername(s.getUsername());
+                ab.addPassword(s.getPassword());
+                ab.addPrivateKey(s.getPrivateKey(), s.getPassphrase());
+                Authentication a = ab.build();            
+                authenticationSelector.add(s.getId(), a);
+            }
+            session.setAuthenticationSelector(authenticationSelector);
+            DefaultMavenExecutionRequest mavenExecutionRequest = new 
DefaultMavenExecutionRequest();
+            
mavenExecutionRequest.setSystemProperties(embedderConfiguration.getSystemProperties());
+            mavenExecutionRequest.setOffline(isOffline());
+            
mavenExecutionRequest.setTransferListener(ProgressTransferListener.activeListener());
+            
session.setTransferListener(ProgressTransferListener.activeListener());
+
+            MavenSession s = new MavenSession(getPlexus(), session, 
mavenExecutionRequest, new DefaultMavenExecutionResult());
+            synchronized (this) {
+                initializedSession = thisRepositorySession.get();
+                if (initializedSession == null) {
+                    initializedSession = s;
+                    thisRepositorySession = new WeakReference<>(s);
+                }
             }
         }
-        session.setProxySelector(proxySelector);
-        DefaultAuthenticationSelector authenticationSelector = new 
DefaultAuthenticationSelector();
-        for (Server s : decryptionResult.getServers()) {
-            AuthenticationBuilder ab = new AuthenticationBuilder();
-            ab.addUsername(s.getUsername());
-            ab.addPassword(s.getPassword());
-            ab.addPrivateKey(s.getPrivateKey(), s.getPassphrase());
-            Authentication a = ab.build();            
-            authenticationSelector.add(s.getId(), a);
-        }
-        session.setAuthenticationSelector(authenticationSelector);
-        DefaultMavenExecutionRequest mavenExecutionRequest = new 
DefaultMavenExecutionRequest();
-        
mavenExecutionRequest.setSystemProperties(embedderConfiguration.getSystemProperties());
-        mavenExecutionRequest.setOffline(isOffline());
-        
mavenExecutionRequest.setTransferListener(ProgressTransferListener.activeListener());
-        session.setTransferListener(ProgressTransferListener.activeListener());
-        lookupComponent(LegacySupport.class).setSession(new 
MavenSession(getPlexus(), session, mavenExecutionRequest, new 
DefaultMavenExecutionResult()));
+        lookupComponent(LegacySupport.class).setSession(initializedSession);
     }
 
     


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to