diff --git a/bndtools.m2e/bnd.bnd b/bndtools.m2e/bnd.bnd index a15fe2590d..85902be2ad 100644 --- a/bndtools.m2e/bnd.bnd +++ b/bndtools.m2e/bnd.bnd @@ -45,7 +45,7 @@ Bundle-ActivationPolicy: lazy Import-Package: \ org.apache.maven.*;bundle-symbolic-name="${@bundlesymbolicname}";bundle-version="${range;[==,4);${@bundleversion}}";version=!,\ org.eclipse.aether.*;bundle-symbolic-name="${@bundlesymbolicname}";bundle-version="${range;[==,4);${@bundleversion}}";version=!,\ - org.eclipse.m2e.*;bundle-symbolic-name="${@bundlesymbolicname}";bundle-version="${range;[==,4);${@bundleversion}}";version=!,\ + org.eclipse.m2e.core.*;bundle-symbolic-name="${@bundlesymbolicname}";bundle-version="${range;[==,3);${@bundleversion}}";version=!,\ ${eclipse.importpackage},\ * diff --git a/bndtools.m2e/src/bndtools/m2e/AbstractMavenRepository.java b/bndtools.m2e/src/bndtools/m2e/AbstractMavenRepository.java index ca555b05cc..b9bc132466 100644 --- a/bndtools.m2e/src/bndtools/m2e/AbstractMavenRepository.java +++ b/bndtools.m2e/src/bndtools/m2e/AbstractMavenRepository.java @@ -7,7 +7,6 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Platform; -import org.eclipse.m2e.core.MavenPlugin; import org.eclipse.m2e.core.embedder.ArtifactKey; import org.eclipse.m2e.core.project.IMavenProjectChangedListener; import org.eclipse.m2e.core.project.IMavenProjectFacade; @@ -19,9 +18,13 @@ import aQute.bnd.service.RepositoryPlugin; public abstract class AbstractMavenRepository extends BaseRepository - implements MavenRunListenerHelper, Repository, RepositoryPlugin, IMavenProjectChangedListener { + implements Repository, RepositoryPlugin, IMavenProjectChangedListener { - final IMavenProjectRegistry mavenProjectRegistry = MavenPlugin.getMavenProjectRegistry(); + final IMavenProjectRegistry mavenProjectRegistry; + + protected AbstractMavenRepository(IMavenProjectRegistry mavenProjectRegistry) { + this.mavenProjectRegistry = mavenProjectRegistry; + } @Override public boolean canWrite() { diff --git a/bndtools.m2e/src/bndtools/m2e/Activator.java b/bndtools.m2e/src/bndtools/m2e/Activator.java index 513e50ab91..ae2a27590c 100644 --- a/bndtools.m2e/src/bndtools/m2e/Activator.java +++ b/bndtools.m2e/src/bndtools/m2e/Activator.java @@ -1,32 +1,59 @@ package bndtools.m2e; -import org.eclipse.m2e.core.internal.MavenPluginActivator; -import org.eclipse.m2e.core.internal.project.registry.MavenProjectManager; +import org.eclipse.m2e.core.MavenPlugin; +import org.eclipse.m2e.core.embedder.IMaven; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; import org.osgi.annotation.bundle.Header; +import org.osgi.framework.Bundle; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; import aQute.bnd.osgi.Constants; @Header(name = Constants.BUNDLE_ACTIVATOR, value = "${@class}") public class Activator implements BundleActivator { + /** + * M2E version 2 has implicit support for whiteboard listeners and registers + * services. This activator helps us to work in both situations. + */ + private boolean isM2E_v2; + private MavenProjectChangedListenersTracker projectChangedListenersTracker; @Override public void start(BundleContext context) throws Exception { - projectChangedListenersTracker = new MavenProjectChangedListenersTracker(); - MavenProjectManager projectManager = MavenPluginActivator.getDefault() - .getMavenProjectManager(); - projectManager.addMavenProjectChangedListener(projectChangedListenersTracker); + Bundle bundle = FrameworkUtil.getBundle(MavenPlugin.class); + isM2E_v2 = bundle.getVersion() + .getMajor() == 2; + + if (!isM2E_v2) { + projectChangedListenersTracker = new MavenProjectChangedListenersTracker(); + IMavenProjectRegistry projectManager = MavenPlugin.getMavenProjectRegistry(); + projectManager.addMavenProjectChangedListener(projectChangedListenersTracker); + + registerM2EServices(context); + } + } + + /** + * These services should only be registered if running on M2E 1.x + * + * @param context + */ + private void registerM2EServices(BundleContext context) { + context.registerService(IMaven.class, MavenPlugin.getMaven(), null); + context.registerService(IMavenProjectRegistry.class, MavenPlugin.getMavenProjectRegistry(), null); } @Override public void stop(BundleContext context) throws Exception { - MavenProjectManager projectManager = MavenPluginActivator.getDefault() - .getMavenProjectManager(); - projectManager.removeMavenProjectChangedListener(projectChangedListenersTracker); - projectChangedListenersTracker.close(); + if (!isM2E_v2) { + IMavenProjectRegistry projectManager = MavenPlugin.getMavenProjectRegistry(); + projectManager.removeMavenProjectChangedListener(projectChangedListenersTracker); + projectChangedListenersTracker.close(); + } } } diff --git a/bndtools.m2e/src/bndtools/m2e/BndConfigurator.java b/bndtools.m2e/src/bndtools/m2e/BndConfigurator.java index 13268d4ad6..a76a33357a 100644 --- a/bndtools.m2e/src/bndtools/m2e/BndConfigurator.java +++ b/bndtools.m2e/src/bndtools/m2e/BndConfigurator.java @@ -33,18 +33,13 @@ import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jdt.core.IJavaModelMarker; -import org.eclipse.m2e.core.MavenPlugin; import org.eclipse.m2e.core.embedder.ArtifactKey; import org.eclipse.m2e.core.embedder.IMaven; -import org.eclipse.m2e.core.embedder.IMavenExecutionContext; -import org.eclipse.m2e.core.internal.MavenPluginActivator; -import org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager; import org.eclipse.m2e.core.lifecyclemapping.model.IPluginExecutionMetadata; import org.eclipse.m2e.core.project.IMavenProjectFacade; -import org.eclipse.m2e.core.project.ResolverConfiguration; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; import org.eclipse.m2e.core.project.configurator.AbstractBuildParticipant; import org.eclipse.m2e.core.project.configurator.AbstractBuildParticipant2; -import org.eclipse.m2e.core.project.configurator.AbstractProjectConfigurator; import org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant; import org.eclipse.m2e.core.project.configurator.ProjectConfigurationRequest; import org.osgi.service.component.annotations.Component; @@ -55,7 +50,7 @@ import aQute.bnd.osgi.Jar; import aQute.bnd.osgi.Packages; -public class BndConfigurator extends AbstractProjectConfigurator { +public class BndConfigurator extends ServiceAwareM2EConfigurator { private static final String ARTIFACT_PATTERN = "%s-%s.%s"; private static final String CLASSIFIER_ARTIFACT_PATTERN = "%s-%s-%s.%s"; @@ -190,7 +185,8 @@ public Set build(int kind, IProgressMonitor monitor) throws Exception public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { try { SubMonitor progress = SubMonitor.convert(monitor, 3); - execJarMojo(projectFacade, progress.split(1, SubMonitor.SUPPRESS_NONE), isTest); + execJarMojo(getMaven(), getRegistry(), projectFacade, + progress.split(1, SubMonitor.SUPPRESS_NONE), isTest); // We need to trigger a refresh IPath targetDirPath = Path.fromOSString(targetDirectory); @@ -299,19 +295,13 @@ private MavenProject getMavenProject(final IMavenProjectFacade projectFacade, IP return mavenProject; } - private void execJarMojo(final IMavenProjectFacade projectFacade, IProgressMonitor monitor, boolean isTest) + private void execJarMojo(IMaven maven, IMavenProjectRegistry projectRegistry, + final IMavenProjectFacade projectFacade, IProgressMonitor monitor, boolean isTest) throws CoreException { - final IMaven maven = MavenPlugin.getMaven(); - ProjectRegistryManager projectRegistryManager = MavenPluginActivator.getDefault() - .getMavenProjectManagerImpl(); + projectFacade.getResolverConfiguration() + .setResolveWorkspaceProjects(true); - ResolverConfiguration resolverConfiguration = new ResolverConfiguration(); - resolverConfiguration.setResolveWorkspaceProjects(true); - - IMavenExecutionContext context = projectRegistryManager.createExecutionContext(projectFacade.getPom(), - resolverConfiguration); - - context.execute((context1, monitor1) -> { + projectRegistry.execute(projectFacade, (context1, monitor1) -> { SubMonitor progress = SubMonitor.convert(monitor1); MavenProject mavenProject = getMavenProject(projectFacade, progress.split(1)); diff --git a/bndtools.m2e/src/bndtools/m2e/IndexConfigurator.java b/bndtools.m2e/src/bndtools/m2e/IndexConfigurator.java index ee61dab8ab..b22c628684 100644 --- a/bndtools.m2e/src/bndtools/m2e/IndexConfigurator.java +++ b/bndtools.m2e/src/bndtools/m2e/IndexConfigurator.java @@ -36,14 +36,13 @@ import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jdt.core.IJavaModelMarker; -import org.eclipse.m2e.core.MavenPlugin; import org.eclipse.m2e.core.embedder.ArtifactKey; import org.eclipse.m2e.core.embedder.IMaven; import org.eclipse.m2e.core.embedder.IMavenExecutionContext; import org.eclipse.m2e.core.lifecyclemapping.model.IPluginExecutionMetadata; import org.eclipse.m2e.core.project.IMavenProjectFacade; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; import org.eclipse.m2e.core.project.configurator.AbstractBuildParticipant; -import org.eclipse.m2e.core.project.configurator.AbstractProjectConfigurator; import org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant; import org.eclipse.m2e.core.project.configurator.MojoExecutionKey; import org.eclipse.m2e.core.project.configurator.ProjectConfigurationRequest; @@ -51,7 +50,7 @@ import aQute.bnd.exceptions.Exceptions; import aQute.maven.api.Archive; -public class IndexConfigurator extends AbstractProjectConfigurator implements IResourceChangeListener { +public class IndexConfigurator extends ServiceAwareM2EConfigurator implements IResourceChangeListener { private static final String INDEXER_PLUGIN_ARTIFACT_ID = "bnd-indexer-maven-plugin"; private static final String INDEXER_PLUGIN_GROUP_ID = "biz.aQute.bnd"; @@ -67,6 +66,13 @@ private static final class IndexerWorkspaceRepository extends LocalArtifactRepos private final WorkspaceRepository wr = new WorkspaceRepository("index", getClass()); + private final IMavenProjectRegistry registry; + + public IndexerWorkspaceRepository(IMavenProjectRegistry registry) { + super(); + this.registry = registry; + } + @Override public boolean hasLocalMetadata() { return false; @@ -86,8 +92,7 @@ public Artifact find(Artifact artifact) { } private File find(String groupId, String artifactId, String version, String extension) { - IMavenProjectFacade found = MavenPlugin.getMavenProjectRegistry() - .getMavenProject(groupId, artifactId, version); + IMavenProjectFacade found = registry.getMavenProject(groupId, artifactId, version); if (found != null) { return getMavenOutputFile(extension, found, progress.split(1)); @@ -104,8 +109,7 @@ public File findArtifact(org.eclipse.aether.artifact.Artifact artifact) { @Override public List findVersions(org.eclipse.aether.artifact.Artifact artifact) { List versions = new ArrayList<>(); - for (IMavenProjectFacade facade : MavenPlugin.getMavenProjectRegistry() - .getProjects()) { + for (IMavenProjectFacade facade : registry.getProjects()) { ArtifactKey key = facade.getArtifactKey(); if (key.getArtifactId() .equals(artifact.getArtifactId()) @@ -132,8 +136,14 @@ private static final class RebuildIndexCheck extends WorkspaceJob { private boolean noMoreEvents; - public RebuildIndexCheck(String name, IResourceChangeEvent event, IMavenProjectFacade facade) { + private final IMaven maven; + private final IMavenProjectRegistry registry; + + public RebuildIndexCheck(IMaven maven, IMavenProjectRegistry registry, String name, IResourceChangeEvent event, + IMavenProjectFacade facade) { super(name); + this.maven = maven; + this.registry = registry; this.events.add(event); this.facade = facade; } @@ -176,8 +186,7 @@ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { IProject[] refs = facade.getProject() .getReferencedProjects(); for (int i = 0; !needsBuild && i < refs.length; i++) { - IMavenProjectFacade pf = MavenPlugin.getMavenProjectRegistry() - .getProject(refs[i]); + IMavenProjectFacade pf = registry.getProject(refs[i]); needsBuild = pf != null ? needsBuild(delta, keysToTypes, pf, progress.split(1)) : false; } @@ -199,8 +208,7 @@ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { list.size()); list.forEach(me -> { try { - MavenPlugin.getMaven() - .execute(getMavenProject(facade, indexMonitor), me, indexMonitor); + maven.execute(getMavenProject(facade, indexMonitor), me, indexMonitor); } catch (CoreException e) { logger.logError( "An error occurred attempting to build the index for project " + facade.getProject() @@ -310,11 +318,9 @@ public Set build(int kind, IProgressMonitor monitor) throws Exception final SubMonitor progress = SubMonitor.convert(monitor, "Executing indexer plugin", 2); - final IMaven maven = MavenPlugin.getMaven(); - IMavenExecutionContext context = maven.createExecutionContext(); context.getExecutionRequest() - .setWorkspaceReader(new IndexerWorkspaceRepository()); + .setWorkspaceReader(new IndexerWorkspaceRepository(getRegistry())); final MavenProject mavenProject = getMavenProject(projectFacade, progress.split(1)); @@ -361,8 +367,7 @@ private static MavenProject getMavenProject(final IMavenProjectFacade projectFac */ @Override public void resourceChanged(final IResourceChangeEvent event) { - projects: for (IMavenProjectFacade facade : MavenPlugin.getMavenProjectRegistry() - .getProjects()) { + projects: for (IMavenProjectFacade facade : getRegistry().getProjects()) { IProject currentProject = facade.getProject(); synchronized (pendingJobs) { RebuildIndexCheck existing = pendingJobs.get(currentProject); @@ -390,7 +395,7 @@ public void resourceChanged(final IResourceChangeEvent event) { .findMember(projects[i].getFullPath()) != null; } if (doFullCheck) { - RebuildIndexCheck job = new RebuildIndexCheck( + RebuildIndexCheck job = new RebuildIndexCheck(getMaven(), getRegistry(), "Checking index project " + currentProject.getName() + " for rebuild", event, facade); // If someone else beat us to the punch then don't diff --git a/bndtools.m2e/src/bndtools/m2e/LaunchPropertyTester.java b/bndtools.m2e/src/bndtools/m2e/LaunchPropertyTester.java index 8185a8293a..3595265e37 100644 --- a/bndtools.m2e/src/bndtools/m2e/LaunchPropertyTester.java +++ b/bndtools.m2e/src/bndtools/m2e/LaunchPropertyTester.java @@ -1,5 +1,8 @@ package bndtools.m2e; +import static bndtools.m2e.MavenRunListenerHelper.getMavenProjectFacade; +import static bndtools.m2e.MavenRunListenerHelper.hasBndTestingMavenPlugin; + import org.bndtools.api.ILogger; import org.bndtools.api.Logger; import org.eclipse.core.expressions.PropertyTester; @@ -8,8 +11,9 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.m2e.core.project.IMavenProjectFacade; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; -public class LaunchPropertyTester extends PropertyTester implements MavenRunListenerHelper { +public class LaunchPropertyTester extends PropertyTester { private static final ILogger logger = Logger .getLogger(LaunchPropertyTester.class); @@ -18,6 +22,13 @@ public class LaunchPropertyTester extends PropertyTester implements MavenRunList public static final String PROP_IS_TESTABLE_BND_MAVEN_PROJECT = "isTestableBndMavenProject"; static final String MAVEN_NATURE = "org.eclipse.m2e.core.maven2Nature"; + private final IMavenProjectRegistry mavenProjectRegistry; + + public LaunchPropertyTester(IMavenProjectRegistry mavenProjectRegistry) { + this.mavenProjectRegistry = mavenProjectRegistry; + + } + @Override public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { IResource resource = null; @@ -48,9 +59,9 @@ public boolean test(Object receiver, String property, Object[] args, Object expe switch (property) { case PROP_IS_IN_BND_MAVEN_PROJECT : try { - IMavenProjectFacade projectFacade = getMavenProjectFacade(resource); + IMavenProjectFacade projectFacade = getMavenProjectFacade(mavenProjectRegistry, resource); - return (projectFacade != null) && hasBndMavenPlugin(projectFacade); + return (projectFacade != null) && MavenRunListenerHelper.hasBndMavenPlugin(projectFacade); } catch (CoreException e) { logger.logError("Error testing '" + PROP_IS_IN_BND_MAVEN_PROJECT + "' property on java element.", e); @@ -58,9 +69,9 @@ public boolean test(Object receiver, String property, Object[] args, Object expe } case PROP_IS_RESOLVABLE_BND_MAVEN_PROJECT : try { - IMavenProjectFacade projectFacade = getMavenProjectFacade(resource); + IMavenProjectFacade projectFacade = getMavenProjectFacade(mavenProjectRegistry, resource); - return (projectFacade != null) && hasBndResolverMavenPlugin(projectFacade); + return (projectFacade != null) && MavenRunListenerHelper.hasBndResolverMavenPlugin(projectFacade); } catch (CoreException e) { logger.logError( "Error testing '" + PROP_IS_RESOLVABLE_BND_MAVEN_PROJECT + "' property on java element.", e); @@ -68,7 +79,7 @@ public boolean test(Object receiver, String property, Object[] args, Object expe } case PROP_IS_TESTABLE_BND_MAVEN_PROJECT : try { - IMavenProjectFacade projectFacade = getMavenProjectFacade(resource); + IMavenProjectFacade projectFacade = getMavenProjectFacade(mavenProjectRegistry, resource); return (projectFacade != null) && hasBndTestingMavenPlugin(projectFacade); } catch (CoreException e) { diff --git a/bndtools.m2e/src/bndtools/m2e/M2ETypeAccess.java b/bndtools.m2e/src/bndtools/m2e/M2ETypeAccess.java new file mode 100644 index 0000000000..e4ea741b50 --- /dev/null +++ b/bndtools.m2e/src/bndtools/m2e/M2ETypeAccess.java @@ -0,0 +1,8 @@ +package bndtools.m2e; + +import org.osgi.service.component.annotations.Component; + +@Component(service = M2ETypeAccess.class) +public class M2ETypeAccess { + +} diff --git a/bndtools.m2e/src/bndtools/m2e/MavenBndrunContainer.java b/bndtools.m2e/src/bndtools/m2e/MavenBndrunContainer.java index 1ed9ef94f6..daa4f667e0 100644 --- a/bndtools.m2e/src/bndtools/m2e/MavenBndrunContainer.java +++ b/bndtools.m2e/src/bndtools/m2e/MavenBndrunContainer.java @@ -2,6 +2,8 @@ import static aQute.bnd.exceptions.Exceptions.unchecked; import static aQute.bnd.exceptions.FunctionWithException.asFunction; +import static bndtools.m2e.MavenRunListenerHelper.getMavenProject; +import static bndtools.m2e.MavenRunListenerHelper.lookupComponent; import java.io.File; import java.util.Map; @@ -18,13 +20,9 @@ import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.resolution.ArtifactResult; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.m2e.core.MavenPlugin; -import org.eclipse.m2e.core.embedder.IMavenExecutionContext; -import org.eclipse.m2e.core.internal.MavenPluginActivator; -import org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager; +import org.eclipse.m2e.core.embedder.IMaven; import org.eclipse.m2e.core.project.IMavenProjectFacade; -import org.eclipse.m2e.core.project.IProjectConfigurationManager; -import org.eclipse.m2e.core.project.ResolverConfiguration; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; import aQute.bnd.maven.lib.configuration.Bundles; import aQute.bnd.maven.lib.resolve.BndrunContainer; @@ -34,29 +32,22 @@ import aQute.bnd.version.Version; import biz.aQute.resolve.Bndrun; -public class MavenBndrunContainer implements MavenRunListenerHelper { +public class MavenBndrunContainer { private static final ILogger logger = Logger .getLogger(MavenBndrunContainer.class); private static final Version scopesVersion = new Version(4, 2, 0); - private static final IProjectConfigurationManager configurationManager = MavenPlugin - .getProjectConfigurationManager(); - private static final ProjectRegistryManager projectManager = MavenPluginActivator.getDefault() - .getMavenProjectManagerImpl(); - - private static final MavenRunListenerHelper helper = new MavenRunListenerHelper() {}; - + private final IMavenProjectRegistry mavenProjectRegistry; private final BndrunContainer bndrunContainer; - private final MavenProject mavenProject; - private final IMavenExecutionContext context; + private final IMavenProjectFacade mavenProjectFacade; private final IProgressMonitor monitor; - public static MavenBndrunContainer getBndrunContainer(IMavenProjectFacade projectFacade, - MojoExecution mojoExecution, IProgressMonitor monitor) { + public static MavenBndrunContainer getBndrunContainer(IMaven maven, IMavenProjectRegistry mavenProjectRegistry, + IMavenProjectFacade projectFacade, MojoExecution mojoExecution, IProgressMonitor monitor) { - MavenProject mavenProject = helper.getMavenProject(projectFacade); + MavenProject mavenProject = getMavenProject(projectFacade); Bundles bundles = null; boolean useMavenDependencies = true; @@ -95,29 +86,25 @@ public static MavenBndrunContainer getBndrunContainer(IMavenProjectFacade projec } } - return getBndrunContainer(projectFacade, bundles, useMavenDependencies, includeDependencyManagement, - scopeValues, monitor); + return getBndrunContainer(maven, mavenProjectRegistry, projectFacade, bundles, useMavenDependencies, + includeDependencyManagement, scopeValues, monitor); } - public static MavenBndrunContainer getBndrunContainer(IMavenProjectFacade projectFacade, Bundles bundles, + public static MavenBndrunContainer getBndrunContainer(IMaven maven, IMavenProjectRegistry mavenProjectRegistry, + IMavenProjectFacade projectFacade, Bundles bundles, boolean useMavenDependencies, boolean includeDependencyManagement, Set scopeValues, IProgressMonitor monitor) { - MavenProject mavenProject = helper.getMavenProject(projectFacade); + MavenProject mavenProject = getMavenProject(projectFacade); try { - ResolverConfiguration resolverConfiguration = configurationManager - .getResolverConfiguration(projectFacade.getProject()); - IMavenExecutionContext context = projectManager.createExecutionContext(projectFacade.getPom(), - resolverConfiguration); - - BndrunContainer bndrunContainer = context.execute(mavenProject, (c, m) -> { + BndrunContainer bndrunContainer = mavenProjectRegistry.execute(projectFacade, (c, m) -> { MavenSession mavenSession = c.getSession(); mavenSession.setCurrentProject(mavenProject); @SuppressWarnings("deprecation") Builder builder = new BndrunContainer.Builder(mavenProject, mavenSession, c.getRepositorySession(), - helper.lookupComponent(ProjectDependenciesResolver.class), - helper.lookupComponent(org.apache.maven.artifact.factory.ArtifactFactory.class), - helper.lookupComponent(RepositorySystem.class)); + lookupComponent(maven, ProjectDependenciesResolver.class), + lookupComponent(maven, org.apache.maven.artifact.factory.ArtifactFactory.class), + lookupComponent(maven, RepositorySystem.class)); Optional.ofNullable(bundles) .map(asFunction(b -> b.getFiles(mavenProject.getBasedir()))) @@ -131,12 +118,12 @@ public static MavenBndrunContainer getBndrunContainer(IMavenProjectFacade projec .collect(Collectors.toSet())); } - builder.setPostProcessor(new WorkspaceProjectPostProcessor(m)); + builder.setPostProcessor(new WorkspaceProjectPostProcessor(mavenProjectRegistry, m)); return builder.build(); }, monitor); - return new MavenBndrunContainer(bndrunContainer, mavenProject, context, monitor); + return new MavenBndrunContainer(bndrunContainer, mavenProjectRegistry, projectFacade, monitor); } catch (Exception e) { logger.logError("Failed to create Run for m2e project " + mavenProject.getName(), e); @@ -144,22 +131,22 @@ public static MavenBndrunContainer getBndrunContainer(IMavenProjectFacade projec } } - public MavenBndrunContainer(BndrunContainer bndrunContainer, MavenProject mavenProject, - IMavenExecutionContext context, IProgressMonitor monitor) { + public MavenBndrunContainer(BndrunContainer bndrunContainer, IMavenProjectRegistry mavenProjectRegistry, + IMavenProjectFacade projectFacade, IProgressMonitor monitor) { this.bndrunContainer = bndrunContainer; - this.mavenProject = mavenProject; - this.context = context; + this.mavenProjectRegistry = mavenProjectRegistry; + this.mavenProjectFacade = projectFacade; this.monitor = monitor; } public Bndrun init(File runFile, String task, File workingDir) throws Exception { - return context.execute( // + return mavenProjectRegistry.execute(mavenProjectFacade, (c, m) -> unchecked(() -> bndrunContainer.init(runFile, task, workingDir)), monitor); } public Map resolve() throws Exception { - return context.execute( // - (c, m) -> unchecked(() -> bndrunContainer.getDependencyResolver(mavenProject) + return mavenProjectRegistry.execute(mavenProjectFacade, + (c, m) -> unchecked(() -> bndrunContainer.getDependencyResolver(mavenProjectFacade.getMavenProject()) .resolve()), monitor); } diff --git a/bndtools.m2e/src/bndtools/m2e/MavenDependenciesRepository.java b/bndtools.m2e/src/bndtools/m2e/MavenDependenciesRepository.java index ebb99c3921..dbd1a9aa53 100644 --- a/bndtools.m2e/src/bndtools/m2e/MavenDependenciesRepository.java +++ b/bndtools.m2e/src/bndtools/m2e/MavenDependenciesRepository.java @@ -11,9 +11,12 @@ import org.eclipse.aether.repository.WorkspaceRepository; import org.eclipse.aether.resolution.ArtifactResult; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.m2e.core.embedder.IMaven; import org.eclipse.m2e.core.project.IMavenProjectChangedListener; import org.eclipse.m2e.core.project.IMavenProjectFacade; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,6 +32,14 @@ public class MavenDependenciesRepository extends MavenWorkspaceRepository { private final Set allScopes = Sets.of("compile", "provided", "runtime", "system", "test"); + @Reference + IMaven maven; + + @Reference + void setRegistry(IMavenProjectRegistry mavenProjectRegistry) { + this.mavenProjectRegistry = mavenProjectRegistry; + } + @Override public String getName() { return "Maven Dependencies"; @@ -47,8 +58,8 @@ Set collect(IMavenProjectFacade projectFacade, IProgressMonitor monito } try { - MavenBndrunContainer mavenBndrunContainer = MavenBndrunContainer.getBndrunContainer(projectFacade, null, - true, true, allScopes, monitor); + MavenBndrunContainer mavenBndrunContainer = MavenBndrunContainer.getBndrunContainer(maven, + mavenProjectRegistry, projectFacade, null, true, true, allScopes, monitor); mavenBndrunContainer.resolve() .values() diff --git a/bndtools.m2e/src/bndtools/m2e/MavenImplicitProjectRepository.java b/bndtools.m2e/src/bndtools/m2e/MavenImplicitProjectRepository.java index d8ac5f57d7..33beac8d5b 100644 --- a/bndtools.m2e/src/bndtools/m2e/MavenImplicitProjectRepository.java +++ b/bndtools.m2e/src/bndtools/m2e/MavenImplicitProjectRepository.java @@ -17,6 +17,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.m2e.core.project.IMavenProjectFacade; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; import org.eclipse.m2e.core.project.MavenProjectChangedEvent; import org.osgi.resource.Capability; import org.osgi.resource.Requirement; @@ -41,7 +42,9 @@ public class MavenImplicitProjectRepository extends AbstractMavenRepository private final Run run; private final IPath bndrunFilePath; - public MavenImplicitProjectRepository(IMavenProjectFacade projectFacade, Run run) { + public MavenImplicitProjectRepository(IMavenProjectRegistry mavenProjectRegistry, + IMavenProjectFacade projectFacade, Run run) { + super(mavenProjectRegistry); this.projectFacade = projectFacade; this.run = run; @@ -125,7 +128,7 @@ public SortedSet versions(String bsn) throws Exception { } protected void createRepo(IMavenProjectFacade projectFacade, IProgressMonitor monitor) { - MavenProject mavenProject = getMavenProject(projectFacade); + MavenProject mavenProject = MavenRunListenerHelper.getMavenProject(projectFacade); try { BndrunContainer bndrunContainer = run.getPlugin(BndrunContainer.class); diff --git a/bndtools.m2e/src/bndtools/m2e/MavenImplicitProjectRunListener.java b/bndtools.m2e/src/bndtools/m2e/MavenImplicitProjectRunListener.java index 43c7627b00..7d21bcd753 100644 --- a/bndtools.m2e/src/bndtools/m2e/MavenImplicitProjectRunListener.java +++ b/bndtools.m2e/src/bndtools/m2e/MavenImplicitProjectRunListener.java @@ -1,15 +1,24 @@ package bndtools.m2e; +import static bndtools.m2e.MavenRunListenerHelper.getResource; +import static bndtools.m2e.MavenRunListenerHelper.isMavenProject; + import org.bndtools.api.RunListener; import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; import org.osgi.framework.Constants; import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import aQute.bnd.build.Run; import aQute.bnd.build.Workspace; @Component(property = Constants.SERVICE_RANKING + ":Integer=1000") -public class MavenImplicitProjectRunListener implements MavenRunListenerHelper, RunListener { +public class MavenImplicitProjectRunListener implements RunListener { + + @Reference + IMavenProjectRegistry mavenProjectRegistry; @Override public void create(Run run) throws Exception {} @@ -18,7 +27,7 @@ public void create(Run run) throws Exception {} public void end(Run run) throws Exception { IResource resource = getResource(run); - if (!isMavenProject(resource)) { + if (!isMavenProject(mavenProjectRegistry, resource)) { return; } @@ -28,7 +37,8 @@ public void end(Run run) throws Exception { if (repo != null) { mavenProjectRegistry.removeMavenProjectChangedListener(repo); - iWorkspace.removeResourceChangeListener(repo); + ResourcesPlugin.getWorkspace() + .removeResourceChangeListener(repo); } } diff --git a/bndtools.m2e/src/bndtools/m2e/MavenRunListenerHelper.java b/bndtools.m2e/src/bndtools/m2e/MavenRunListenerHelper.java index f8a8d71cc7..46f58b5071 100644 --- a/bndtools.m2e/src/bndtools/m2e/MavenRunListenerHelper.java +++ b/bndtools.m2e/src/bndtools/m2e/MavenRunListenerHelper.java @@ -23,7 +23,6 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.m2e.core.MavenPlugin; import org.eclipse.m2e.core.embedder.IMaven; import org.eclipse.m2e.core.project.IMavenProjectFacade; import org.eclipse.m2e.core.project.IMavenProjectRegistry; @@ -34,11 +33,12 @@ public interface MavenRunListenerHelper { - IMaven maven = MavenPlugin.getMaven(); - IMavenProjectRegistry mavenProjectRegistry = MavenPlugin.getMavenProjectRegistry(); - IWorkspace iWorkspace = ResourcesPlugin.getWorkspace(); + // IMaven maven = MavenPlugin.getMaven(); + // IMavenProjectRegistry mavenProjectRegistry = + // MavenPlugin.getMavenProjectRegistry(); + // IWorkspace iWorkspace = ResourcesPlugin.getWorkspace(); - default IResource getResource(Run run) { + static IResource getResource(Run run) { File propertiesFile = run.getPropertiesFile(); IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = workspace.getRoot(); @@ -54,7 +54,7 @@ default IResource getResource(Run run) { return shortest; } - default MavenProject getMavenProject(IMavenProjectFacade mavenProjectFacade) { + static MavenProject getMavenProject(IMavenProjectFacade mavenProjectFacade) { try { return mavenProjectFacade.getMavenProject(new NullProgressMonitor()); } catch (CoreException e) { @@ -62,56 +62,61 @@ default MavenProject getMavenProject(IMavenProjectFacade mavenProjectFacade) { } } - default IMavenProjectFacade getMavenProjectFacade(IResource resource) { + static IMavenProjectFacade getMavenProjectFacade(IMavenProjectRegistry mavenProjectRegistry, IResource resource) { return mavenProjectRegistry.getProject(resource.getProject()); } - default boolean isMavenProject(IResource resource) { - if ((resource != null) && (resource.getProject() != null) && (getMavenProjectFacade(resource) != null)) { + static boolean isMavenProject(IMavenProjectRegistry mavenProjectRegistry, IResource resource) { + if ((resource != null) && (resource.getProject() != null) + && (getMavenProjectFacade(mavenProjectRegistry, resource) != null)) { return true; } return false; } - default boolean hasBndMavenPlugin(IMavenProjectFacade projectFacade) throws CoreException { + static boolean hasBndMavenPlugin(IMavenProjectFacade projectFacade) throws CoreException { return getBndMavenPlugin(projectFacade).isPresent(); } - default Optional getBndMavenPlugin(IMavenProjectFacade projectFacade) throws CoreException { + static Optional getBndMavenPlugin(IMavenProjectFacade projectFacade) throws CoreException { return getBndMavenPluginById(projectFacade, "biz.aQute.bnd:bnd-maven-plugin"); } - default boolean hasBndResolverMavenPlugin(IMavenProjectFacade projectFacade) throws CoreException { + static boolean hasBndResolverMavenPlugin(IMavenProjectFacade projectFacade) throws CoreException { return getBndResolverMavenPlugin(projectFacade).isPresent(); } - default Optional getBndResolverMavenPlugin(IMavenProjectFacade projectFacade) + static Optional getBndResolverMavenPlugin(IMavenProjectFacade projectFacade) throws CoreException { return getBndMavenPluginById(projectFacade, "biz.aQute.bnd:bnd-resolver-maven-plugin"); } - default MojoExecution getBndResolverMojoExecution(IMavenProjectFacade projectFacade, IProgressMonitor monitor) + static MojoExecution getBndResolverMojoExecution(IMaven maven, IMavenProjectFacade projectFacade, + IProgressMonitor monitor) throws CoreException { - return getMojoExecution(projectFacade, "biz.aQute.bnd:bnd-resolver-maven-plugin", "bnd-resolver:resolve@", + return getMojoExecution(maven, projectFacade, "biz.aQute.bnd:bnd-resolver-maven-plugin", + "bnd-resolver:resolve@", exe -> true, monitor); } - default MojoExecution getBndResolverMojoExecution(IMavenProjectFacade projectFacade, + static MojoExecution getBndResolverMojoExecution(IMaven maven, IMavenProjectFacade projectFacade, Predicate predicate, IProgressMonitor monitor) throws CoreException { - return getMojoExecution(projectFacade, "biz.aQute.bnd:bnd-resolver-maven-plugin", "bnd-resolver:resolve@", + return getMojoExecution(maven, projectFacade, "biz.aQute.bnd:bnd-resolver-maven-plugin", + "bnd-resolver:resolve@", predicate, monitor); } - default boolean hasBndTestingMavenPlugin(IMavenProjectFacade projectFacade) throws CoreException { + static boolean hasBndTestingMavenPlugin(IMavenProjectFacade projectFacade) throws CoreException { return getBndTestingMavenPlugin(projectFacade).isPresent(); } - default Optional getBndTestingMavenPlugin(IMavenProjectFacade projectFacade) throws CoreException { + static Optional getBndTestingMavenPlugin(IMavenProjectFacade projectFacade) + throws CoreException { return getBndMavenPluginById(projectFacade, "biz.aQute.bnd:bnd-testing-maven-plugin"); } - default Optional getBndMavenPluginById(IMavenProjectFacade projectFacade, String id) + static Optional getBndMavenPluginById(IMavenProjectFacade projectFacade, String id) throws CoreException { return Optional.ofNullable(getMavenProject(projectFacade).getPlugin(id)) .map(Plugin::getExecutions) @@ -120,19 +125,21 @@ default Optional getBndMavenPluginById(IMavenProjectFacade proj .findFirst(); } - default MojoExecution getBndTestingMojoExecution(IMavenProjectFacade projectFacade, IProgressMonitor monitor) + static MojoExecution getBndTestingMojoExecution(IMaven maven, IMavenProjectFacade projectFacade, + IProgressMonitor monitor) throws CoreException { - return getMojoExecution(projectFacade, "biz.aQute.bnd:bnd-testing-maven-plugin", "bnd-testing:testing@", + return getMojoExecution(maven, projectFacade, "biz.aQute.bnd:bnd-testing-maven-plugin", "bnd-testing:testing@", exe -> true, monitor); } - default MojoExecution getBndTestingMojoExecution(IMavenProjectFacade projectFacade, + static MojoExecution getBndTestingMojoExecution(IMaven maven, IMavenProjectFacade projectFacade, Predicate predicate, IProgressMonitor monitor) throws CoreException { - return getMojoExecution(projectFacade, "biz.aQute.bnd:bnd-testing-maven-plugin", "bnd-testing:testing@", + return getMojoExecution(maven, projectFacade, "biz.aQute.bnd:bnd-testing-maven-plugin", "bnd-testing:testing@", predicate, monitor); } - default MojoExecution getMojoExecution(IMavenProjectFacade projectFacade, String pluginId, String executionPrefix, + static MojoExecution getMojoExecution(IMaven maven, IMavenProjectFacade projectFacade, String pluginId, + String executionPrefix, Predicate predicate, IProgressMonitor monitor) throws CoreException { MavenProject mavenProject = getMavenProject(projectFacade); Plugin plugin = getMavenProject(projectFacade).getPlugin(pluginId); @@ -165,7 +172,7 @@ default String createErrorMessage(String pluginId) { return builder.toString(); } - default boolean isOffline() { + static boolean isOffline(IMaven maven) { try { return maven.getSettings() .isOffline(); @@ -174,19 +181,27 @@ default boolean isOffline() { } } - default T lookupComponent(Class clazz) { + static T lookupComponent(IMaven maven, Class clazz) { try { Method lookupComponentMethod = maven.getClass() - .getMethod("lookupComponent", Class.class); + .getMethod("lookup", Class.class); return clazz.cast(lookupComponentMethod.invoke(maven, clazz)); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { - return null; + try { + Method lookupComponentMethod = maven.getClass() + .getMethod("lookupComponent", Class.class); + + return clazz.cast(lookupComponentMethod.invoke(maven, clazz)); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException + | NoSuchMethodException | SecurityException e2) { + return null; + } } } - default boolean containsBndrun(MojoExecution mojoExecution, MavenProject mavenProject, File bndrunFile, + static boolean containsBndrun(IMaven maven, MojoExecution mojoExecution, MavenProject mavenProject, File bndrunFile, IProgressMonitor monitor) { try { Bndruns bndruns = maven.getMojoParameterValue(mavenProject, mojoExecution, "bndruns", Bndruns.class, diff --git a/bndtools.m2e/src/bndtools/m2e/MavenRunProvider.java b/bndtools.m2e/src/bndtools/m2e/MavenRunProvider.java index 25c1b9d95a..7569e6130a 100644 --- a/bndtools.m2e/src/bndtools/m2e/MavenRunProvider.java +++ b/bndtools.m2e/src/bndtools/m2e/MavenRunProvider.java @@ -1,5 +1,12 @@ package bndtools.m2e; +import static bndtools.m2e.MavenRunListenerHelper.containsBndrun; +import static bndtools.m2e.MavenRunListenerHelper.getBndResolverMojoExecution; +import static bndtools.m2e.MavenRunListenerHelper.getBndTestingMojoExecution; +import static bndtools.m2e.MavenRunListenerHelper.getMavenProject; +import static bndtools.m2e.MavenRunListenerHelper.getMavenProjectFacade; +import static bndtools.m2e.MavenRunListenerHelper.isMavenProject; + import java.io.File; import java.util.function.Predicate; @@ -9,12 +16,15 @@ import org.bndtools.api.RunProvider; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.m2e.core.embedder.IMaven; import org.eclipse.m2e.core.project.IMavenProjectFacade; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; import org.osgi.framework.Constants; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; @@ -30,19 +40,25 @@ * that one does not check to see if the project is M2E. */ @Component(property = Constants.SERVICE_RANKING + ":Integer=3000") -public class MavenRunProvider implements MavenRunListenerHelper, RunProvider { +public class MavenRunProvider implements RunProvider { private static final Logger logger = LoggerFactory.getLogger(MavenRunProvider.class); private MavenWorkspaceRepository mavenWorkspaceRepository; + @Reference + IMaven maven; + @Reference + IMavenProjectRegistry mavenProjectRegistry; + @Override public Bndrun create(IResource targetResource, RunMode mode) throws Exception { - if (!isMavenProject(targetResource)) { + if (!isMavenProject(mavenProjectRegistry, targetResource)) { return null; } - final IMavenProjectFacade projectFacade = getMavenProjectFacade(targetResource); + final IMavenProjectFacade projectFacade = getMavenProjectFacade(mavenProjectRegistry, + targetResource); Bndrun bndrun = create0(targetResource, projectFacade, mode); if (bndrun == null) { @@ -51,11 +67,12 @@ public Bndrun create(IResource targetResource, RunMode mode) throws Exception { Workspace workspace = bndrun.getWorkspace(); final MavenImplicitProjectRepository implicitRepo = new MavenImplicitProjectRepository( // - projectFacade, bndrun); + mavenProjectRegistry, projectFacade, bndrun); mavenProjectRegistry.addMavenProjectChangedListener( // implicitRepo); - iWorkspace.addResourceChangeListener( // + ResourcesPlugin.getWorkspace() + .addResourceChangeListener( // implicitRepo, IResourceChangeEvent.POST_CHANGE); workspace.addBasicPlugin(implicitRepo); @@ -96,7 +113,7 @@ private Bndrun create0(IResource targetResource, IMavenProjectFacade projectFaca File location = targetResource.getLocation() .toFile(); bndrunFile = location; - bndrunMatchs = mojoExecution -> containsBndrun(mojoExecution, mavenProject, location, monitor); + bndrunMatchs = mojoExecution -> containsBndrun(maven, mojoExecution, mavenProject, location, monitor); } MojoExecution mojoExecution; @@ -105,7 +122,8 @@ private Bndrun create0(IResource targetResource, IMavenProjectFacade projectFaca case LAUNCH : case EDIT : case SOURCES : - if ((mojoExecution = getBndResolverMojoExecution(projectFacade, bndrunMatchs, monitor)) != null) { + if ((mojoExecution = getBndResolverMojoExecution(maven, projectFacade, bndrunMatchs, + monitor)) != null) { if (bndrunFile == null) { Bndruns bndruns = maven.getMojoParameterValue(mavenProject, mojoExecution, "bndruns", @@ -115,15 +133,15 @@ private Bndrun create0(IResource targetResource, IMavenProjectFacade projectFaca .get(0); } - MavenBndrunContainer mavenBndrunContainer = MavenBndrunContainer.getBndrunContainer(projectFacade, - mojoExecution, monitor); + MavenBndrunContainer mavenBndrunContainer = MavenBndrunContainer.getBndrunContainer(maven, + mavenProjectRegistry, projectFacade, mojoExecution, monitor); return mavenBndrunContainer.init(bndrunFile, mode.name(), new File(mavenProject.getBuild() .getDirectory())); } break; case TEST : - if ((mojoExecution = getBndTestingMojoExecution(projectFacade, bndrunMatchs, monitor)) != null) { + if ((mojoExecution = getBndTestingMojoExecution(maven, projectFacade, bndrunMatchs, monitor)) != null) { if (bndrunFile == null) { Bndruns bndruns = maven.getMojoParameterValue(mavenProject, mojoExecution, "bndruns", @@ -133,8 +151,8 @@ private Bndrun create0(IResource targetResource, IMavenProjectFacade projectFaca .get(0); } - MavenBndrunContainer mavenBndrunContainer = MavenBndrunContainer.getBndrunContainer(projectFacade, - mojoExecution, monitor); + MavenBndrunContainer mavenBndrunContainer = MavenBndrunContainer.getBndrunContainer(maven, + mavenProjectRegistry, projectFacade, mojoExecution, monitor); return mavenBndrunContainer.init(bndrunFile, mode.name(), new File(mavenProject.getBuild() .getDirectory())); diff --git a/bndtools.m2e/src/bndtools/m2e/MavenWorkspaceRepository.java b/bndtools.m2e/src/bndtools/m2e/MavenWorkspaceRepository.java index f2480aa19b..b00a43d064 100644 --- a/bndtools.m2e/src/bndtools/m2e/MavenWorkspaceRepository.java +++ b/bndtools.m2e/src/bndtools/m2e/MavenWorkspaceRepository.java @@ -28,12 +28,14 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.m2e.core.project.IMavenProjectChangedListener; import org.eclipse.m2e.core.project.IMavenProjectFacade; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; import org.eclipse.m2e.core.project.MavenProjectChangedEvent; import org.eclipse.osgi.service.datalocation.Location; import org.osgi.framework.namespace.IdentityNamespace; import org.osgi.resource.Resource; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.osgi.service.repository.ExpressionCombiner; import org.osgi.service.repository.RequirementExpression; import org.osgi.util.promise.Promise; @@ -67,7 +69,7 @@ IMavenProjectChangedListener.class, MavenWorkspaceRepository.class, RepositoryPlugin.class }) public class MavenWorkspaceRepository extends AbstractIndexingRepository - implements IMavenProjectChangedListener, MavenRunListenerHelper, PopulatedRepository, RepositoryPlugin, Actionable { + implements IMavenProjectChangedListener, PopulatedRepository, RepositoryPlugin, Actionable { enum Kind { ADDED(MavenProjectChangedEvent.KIND_ADDED), @@ -100,6 +102,9 @@ public static Kind get(MavenProjectChangedEvent event) { private final RequirementExpression identificationExpression; private final ProjectArtifactCollector projectArtifactCollector = new ProjectArtifactCollector(); + @Reference + IMavenProjectRegistry mavenProjectRegistry; + public MavenWorkspaceRepository() { super(); diff --git a/bndtools.m2e/src/bndtools/m2e/ServiceAwareM2EConfigurator.java b/bndtools.m2e/src/bndtools/m2e/ServiceAwareM2EConfigurator.java new file mode 100644 index 0000000000..c59a8de05a --- /dev/null +++ b/bndtools.m2e/src/bndtools/m2e/ServiceAwareM2EConfigurator.java @@ -0,0 +1,39 @@ +package bndtools.m2e; + +import org.eclipse.m2e.core.embedder.IMaven; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; +import org.eclipse.m2e.core.project.configurator.AbstractProjectConfigurator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.ServiceReference; + +public abstract class ServiceAwareM2EConfigurator extends AbstractProjectConfigurator { + + protected IMaven getMaven() { + IMaven service = getService(IMaven.class); + this.maven = service; + return service; + } + + protected IMavenProjectRegistry getRegistry() { + return getService(IMavenProjectRegistry.class); + } + + private T getService(Class clz) { + BundleContext ctx = FrameworkUtil.getBundle(IndexConfigurator.class) + .getBundleContext(); + if (ctx == null) { + throw new IllegalStateException("Bndtools M2E integration is not started"); + } + ServiceReference ref = ctx.getServiceReference(clz); + if (ref == null) { + throw new IllegalStateException(String.format("M2E service %s is missing", clz.getName())); + } + T service = ctx.getService(ref); + if (service == null) { + throw new IllegalStateException(String.format("M2E service %s is missing", clz.getName())); + } + return service; + } + +} diff --git a/bndtools.m2e/src/bndtools/m2e/WorkspaceProjectPostProcessor.java b/bndtools.m2e/src/bndtools/m2e/WorkspaceProjectPostProcessor.java index 6a73c0651e..3e893737bd 100644 --- a/bndtools.m2e/src/bndtools/m2e/WorkspaceProjectPostProcessor.java +++ b/bndtools.m2e/src/bndtools/m2e/WorkspaceProjectPostProcessor.java @@ -11,18 +11,22 @@ import org.eclipse.aether.resolution.ArtifactResult; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.m2e.core.project.IMavenProjectFacade; +import org.eclipse.m2e.core.project.IMavenProjectRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import aQute.bnd.maven.lib.resolve.PostProcessor; -class WorkspaceProjectPostProcessor implements MavenRunListenerHelper, PostProcessor { +class WorkspaceProjectPostProcessor implements PostProcessor { private static final Logger logger = LoggerFactory.getLogger(WorkspaceProjectPostProcessor.class); private final IProgressMonitor monitor; - WorkspaceProjectPostProcessor(IProgressMonitor monitor) { + private final IMavenProjectRegistry mavenProjectRegistry; + + WorkspaceProjectPostProcessor(IMavenProjectRegistry mavenProjectRegistry, IProgressMonitor monitor) { + this.mavenProjectRegistry = mavenProjectRegistry; this.monitor = monitor; }