From e32c366b09895265c246605a6ebe19d49ff1fa10 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 24 Oct 2025 05:45:49 +0000
Subject: [PATCH 1/3] Initial plan
From 6bcc2c90ff8f1956946149b99247980cc372fd24 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 24 Oct 2025 05:57:08 +0000
Subject: [PATCH 2/3] Migrate 10 @Component classes to JSR330 in
p2-maven-plugin
Migrated classes:
- DefaultProvisioningAgentProvider
- MetadataIO
- InstallableUnitSlicer
- ProxyHelper (Initializable -> @PostConstruct)
- SettingsDecrypterHelper
- DefaultTransportCacheConfig (Initializable -> @PostConstruct)
- SharedHttpCacheStorage
- MavenAuthenticator (Initializable -> @PostConstruct)
- InstallableUnitGenerator
- InstallableUnitPublisher
Changes:
- Replaced @Component with @Named + @Singleton
- Replaced @Requirement with @Inject
- Replaced @Requirement(hint=...) with @Inject + @Named("...")
- Replaced Initializable.initialize() with @PostConstruct
- Added javax.annotation-api dependency for @PostConstruct
Reference: https://github.com/eclipse-tycho/tycho/issues/1494
Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com>
---
p2-maven-plugin/pom.xml | 5 ++++
.../DefaultProvisioningAgentProvider.java | 12 +++++---
.../p2maven/InstallableUnitGenerator.java | 23 ++++++++-------
.../p2maven/InstallableUnitPublisher.java | 7 +++--
.../tycho/p2maven/InstallableUnitSlicer.java | 11 +++++---
.../tycho/p2maven/helper/ProxyHelper.java | 24 ++++++++--------
.../helper/SettingsDecrypterHelper.java | 17 ++++++-----
.../eclipse/tycho/p2maven/io/MetadataIO.java | 6 ++--
.../DefaultTransportCacheConfig.java | 20 +++++++------
.../p2maven/transport/MavenAuthenticator.java | 28 ++++++++++---------
.../transport/SharedHttpCacheStorage.java | 11 +++++---
11 files changed, 98 insertions(+), 66 deletions(-)
diff --git a/p2-maven-plugin/pom.xml b/p2-maven-plugin/pom.xml
index b9153d464b..1195b49632 100644
--- a/p2-maven-plugin/pom.xml
+++ b/p2-maven-plugin/pom.xml
@@ -25,6 +25,11 @@
${minimal-maven-version}
+
+ javax.annotation
+ javax.annotation-api
+ 1.3.2
+
org.eclipse.platform
org.eclipse.equinox.p2.core
diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/DefaultProvisioningAgentProvider.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/DefaultProvisioningAgentProvider.java
index 18632b357d..9c8a645cbf 100644
--- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/DefaultProvisioningAgentProvider.java
+++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/DefaultProvisioningAgentProvider.java
@@ -14,17 +14,21 @@
import java.net.URI;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.core.IProvisioningAgentProvider;
import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.sisu.equinox.EquinoxServiceFactory;
-@Component(role = IProvisioningAgentProvider.class)
+@Named
+@Singleton
public class DefaultProvisioningAgentProvider implements IProvisioningAgentProvider {
- @Requirement(hint = "connect")
+ @Inject
+ @Named("connect")
private EquinoxServiceFactory serviceFactory;
@Override
diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitGenerator.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitGenerator.java
index 7e9508c5b2..2fa064d2de 100644
--- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitGenerator.java
+++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitGenerator.java
@@ -32,13 +32,15 @@
import java.util.jar.Manifest;
import java.util.stream.Stream;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
@@ -75,35 +77,36 @@
* Component used to generate {@link IInstallableUnit}s from other artifacts
*
*/
-@Component(role = InstallableUnitGenerator.class)
+@Named
+@Singleton
public class InstallableUnitGenerator {
private static final boolean DUMP_DATA = Boolean.getBoolean("tycho.p2.dump")
|| Boolean.getBoolean("tycho.p2.dump.units");
- @Requirement
+ @Inject
private Logger log;
private static final String KEY_UNITS = "InstallableUnitGenerator.units";
private static final String KEY_ARTIFACT_FILE = "InstallableUnitGenerator.artifactFile";
- @Requirement
+ @Inject
private IProvisioningAgent provisioningAgent;
- @Requirement(role = InstallableUnitProvider.class)
+ @Inject
private Map additionalUnitProviders;
- @Requirement
+ @Inject
private PluginRealmHelper pluginRealmHelper;
- @Requirement
+ @Inject
private InstallableUnitPublisher publisher;
- @Requirement
+ @Inject
private PlexusContainer plexus;
- @Requirement
+ @Inject
ArtifactHandlerManager artifactHandlerManager;
private Map artifactUnitMap = new ConcurrentHashMap<>();
diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitPublisher.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitPublisher.java
index 278aa2ed2e..6dc34d31ed 100644
--- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitPublisher.java
+++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitPublisher.java
@@ -18,7 +18,9 @@
import java.util.Map;
import java.util.Map.Entry;
-import org.codehaus.plexus.component.annotations.Component;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
@@ -37,7 +39,8 @@
/**
* Component that helps publishing units using publisher actions
*/
-@Component(role = InstallableUnitPublisher.class)
+@Named
+@Singleton
public class InstallableUnitPublisher {
/**
diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitSlicer.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitSlicer.java
index d77bb0b09d..ade54289b8 100644
--- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitSlicer.java
+++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/InstallableUnitSlicer.java
@@ -19,8 +19,10 @@
import java.util.Map;
import java.util.Objects;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
import org.codehaus.plexus.logging.Logger;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
@@ -36,11 +38,12 @@
/**
* A strategy that computes a slice from a set of all units.
*/
-@Component(role = InstallableUnitSlicer.class)
+@Named
+@Singleton
public class InstallableUnitSlicer {
private static final SlicingOptions DEFAULT_SLICING_OPTIONS = new SlicingOptions();
- @Requirement
+ @Inject
private Logger log;
/**
diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/helper/ProxyHelper.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/helper/ProxyHelper.java
index 51bc155dab..f796eccb23 100644
--- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/helper/ProxyHelper.java
+++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/helper/ProxyHelper.java
@@ -19,34 +19,36 @@
import java.net.Proxy.Type;
import java.net.URI;
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.LegacySupport;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.repository.Authentication;
import org.eclipse.aether.repository.AuthenticationContext;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.tycho.p2maven.repository.P2ArtifactRepositoryLayout;
-@Component(role = ProxyHelper.class)
-public class ProxyHelper implements Initializable {
+@Named
+@Singleton
+public class ProxyHelper {
- @Requirement
+ @Inject
protected Logger logger;
- @Requirement
+ @Inject
protected LegacySupport context;
- @Requirement
+ @Inject
protected SettingsDecrypterHelper decrypter;
private RepositorySystemSession repositorySession;
- @Override
- public void initialize() throws InitializationException {
+ @PostConstruct
+ public void initialize() {
MavenSession session = context.getSession();
if (session != null) {
repositorySession = session.getRepositorySession();
diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/helper/SettingsDecrypterHelper.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/helper/SettingsDecrypterHelper.java
index 876dc4681f..98d46c35ae 100644
--- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/helper/SettingsDecrypterHelper.java
+++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/helper/SettingsDecrypterHelper.java
@@ -11,6 +11,10 @@
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.p2maven.helper;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
import org.apache.maven.settings.Proxy;
import org.apache.maven.settings.Server;
import org.apache.maven.settings.building.SettingsProblem;
@@ -18,18 +22,17 @@
import org.apache.maven.settings.crypto.SettingsDecrypter;
import org.apache.maven.settings.crypto.SettingsDecryptionRequest;
import org.apache.maven.settings.crypto.SettingsDecryptionResult;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
-@Component(role = SettingsDecrypterHelper.class)
+@Named
+@Singleton
public class SettingsDecrypterHelper {
- @Requirement
- private Logger logger;
- @Requirement
- private SettingsDecrypter decrypter;
+ @Inject
+ private Logger logger;
+ @Inject
+ private SettingsDecrypter decrypter;
public SettingsDecryptionResult decryptAndLogProblems(Proxy proxySettings) {
return decryptAndLogProblems(new DefaultSettingsDecryptionRequest(proxySettings));
diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/io/MetadataIO.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/io/MetadataIO.java
index 6547cb711d..9bcaf255db 100644
--- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/io/MetadataIO.java
+++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/io/MetadataIO.java
@@ -26,10 +26,11 @@
import java.util.List;
import java.util.Set;
+import javax.inject.Named;
+import javax.inject.Singleton;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
-import org.codehaus.plexus.component.annotations.Component;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
@@ -44,7 +45,8 @@
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
-@Component(role = MetadataIO.class)
+@Named
+@Singleton
public class MetadataIO {
private static class Writer extends MetadataWriter {
diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/DefaultTransportCacheConfig.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/DefaultTransportCacheConfig.java
index 37f0e61530..b62aefaade 100644
--- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/DefaultTransportCacheConfig.java
+++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/DefaultTransportCacheConfig.java
@@ -14,17 +14,19 @@
import java.io.File;
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.LegacySupport;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.eclipse.aether.transfer.TransferListener;
import org.eclipse.tycho.TychoConstants;
-@Component(role = TransportCacheConfig.class)
-public class DefaultTransportCacheConfig implements TransportCacheConfig, Initializable {
+@Named
+@Singleton
+public class DefaultTransportCacheConfig implements TransportCacheConfig {
private static final boolean DEBUG_REQUESTS = Boolean.getBoolean("tycho.p2.transport.debug");
@@ -32,12 +34,12 @@ public class DefaultTransportCacheConfig implements TransportCacheConfig, Initia
private boolean update;
private boolean interactive;
- @Requirement
+ @Inject
private LegacySupport legacySupport;
private File cacheLocation;
- @Override
- public void initialize() throws InitializationException {
+ @PostConstruct
+ public void initialize() {
File repoDir;
MavenSession session = legacySupport.getSession();
if (session == null) {
diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/MavenAuthenticator.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/MavenAuthenticator.java
index eb79ff8883..07ec920f2f 100644
--- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/MavenAuthenticator.java
+++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/MavenAuthenticator.java
@@ -33,14 +33,15 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.LegacySupport;
import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.eclipse.tycho.IRepositoryIdManager;
import org.eclipse.tycho.MavenRepositoryLocation;
import org.eclipse.tycho.MavenRepositorySettings;
@@ -48,8 +49,9 @@
import org.eclipse.tycho.p2maven.helper.ProxyHelper;
import org.eclipse.tycho.p2maven.repository.P2ArtifactRepositoryLayout;
-@Component(role = MavenAuthenticator.class)
-public class MavenAuthenticator extends Authenticator implements Initializable {
+@Named
+@Singleton
+public class MavenAuthenticator extends Authenticator {
private static final Comparator LONGEST_PREFIX_MATCH = (loc1, loc2) -> {
// we wan't the longest prefix match, so first sort all uris by their length ...
@@ -66,19 +68,19 @@ public class MavenAuthenticator extends Authenticator implements Initializable {
private static final ThreadLocal> locationStack = ThreadLocal.withInitial(Stack::new);
private static final Map> repositoryChain = new ConcurrentHashMap<>();
- @Requirement
+ @Inject
LegacySupport legacySupport;
- @Requirement
+ @Inject
ProxyHelper proxyHelper;
- @Requirement
+ @Inject
IRepositoryIdManager repositoryIdManager;
- @Requirement
+ @Inject
MavenRepositorySettings mavenRepositorySettings;
- @Requirement
+ @Inject
Logger log;
private List repositoryLocations;
@@ -187,8 +189,8 @@ private void addAuthHeader(BiConsumer headerConsumer, PasswordAu
headerConsumer.accept(header, "Basic " + encoding);
}
- @Override
- public void initialize() throws InitializationException {
+ @PostConstruct
+ public void initialize() {
MavenSession session = legacySupport.getSession();
if (session == null) {
repositoryLocations = List.of();
diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/SharedHttpCacheStorage.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/SharedHttpCacheStorage.java
index 4d58183115..945adcf9e9 100644
--- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/SharedHttpCacheStorage.java
+++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/SharedHttpCacheStorage.java
@@ -35,14 +35,17 @@
import java.util.function.Function;
import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
import org.apache.commons.io.FileUtils;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import org.eclipse.equinox.internal.p2.repository.AuthenticationFailedException;
import org.eclipse.tycho.ReproducibleUtils;
-@Component(role = HttpCache.class)
+@Named
+@Singleton
public class SharedHttpCacheStorage implements HttpCache {
private static final int MAX_CACHE_LINES = Integer.getInteger("tycho.p2.transport.max-cache-lines", 1000);
@@ -54,7 +57,7 @@ public class SharedHttpCacheStorage implements HttpCache {
TimeUnit.HOURS.toMinutes(1));
private static final int MAX_IN_MEMORY = 1000;
- @Requirement
+ @Inject
TransportCacheConfig cacheConfig;
private final Map entryCache;
From 8f4f799aecd277f823a6097fe10c89790471bf32 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?=
Date: Fri, 24 Oct 2025 12:11:11 +0200
Subject: [PATCH 3/3] Use lazy init
---
.../p2maven/transport/MavenAuthenticator.java | 45 ++++++++++---------
1 file changed, 23 insertions(+), 22 deletions(-)
diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/MavenAuthenticator.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/MavenAuthenticator.java
index 07ec920f2f..a4e5993467 100644
--- a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/MavenAuthenticator.java
+++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/transport/MavenAuthenticator.java
@@ -33,7 +33,6 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
@@ -124,7 +123,7 @@ private Stream getLongestPrefixStream(URI requestUri) {
}
private List getMavenLocations() {
- Stream locations = repositoryLocations.stream();
+ Stream locations = getRepositoryLocations().stream();
locations = Stream.concat(locations, repositoryIdManager.getKnownMavenRepositoryLocations());
List sorted = locations
.sorted(Comparator.comparing(MavenRepositoryLocation::getURL, LONGEST_PREFIX_MATCH)).toList();
@@ -189,26 +188,6 @@ private void addAuthHeader(BiConsumer headerConsumer, PasswordAu
headerConsumer.accept(header, "Basic " + encoding);
}
- @PostConstruct
- public void initialize() {
- MavenSession session = legacySupport.getSession();
- if (session == null) {
- repositoryLocations = List.of();
- } else {
- List projects = Objects.requireNonNullElse(session.getProjects(), Collections.emptyList());
- repositoryLocations = projects.stream().map(MavenProject::getRemoteArtifactRepositories)
- .flatMap(Collection::stream).filter(r -> r.getLayout() instanceof P2ArtifactRepositoryLayout)
- .map(r -> {
- try {
- return new MavenRepositoryLocation(r.getId(), new URL(r.getUrl()).toURI());
- } catch (MalformedURLException | URISyntaxException e) {
- return null;
- }
- }).filter(Objects::nonNull).collect(Collectors.toUnmodifiableList());
- }
-
- }
-
public void enterLoad(URI location) {
log.debug("Enter loading repository " + location);
Stack stack = locationStack.get();
@@ -225,4 +204,26 @@ public void exitLoad() {
log.debug("Exit loading repository " + pop);
}
+ private synchronized List getRepositoryLocations() {
+ if (repositoryLocations == null) {
+ MavenSession session = legacySupport.getSession();
+ if (session == null) {
+ return List.of();
+ } else {
+ List projects = Objects.requireNonNullElse(session.getProjects(),
+ Collections.emptyList());
+ repositoryLocations = projects.stream().map(MavenProject::getRemoteArtifactRepositories)
+ .flatMap(Collection::stream).filter(r -> r.getLayout() instanceof P2ArtifactRepositoryLayout)
+ .map(r -> {
+ try {
+ return new MavenRepositoryLocation(r.getId(), new URL(r.getUrl()).toURI());
+ } catch (MalformedURLException | URISyntaxException e) {
+ return null;
+ }
+ }).filter(Objects::nonNull).collect(Collectors.toUnmodifiableList());
+ }
+ }
+ return repositoryLocations;
+ }
+
}