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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists