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")