diff --git a/p2-maven-plugin/pom.xml b/p2-maven-plugin/pom.xml new file mode 100644 index 0000000000..5f9dd72e05 --- /dev/null +++ b/p2-maven-plugin/pom.xml @@ -0,0 +1,110 @@ + + + + + 4.0.0 + + + org.eclipse.tycho + tycho + 3.0.0-SNAPSHOT + + + p2-maven-plugin + maven-plugin + + P2 Maven Integration + The P2 Maven Plugin provides access to the P2 eco-system inside maven. + + + + + org.eclipse.platform + org.eclipse.equinox.p2.core + 2.9.0 + + + org.eclipse.platform + org.eclipse.osgi + 3.17.200 + + + org.eclipse.platform + org.eclipse.equinox.p2.publisher + 1.7.0 + + + org.eclipse.platform + org.eclipse.equinox.p2.director + 2.5.200 + + + org.eclipse.platform + org.eclipse.equinox.p2.engine + 2.7.300 + + + org.eclipse.platform + org.eclipse.equinox.p2.metadata + 2.6.100 + + + org.eclipse.platform + org.eclipse.equinox.p2.repository + 2.6.0 + + + org.eclipse.platform + org.eclipse.osgi.compatibility.state + 1.2.600 + + + org.eclipse.platform + org.eclipse.equinox.p2.publisher.eclipse + 1.4.2 + + + org.apache.maven + maven-model + provided + + + org.apache.maven + maven-model-builder + ${maven-version} + provided + + + org.apache.maven + maven-core + provided + + + org.eclipse.platform + org.eclipse.equinox.p2.metadata.repository + 1.4.0 + + + + + + + org.codehaus.plexus + plexus-component-metadata + + + org.apache.maven.plugins + maven-plugin-plugin + + + + \ No newline at end of file diff --git a/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/DefaultProvisioningAgent.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/DefaultProvisioningAgent.java new file mode 100644 index 0000000000..e850a3ded6 --- /dev/null +++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/DefaultProvisioningAgent.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2022 Christoph Läubrich and others. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christoph Läubrich - initial API and implementation + *******************************************************************************/ +package org.eclipse.tycho.p2maven; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.codehaus.plexus.component.annotations.Component; +import org.codehaus.plexus.component.annotations.Requirement; +import org.codehaus.plexus.logging.Logger; +import org.eclipse.equinox.p2.core.IProvisioningAgent; +import org.eclipse.equinox.p2.core.spi.IAgentServiceFactory; +import org.osgi.framework.BundleContext; + +@Component(role = IProvisioningAgent.class) +public class DefaultProvisioningAgent implements IProvisioningAgent { + + @Requirement + private Logger log; + + @Requirement(hint = "plexus") + private BundleContext bundleContext; + + @Requirement(role = IAgentServiceFactory.class) + private Map factoryMap; + + private Map services = new ConcurrentHashMap(); + + @Override + public Object getService(String serviceName) { + return services.computeIfAbsent(serviceName, role -> { + IAgentServiceFactory serviceFactory = factoryMap.get(role); + if (serviceFactory != null) { + return serviceFactory.createService(DefaultProvisioningAgent.this); + } + return null; + }); + } + + @Override + public void registerService(String serviceName, Object service) { + throw new UnsupportedOperationException(); + } + + @Override + public void stop() { + + } + + @Override + public void unregisterService(String serviceName, Object service) { + throw new UnsupportedOperationException(); + } + +} diff --git a/tycho-build/src/main/java/org/eclipse/tycho/build/PlexusBundleContext.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/PlexusBundleContext.java similarity index 91% rename from tycho-build/src/main/java/org/eclipse/tycho/build/PlexusBundleContext.java rename to p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/PlexusBundleContext.java index ceb3596c34..2a13774b41 100644 --- a/tycho-build/src/main/java/org/eclipse/tycho/build/PlexusBundleContext.java +++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/PlexusBundleContext.java @@ -10,7 +10,7 @@ * Contributors: * Christoph Läubrich - initial API and implementation *******************************************************************************/ -package org.eclipse.tycho.build; +package org.eclipse.tycho.p2maven; import java.io.File; import java.io.InputStream; @@ -18,6 +18,9 @@ import java.util.Dictionary; import org.codehaus.plexus.component.annotations.Component; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; import org.eclipse.osgi.internal.framework.FilterImpl; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; @@ -34,7 +37,7 @@ //FIXME this should not be necessary at all see https://bugs.eclipse.org/bugs/show_bug.cgi?id=578387 @Component(role = BundleContext.class, hint = "plexus") -public class PlexusBundleContext implements BundleContext { +public class PlexusBundleContext implements BundleContext, Initializable, Disposable { @Override public String getProperty(String key) { @@ -178,4 +181,13 @@ public Bundle getBundle(String location) { return getBundle(); } + @Override + public void initialize() throws InitializationException { + + } + + @Override + public void dispose() { + } + } diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/p2/P2ArtifactRepositoryLayout.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/repository/P2ArtifactRepositoryLayout.java similarity index 97% rename from tycho-core/src/main/java/org/eclipse/tycho/core/p2/P2ArtifactRepositoryLayout.java rename to p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/repository/P2ArtifactRepositoryLayout.java index f563795278..82047ec495 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/p2/P2ArtifactRepositoryLayout.java +++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/repository/P2ArtifactRepositoryLayout.java @@ -8,7 +8,7 @@ * Contributors: * Sonatype Inc. - initial API and implementation *******************************************************************************/ -package org.eclipse.tycho.core.p2; +package org.eclipse.tycho.p2maven.repository; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.metadata.ArtifactMetadata; diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/p2/P2RepositoryConnector.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/repository/P2RepositoryConnector.java similarity index 98% rename from tycho-core/src/main/java/org/eclipse/tycho/core/p2/P2RepositoryConnector.java rename to p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/repository/P2RepositoryConnector.java index 3e5a7270e2..6253f11d06 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/p2/P2RepositoryConnector.java +++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/repository/P2RepositoryConnector.java @@ -8,7 +8,7 @@ * Contributors: * Sonatype Inc. - initial API and implementation *******************************************************************************/ -package org.eclipse.tycho.core.p2; +package org.eclipse.tycho.p2maven.repository; import java.util.Collection; diff --git a/tycho-core/src/main/java/org/eclipse/tycho/core/p2/P2RepositoryConnectorFactory.java b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/repository/P2RepositoryConnectorFactory.java similarity index 97% rename from tycho-core/src/main/java/org/eclipse/tycho/core/p2/P2RepositoryConnectorFactory.java rename to p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/repository/P2RepositoryConnectorFactory.java index 991d1ab3bc..14b84d7851 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/core/p2/P2RepositoryConnectorFactory.java +++ b/p2-maven-plugin/src/main/java/org/eclipse/tycho/p2maven/repository/P2RepositoryConnectorFactory.java @@ -8,7 +8,7 @@ * Contributors: * Sonatype Inc. - initial API and implementation *******************************************************************************/ -package org.eclipse.tycho.core.p2; +package org.eclipse.tycho.p2maven.repository; import org.codehaus.plexus.component.annotations.Component; import org.eclipse.aether.RepositorySystemSession; diff --git a/pom.xml b/pom.xml index a4f176ba82..0b8d079071 100644 --- a/pom.xml +++ b/pom.xml @@ -468,6 +468,8 @@ sisu-equinox + p2-maven-plugin + tycho-metadata-model tycho-embedder-api tycho-core diff --git a/tycho-build/pom.xml b/tycho-build/pom.xml index 8a593116c1..45b5f32f9d 100644 --- a/tycho-build/pom.xml +++ b/tycho-build/pom.xml @@ -136,7 +136,11 @@ org.eclipse.equinox.p2.metadata.repository 1.4.0 - + + org.eclipse.tycho + p2-maven-plugin + ${project.version} + \ No newline at end of file diff --git a/tycho-core/pom.xml b/tycho-core/pom.xml index 3395558733..1b4a539eb8 100644 --- a/tycho-core/pom.xml +++ b/tycho-core/pom.xml @@ -213,6 +213,11 @@ org.eclipse.tycho.core.shared ${project.version} + + org.eclipse.tycho + p2-maven-plugin + ${project.version} + org.eclipse.tycho diff --git a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java index ec8873ad9a..8102bc92f0 100644 --- a/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java +++ b/tycho-core/src/main/java/org/eclipse/tycho/osgi/configuration/MavenContextConfigurator.java @@ -37,11 +37,11 @@ import org.eclipse.sisu.equinox.embedder.EmbeddedEquinox; import org.eclipse.sisu.equinox.embedder.EquinoxLifecycleListener; import org.eclipse.tycho.core.osgitools.DefaultReactorProject; -import org.eclipse.tycho.core.p2.P2ArtifactRepositoryLayout; import org.eclipse.tycho.core.resolver.shared.MavenRepositoryLocation; import org.eclipse.tycho.core.shared.MavenContext; import org.eclipse.tycho.core.shared.MavenContextImpl; import org.eclipse.tycho.osgi.adapters.MavenLoggerAdapter; +import org.eclipse.tycho.p2maven.repository.P2ArtifactRepositoryLayout; @Component(role = EquinoxLifecycleListener.class, hint = "MavenContextConfigurator") public class MavenContextConfigurator extends EquinoxLifecycleListener { diff --git a/tycho-core/src/test/java/org/eclipse/tycho/core/resolver/TychoMirrorSelectorTest.java b/tycho-core/src/test/java/org/eclipse/tycho/core/resolver/TychoMirrorSelectorTest.java index a0c542d337..b68f8604b2 100644 --- a/tycho-core/src/test/java/org/eclipse/tycho/core/resolver/TychoMirrorSelectorTest.java +++ b/tycho-core/src/test/java/org/eclipse/tycho/core/resolver/TychoMirrorSelectorTest.java @@ -15,7 +15,7 @@ import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.MavenArtifactRepository; import org.apache.maven.settings.Mirror; -import org.eclipse.tycho.core.p2.P2ArtifactRepositoryLayout; +import org.eclipse.tycho.p2maven.repository.P2ArtifactRepositoryLayout; import org.junit.Assert; import org.junit.Test; diff --git a/tycho-extras/tycho-version-bump-plugin/src/main/java/org/eclipse/tycho/versionbump/UpdateProductMojo.java b/tycho-extras/tycho-version-bump-plugin/src/main/java/org/eclipse/tycho/versionbump/UpdateProductMojo.java index e7c6b081e1..12f921bcf2 100644 --- a/tycho-extras/tycho-version-bump-plugin/src/main/java/org/eclipse/tycho/versionbump/UpdateProductMojo.java +++ b/tycho-extras/tycho-version-bump-plugin/src/main/java/org/eclipse/tycho/versionbump/UpdateProductMojo.java @@ -28,11 +28,11 @@ import org.eclipse.tycho.ArtifactType; import org.eclipse.tycho.artifacts.IllegalArtifactReferenceException; import org.eclipse.tycho.core.ee.shared.ExecutionEnvironmentConfigurationStub; -import org.eclipse.tycho.core.p2.P2ArtifactRepositoryLayout; import org.eclipse.tycho.core.resolver.shared.MavenRepositoryLocation; import org.eclipse.tycho.model.PluginRef; import org.eclipse.tycho.model.ProductConfiguration; import org.eclipse.tycho.p2.resolver.facade.P2ResolutionResult; +import org.eclipse.tycho.p2maven.repository.P2ArtifactRepositoryLayout; /** * Quick&dirty way to update .product file to use latest versions of IUs available from specified diff --git a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java index a00bcaa9ad..1434facf5d 100644 --- a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java +++ b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java @@ -82,7 +82,6 @@ import org.eclipse.tycho.core.osgitools.targetplatform.ArtifactCollection; import org.eclipse.tycho.core.osgitools.targetplatform.DefaultDependencyArtifacts; import org.eclipse.tycho.core.osgitools.targetplatform.MultiEnvironmentDependencyArtifacts; -import org.eclipse.tycho.core.p2.P2ArtifactRepositoryLayout; import org.eclipse.tycho.core.resolver.shared.MavenRepositoryLocation; import org.eclipse.tycho.core.resolver.shared.OptionalResolutionAction; import org.eclipse.tycho.core.resolver.shared.PomDependencies; @@ -101,6 +100,7 @@ import org.eclipse.tycho.p2.target.facade.PomDependencyCollector; import org.eclipse.tycho.p2.target.facade.TargetDefinitionFile; import org.eclipse.tycho.p2.target.facade.TargetPlatformConfigurationStub; +import org.eclipse.tycho.p2maven.repository.P2ArtifactRepositoryLayout; import org.eclipse.tycho.repository.registry.facade.ReactorRepositoryManagerFacade; @Component(role = DependencyResolver.class, hint = P2DependencyResolver.ROLE_HINT, instantiationStrategy = "per-lookup")