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..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,14 +33,14 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +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 +48,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 +67,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; @@ -122,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(); @@ -187,26 +188,6 @@ private void addAuthHeader(BiConsumer headerConsumer, PasswordAu headerConsumer.accept(header, "Basic " + encoding); } - @Override - public void initialize() throws InitializationException { - 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(); @@ -223,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; + } + } 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;