diff --git a/.gitignore b/.gitignore index e3d9b32..a289be3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ *.rpm *.tar.xz *.tar.bz2 +/1.16.1.tar.gz diff --git a/0001-Fix-manifests-for-guava-and-use-OSGi-fied-archetypes.patch b/0001-Fix-manifests-for-guava-and-use-OSGi-fied-archetypes.patch index ba458b5..f77d94a 100644 --- a/0001-Fix-manifests-for-guava-and-use-OSGi-fied-archetypes.patch +++ b/0001-Fix-manifests-for-guava-and-use-OSGi-fied-archetypes.patch @@ -30,10 +30,10 @@ diff --git a/org.eclipse.m2e.core/META-INF/MANIFEST.MF b/org.eclipse.m2e.core/ME index d3ecce2..af681a0 100644 --- a/org.eclipse.m2e.core/META-INF/MANIFEST.MF +++ b/org.eclipse.m2e.core/META-INF/MANIFEST.MF -@@ -13,7 +13,9 @@ Require-Bundle: org.eclipse.osgi;bundle-version="3.10.0", - org.eclipse.m2e.workspace.cli;bundle-version="0.1.0", +@@ -13,7 +13,9 @@ org.eclipse.core.runtime;bundle-version="3.12.0", org.eclipse.core.resources;bundle-version="3.9.0", + org.eclipse.core.filesystem;bundle-version="1.7.700", - com.google.guava;bundle-version="[27.1,28.0)" + org.apache.maven.archetype.catalog, + org.apache.maven.archetype.descriptor, @@ -82,4 +82,3 @@ index 5993fbe..380c9dd 100644 Import-Package: org.slf4j;version="1.6.2" -- 2.26.2 - diff --git a/core.patch b/core.patch deleted file mode 100644 index 1ddfa4e..0000000 --- a/core.patch +++ /dev/null @@ -1,576 +0,0 @@ -diff -ur '--exclude=pom.xml' '--exclude=MANIFEST.MF' --new-file m2e-core-8328691915d0e67544c97597b0ea02d559f0f4ea-new/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java m2e-core-c5392da6bab9893bcbf5b43f651abe48d5819bea-old-old/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java ---- m2e-core-8328691915d0e67544c97597b0ea02d559f0f4ea-new/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java 2020-03-05 13:08:51.000000000 +0000 -+++ m2e-core-c5392da6bab9893bcbf5b43f651abe48d5819bea-old-old/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java 2019-03-05 15:19:21.000000000 +0000 -@@ -36,6 +34,7 @@ - import org.apache.maven.project.MavenProject; - - import org.eclipse.m2e.core.MavenPlugin; -+import org.eclipse.m2e.core.embedder.ICallable; - import org.eclipse.m2e.core.embedder.IMavenExecutionContext; - import org.eclipse.m2e.core.internal.IMavenConstants; - import org.eclipse.m2e.core.internal.M2EUtils; -@@ -85,34 +84,39 @@ - - final MavenExecutionContext context = projectManager.createExecutionContext(pomResource, resolverConfiguration); - -- return context.execute((context2, monitor2) -> { -- final IMavenProjectFacade projectFacade = getProjectFacade(project, monitor2); -- -- if(projectFacade == null) { -- return null; -- } -- -- MavenProject mavenProject; -- try { -- // make sure projectFacade has MavenProject instance loaded -- mavenProject = projectFacade.getMavenProject(monitor2); -- } catch(CoreException ce) { -- //unable to read the project facade -- addErrorMarker(project, ce); -- return null; -- } -+ return context.execute(new ICallable() { -+ @Override -+ public T call(IMavenExecutionContext context, IProgressMonitor monitor) throws CoreException { -+ final IMavenProjectFacade projectFacade = getProjectFacade(project, monitor); - -- return context2.execute(mavenProject, (context1, monitor1) -> { -- ILifecycleMapping lifecycleMapping = configurationManager.getLifecycleMapping(projectFacade); -- if(lifecycleMapping == null) { -+ if(projectFacade == null) { - return null; - } - -- Map> buildParticipantsByMojoExecutionKey = lifecycleMapping -- .getBuildParticipants(projectFacade, monitor1); -+ MavenProject mavenProject; -+ try { -+ // make sure projectFacade has MavenProject instance loaded -+ mavenProject = projectFacade.getMavenProject(monitor); -+ } catch(CoreException ce) { -+ //unable to read the project facade -+ addErrorMarker(project, ce); -+ return null; -+ } - -- return method(context1, projectFacade, buildParticipantsByMojoExecutionKey, kind, args, monitor1); -- }, monitor2); -+ return context.execute(mavenProject, new ICallable() { -+ public T call(IMavenExecutionContext context, IProgressMonitor monitor) throws CoreException { -+ ILifecycleMapping lifecycleMapping = configurationManager.getLifecycleMapping(projectFacade); -+ if(lifecycleMapping == null) { -+ return null; -+ } -+ -+ Map> buildParticipantsByMojoExecutionKey = lifecycleMapping -+ .getBuildParticipants(projectFacade, monitor); -+ -+ return method(context, projectFacade, buildParticipantsByMojoExecutionKey, kind, args, monitor); -+ } -+ }, monitor); -+ } - }, monitor); - } - -diff -ur '--exclude=pom.xml' '--exclude=MANIFEST.MF' --new-file m2e-core-8328691915d0e67544c97597b0ea02d559f0f4ea-new/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java m2e-core-c5392da6bab9893bcbf5b43f651abe48d5819bea-old-old/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java ---- m2e-core-8328691915d0e67544c97597b0ea02d559f0f4ea-new/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java 2020-03-05 13:08:51.000000000 +0000 -+++ m2e-core-c5392da6bab9893bcbf5b43f651abe48d5819bea-old-old/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java 2019-03-05 15:19:21.000000000 +0000 -@@ -27,13 +25,10 @@ - import java.util.List; - import java.util.ListIterator; - import java.util.Map; --import java.util.Map.Entry; --import java.util.Objects; - import java.util.Properties; - import java.util.Set; -+import java.util.concurrent.Callable; - import java.util.concurrent.ExecutionException; --import java.util.function.Consumer; --import java.util.stream.Collectors; - - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; -@@ -42,12 +37,10 @@ - import com.google.common.cache.CacheBuilder; - import com.google.common.cache.RemovalCause; - import com.google.common.cache.RemovalListener; --import com.google.common.collect.LinkedHashMultimap; --import com.google.common.collect.Multimap; -+import com.google.common.cache.RemovalNotification; - - import org.eclipse.core.resources.IFile; - import org.eclipse.core.resources.IProject; --import org.eclipse.core.resources.IResource; - import org.eclipse.core.resources.ResourcesPlugin; - import org.eclipse.core.runtime.CoreException; - import org.eclipse.core.runtime.IPath; -@@ -71,14 +64,11 @@ - import org.apache.maven.lifecycle.MavenExecutionPlan; - import org.apache.maven.model.Model; - import org.apache.maven.model.Parent; --import org.apache.maven.model.building.ModelProblem; --import org.apache.maven.model.building.ModelProblem.Severity; - import org.apache.maven.plugin.ExtensionRealmCache; - import org.apache.maven.plugin.MojoExecution; - import org.apache.maven.plugin.PluginArtifactsCache; - import org.apache.maven.plugin.PluginRealmCache; - import org.apache.maven.project.MavenProject; --import org.apache.maven.project.ProjectBuildingException; - import org.apache.maven.project.ProjectBuildingRequest; - import org.apache.maven.project.ProjectRealmCache; - import org.apache.maven.project.artifact.MavenMetadataCache; -@@ -164,11 +154,6 @@ - - private final Cache mavenProjectCache; - -- /** -- * @noreference For tests only -- */ -- Consumer> addContextProjectListener; -- - public ProjectRegistryManager(MavenImpl maven, File stateLocationDir, boolean readState, - IMavenMarkerManager mavenMarkerManager) { - this.markerManager = mavenMarkerManager; -@@ -204,10 +189,9 @@ - MavenProjectFacade projectFacade = projectRegistry.getProjectFacade(pom); - if(projectFacade == null && load) { - ResolverConfiguration configuration = ResolverConfigurationIO.readResolverConfiguration(pom.getProject()); -- MavenExecutionResult executionResult = readProjectsWithDependencies(projectRegistry, -- Collections.singletonList(pom), configuration, monitor).values().iterator().next(); -+ MavenExecutionResult executionResult = readProjectWithDependencies(projectRegistry, pom, configuration, monitor); - MavenProject mavenProject = executionResult.getProject(); -- if(mavenProject != null && mavenProject.getArtifact() != null) { -+ if(mavenProject != null) { - projectFacade = new MavenProjectFacade(this, pom, mavenProject, configuration); - } else { - List exceptions = executionResult.getExceptions(); -@@ -333,26 +317,30 @@ - // safety net -- do not force refresh of the same installed/resolved artifact more than once - final Set installedArtifacts = new HashSet(); - -- ILocalRepositoryListener listener = (repositoryBasedir, baseArtifact, artifact, artifactFile) -> { -- if(artifactFile == null) { -- // resolution error -- return; -- } -- // TODO remove=false? -- Set refresh = new LinkedHashSet(); -- if(installedArtifacts.add(artifact)) { -- refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenParent(artifact), true)); -- refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifact(artifact), true)); -- refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifactImport(artifact), true)); -- } -- if(installedArtifacts.add(baseArtifact)) { -- refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenParent(baseArtifact), true)); -- refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifact(baseArtifact), true)); -- refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifactImport(baseArtifact), true)); -- } -- if(!refresh.isEmpty()) { -- log.debug("Automatic refresh. artifact={}/{}. projects={}", new Object[] {baseArtifact, artifact, refresh}); -- context.forcePomFiles(refresh); -+ ILocalRepositoryListener listener = new ILocalRepositoryListener() { -+ public void artifactInstalled(File repositoryBasedir, ArtifactKey baseArtifact, ArtifactKey artifact, -+ File artifactFile) { -+ if(artifactFile == null) { -+ // resolution error -+ return; -+ } -+ // TODO remove=false? -+ Set refresh = new LinkedHashSet(); -+ if(installedArtifacts.add(artifact)) { -+ refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenParent(artifact), true)); -+ refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifact(artifact), true)); -+ refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifactImport(artifact), true)); -+ } -+ if(installedArtifacts.add(baseArtifact)) { -+ refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenParent(baseArtifact), true)); -+ refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifact(baseArtifact), true)); -+ refresh -+ .addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifactImport(baseArtifact), true)); -+ } -+ if(!refresh.isEmpty()) { -+ log.debug("Automatic refresh. artifact={}/{}. projects={}", new Object[] {baseArtifact, artifact, refresh}); -+ context.forcePomFiles(refresh); -+ } - } - }; - -@@ -368,111 +356,96 @@ - - private void refresh(final MutableProjectRegistry newState, final DependencyResolutionContext context, - IProgressMonitor monitor) throws CoreException { -- Set allProcessedPoms = new HashSet<>(); -- Set allNewFacades = new HashSet<>(); -+ Set secondPhaseBacklog = new LinkedHashSet(); - -- final Map> originalCapabilities = new HashMap<>(); -- final Map> originalRequirements = new HashMap<>(); -+ final Map> originalCapabilities = new HashMap>(); -+ final Map> originalRequirements = new HashMap>(); - - // phase 1: build projects without dependencies and populate workspace with known projects -- while(!context.isEmpty()) { // context may be augmented, so we need to keep processing -- List toReadPomFiles = new ArrayList<>(); -- while(!context.isEmpty()) { // Group build of all current context -- if(monitor.isCanceled()) { -- throw new OperationCanceledException(); -- } -+ while(!context.isEmpty()) { -+ if(monitor.isCanceled()) { -+ throw new OperationCanceledException(); -+ } - -- if(newState.isStale() || (syncRefreshThread != null && syncRefreshThread != Thread.currentThread())) { -- throw new StaleMutableProjectRegistryException(); -- } -+ if(newState.isStale() || (syncRefreshThread != null && syncRefreshThread != Thread.currentThread())) { -+ throw new StaleMutableProjectRegistryException(); -+ } - -- IFile pom = context.pop(); -- if(allNewFacades.contains(pom)) { -- // pom was already in context and successfully read -- continue; -- } -- allProcessedPoms.add(pom); -+ IFile pom = context.pop(); - -- monitor.subTask(NLS.bind(Messages.ProjectRegistryManager_task_project, pom.getProject().getName())); -- MavenProjectFacade oldFacade = newState.getProjectFacade(pom); -+ monitor.subTask(NLS.bind(Messages.ProjectRegistryManager_task_project, pom.getProject().getName())); -+ MavenProjectFacade oldFacade = newState.getProjectFacade(pom); - -- context.forcePomFiles(flushCaches(newState, pom, oldFacade, isForceDependencyUpdate())); -- if(oldFacade != null) { -- putMavenProject(oldFacade, null); // maintain maven project cache -- } -- if(pom.isAccessible() && pom.getProject().hasNature(IMavenConstants.NATURE_ID)) { -- toReadPomFiles.add(pom); -- if(oldFacade != null) { -- // refresh old child modules -- MavenCapability mavenParentCapability = MavenCapability.createMavenParent(oldFacade.getArtifactKey()); -- context.forcePomFiles(newState.getVersionedDependents(mavenParentCapability, true)); -- -- // refresh projects that import dependencyManagement from this one -- MavenCapability mavenArtifactImportCapability = MavenCapability -- .createMavenArtifactImport(oldFacade.getArtifactKey()); -- context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true)); -- } -- } else { -- newState.setProject(pom, null); // discard closed/deleted pom in workspace -- // refresh children of deleted/closed parent -- if(oldFacade != null) { -- MavenCapability mavenParentCapability = MavenCapability.createMavenParent(oldFacade.getArtifactKey()); -- context.forcePomFiles(newState.getDependents(mavenParentCapability, true)); -- -- MavenCapability mavenArtifactImportCapability = MavenCapability -- .createMavenArtifactImport(oldFacade.getArtifactKey()); -- context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true)); -- } -- } -+ context.forcePomFiles(flushCaches(newState, pom, oldFacade, isForceDependencyUpdate())); -+ if(oldFacade != null) { -+ putMavenProject(oldFacade, null); // maintain maven project cache - } -- Map newFacades = readMavenProjectFacades(toReadPomFiles, newState, monitor); -- for(Entry entry : newFacades.entrySet()) { -- IFile pom = entry.getKey(); -- MavenProjectFacade newFacade = entry.getValue(); -- newState.setProject(pom, newFacade); -- if(newFacade != null) { -- // refresh new child modules -- MavenCapability mavenParentCapability = MavenCapability.createMavenParent(newFacade.getArtifactKey()); -+ MavenProjectFacade newFacade = null; -+ if(pom.isAccessible() && pom.getProject().hasNature(IMavenConstants.NATURE_ID)) { -+ if(oldFacade != null) { -+ // refresh old child modules -+ MavenCapability mavenParentCapability = MavenCapability.createMavenParent(oldFacade.getArtifactKey()); - context.forcePomFiles(newState.getVersionedDependents(mavenParentCapability, true)); - - // refresh projects that import dependencyManagement from this one - MavenCapability mavenArtifactImportCapability = MavenCapability -- .createMavenArtifactImport(newFacade.getArtifactKey()); -+ .createMavenArtifactImport(oldFacade.getArtifactKey()); - context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true)); -+ } - -- Set capabilities = new LinkedHashSet(); -- capabilities.add(mavenParentCapability); -- capabilities.add(MavenCapability.createMavenArtifact(newFacade.getArtifactKey())); -- Set oldCapabilities = newState.setCapabilities(pom, capabilities); -- if(!originalCapabilities.containsKey(pom)) { -- originalCapabilities.put(pom, oldCapabilities); -- } -+ newFacade = readMavenProjectFacade(pom, newState, monitor); -+ } else { -+ // refresh children of deleted/closed parent -+ if(oldFacade != null) { -+ MavenCapability mavenParentCapability = MavenCapability.createMavenParent(oldFacade.getArtifactKey()); -+ context.forcePomFiles(newState.getDependents(mavenParentCapability, true)); - -- MavenProject mavenProject = getMavenProject(newFacade); -- Set requirements = new LinkedHashSet(); -- DefaultMavenDependencyResolver.addProjectStructureRequirements(requirements, mavenProject); -- Set oldRequirements = newState.setRequirements(pom, requirements); -- if(!originalRequirements.containsKey(pom)) { -- originalRequirements.put(pom, oldRequirements); -- } -+ MavenCapability mavenArtifactImportCapability = MavenCapability -+ .createMavenArtifactImport(oldFacade.getArtifactKey()); -+ context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true)); - } - } -- allNewFacades.addAll(newFacades.keySet()); -- List erroneousPoms = new ArrayList(toReadPomFiles); -- erroneousPoms.removeAll(newFacades.keySet()); -- erroneousPoms.forEach(pom -> newState.setProject(pom, null)); -- if(!newFacades.isEmpty()) { // progress did happen -- // push files that could't be read back into context for a second pass. -- // This can help if some read files are parent of other ones in the same -- // request -> the child wouldn't be read immediately, but would be in a -- // 2nd pass once parent was read. -- context.forcePomFiles(new HashSet(erroneousPoms)); -+ -+ newState.setProject(pom, newFacade); -+ -+ if(newFacade != null) { -+ // refresh new child modules -+ MavenCapability mavenParentCapability = MavenCapability.createMavenParent(newFacade.getArtifactKey()); -+ context.forcePomFiles(newState.getVersionedDependents(mavenParentCapability, true)); -+ -+ // refresh projects that import dependencyManagement from this one -+ MavenCapability mavenArtifactImportCapability = MavenCapability -+ .createMavenArtifactImport(newFacade.getArtifactKey()); -+ context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true)); -+ -+ Set capabilities = new LinkedHashSet(); -+ capabilities.add(mavenParentCapability); -+ capabilities.add(MavenCapability.createMavenArtifact(newFacade.getArtifactKey())); -+ Set oldCapabilities = newState.setCapabilities(pom, capabilities); -+ if(!originalCapabilities.containsKey(pom)) { -+ originalCapabilities.put(pom, oldCapabilities); -+ } -+ -+ MavenProject mavenProject = getMavenProject(newFacade); -+ Set requirements = new LinkedHashSet(); -+ DefaultMavenDependencyResolver.addProjectStructureRequirements(requirements, mavenProject); -+ Set oldRequirements = newState.setRequirements(pom, requirements); -+ if(!originalRequirements.containsKey(pom)) { -+ originalRequirements.put(pom, oldRequirements); -+ } -+ - } -+ -+ // at this point project facade and project capabilities/requirements are inconsistent in the state -+ // this will be reconciled during the second phase -+ -+ secondPhaseBacklog.add(pom); - } - -- context.forcePomFiles(allProcessedPoms); -+ context.forcePomFiles(secondPhaseBacklog); - - // phase 2: resolve project dependencies -+ Set secondPhaseProcessed = new HashSet(); - while(!context.isEmpty()) { - if(monitor.isCanceled()) { - throw new OperationCanceledException(); -@@ -484,15 +457,20 @@ - - final IFile pom = context.pop(); - -+ if(!secondPhaseProcessed.add(pom)) { -+ // because workspace contents is fully known at this point, each project needs to be resolved at most once -+ continue; -+ } -+ - MavenProjectFacade newFacade = null; - if(pom.isAccessible() && pom.getProject().hasNature(IMavenConstants.NATURE_ID)) { - newFacade = newState.getProjectFacade(pom); - } - if(newFacade != null) { - MavenProject mavenProject = getMavenProject(newFacade); -- if(!allProcessedPoms.contains(newFacade.getPom())) { -+ if(mavenProject == null) { - // facade from workspace state that has not been refreshed yet -- newFacade = readMavenProjectFacades(Collections.singletonList(pom), newState, monitor).get(pom); -+ newFacade = readMavenProjectFacade(pom, newState, monitor); - } else { - // recreate facade instance to trigger project changed event - // this is only necessary for facades that are refreshed because their dependencies changed -@@ -505,12 +483,12 @@ - - if(newFacade != null) { - final MavenProjectFacade _newFacade = newFacade; -+ final MavenProject mavenProject = getMavenProject(newFacade); - final ResolverConfiguration resolverConfiguration = _newFacade.getResolverConfiguration(); -- createExecutionContext(newState, pom, resolverConfiguration).execute(getMavenProject(newFacade), -- (executionContext, pm) -> { -- refreshPhase2(newState, context, originalCapabilities, originalRequirements, pom, _newFacade, pm); -- return null; -- }, monitor); -+ createExecutionContext(newState, pom, resolverConfiguration).execute(mavenProject, (executionContext, pm) -> { -+ refreshPhase2(newState, context, originalCapabilities, originalRequirements, pom, _newFacade, pm); -+ return null; -+ }, monitor); - } else { - refreshPhase2(newState, context, originalCapabilities, originalRequirements, pom, newFacade, monitor); - } -@@ -706,58 +684,36 @@ - return new DefaultMavenDependencyResolver(this, markerManager); - } - -- private Map readMavenProjectFacades(final Collection poms, -- final MutableProjectRegistry state, final IProgressMonitor monitor) -- throws CoreException { -- for(IFile pom : poms) { -- markerManager.deleteMarkers(pom, IMavenConstants.MARKER_POM_LOADING_ID); -- } -+ private MavenProjectFacade readMavenProjectFacade(final IFile pom, final MutableProjectRegistry state, -+ final IProgressMonitor monitor) throws CoreException { -+ markerManager.deleteMarkers(pom, IMavenConstants.MARKER_POM_LOADING_ID); -+ -+ final ResolverConfiguration resolverConfiguration = ResolverConfigurationIO -+ .readResolverConfiguration(pom.getProject()); -+ -+ return execute(state, pom, resolverConfiguration, (executionContext, pm) -> { -+ MavenProject mavenProject = null; -+ MavenExecutionResult mavenResult = null; -+ if(pom.isAccessible()) { -+ mavenResult = getMaven().readMavenProject(pom.getLocation().toFile(), -+ executionContext.newProjectBuildingRequest()); -+ mavenProject = mavenResult.getProject(); -+ } - -- final Map resolverConfigurations = new HashMap<>(poms.size(), 1.f); -- final Multimap groupsToImport = LinkedHashMultimap.create(); -- for(IFile pom : poms) { -- if(monitor.isCanceled()) { -- return null; -- } -- ResolverConfiguration resolverConfiguration = ResolverConfigurationIO.readResolverConfiguration(pom.getProject()); -- resolverConfigurations.put(pom, resolverConfiguration); -- groupsToImport.put(resolverConfiguration, pom); -- } -- -- Map result = new HashMap<>(poms.size(), 1.f); -- SubMonitor subMonitor = SubMonitor.convert(monitor, poms.size()); -- for(Entry> entry : groupsToImport.asMap().entrySet()) { -- ResolverConfiguration resolverConfiguration = entry.getKey(); -- Collection pomFiles = entry.getValue(); -- result.putAll(execute(state, poms.size() == 1 ? pomFiles.iterator().next() : null, resolverConfiguration, -- (executionContext, pm) -> { -- Map mavenResults = getMaven().readMavenProjects(pomFiles.stream() -- .filter(IFile::isAccessible).map(pom -> pom.getLocation().toFile()).collect(Collectors.toList()), -- executionContext.newProjectBuildingRequest()); -- -- Map facades = new HashMap<>(mavenResults.size(), 1.f); -- for (IFile pom : pomFiles) { -- if (!pom.isAccessible()) { -- continue; -- } -- MavenExecutionResult mavenResult = mavenResults.get(pom.getLocation().toFile()); -- MavenProject mavenProject = mavenResult.getProject(); -- MarkerUtils.addEditorHintMarkers(markerManager, pom, mavenProject, -- IMavenConstants.MARKER_POM_LOADING_ID); -- markerManager.addMarkers(pom, IMavenConstants.MARKER_POM_LOADING_ID, mavenResult); -- if(mavenProject != null && mavenProject.getArtifact() != null) { -- MavenProjectFacade mavenProjectFacade = new MavenProjectFacade(ProjectRegistryManager.this, pom, mavenProject, -- resolverConfiguration); -- putMavenProject(mavenProjectFacade, mavenProject); // maintain maven project cache -- facades.put(pom, mavenProjectFacade); -- } -- } -+ MarkerUtils.addEditorHintMarkers(markerManager, pom, mavenProject, IMavenConstants.MARKER_POM_LOADING_ID); -+ markerManager.addMarkers(pom, IMavenConstants.MARKER_POM_LOADING_ID, mavenResult); -+ if(mavenProject == null) { -+ return null; -+ } - -- return facades; -- }, subMonitor.split(pomFiles.size()) -- )); -- } -- return result; -+ // create and return new project facade -+ MavenProjectFacade mavenProjectFacade = new MavenProjectFacade(ProjectRegistryManager.this, pom, mavenProject, -+ resolverConfiguration); -+ -+ putMavenProject(mavenProjectFacade, mavenProject); // maintain maven project cache -+ -+ return mavenProjectFacade; -+ }, monitor); - } - - /*package*/Map> calculateExecutionPlans(IFile pom, MavenProject mavenProject, -@@ -829,14 +785,9 @@ - - MavenProject readProjectWithDependencies(IFile pomFile, ResolverConfiguration resolverConfiguration, - IProgressMonitor monitor) throws CoreException { -- Map results = readProjectsWithDependencies(projectRegistry, -- Collections.singletonList(pomFile), resolverConfiguration, monitor); -- if(results.size() != 1) { -- throw new IllegalStateException("Results should contain one entry."); -- } -- MavenExecutionResult result = results.values().iterator().next(); -+ MavenExecutionResult result = readProjectWithDependencies(projectRegistry, pomFile, resolverConfiguration, monitor); - MavenProject mavenProject = result.getProject(); -- if(mavenProject != null && !hasError(result)) { -+ if(mavenProject != null) { - return mavenProject; - } - MultiStatus status = new MultiStatus(IMavenConstants.PLUGIN_ID, 0, Messages.MavenProjectFacade_error, null); -@@ -847,34 +798,21 @@ - throw new CoreException(status); - } - -- private static boolean hasError(MavenExecutionResult mavenExecutionResult) { -- return mavenExecutionResult.getExceptions().stream().anyMatch(ex -> !(ex instanceof ProjectBuildingException)) -- || mavenExecutionResult.getExceptions().stream()// -- .map(ProjectBuildingException.class::cast)// -- .flatMap(ex -> ex.getResults().stream())// -- .flatMap(result -> result.getProblems().stream())// -- .map(ModelProblem::getSeverity)// -- .anyMatch(severity -> severity != Severity.WARNING); -- } -+ private MavenExecutionResult readProjectWithDependencies(IProjectRegistry state, final IFile pomFile, -+ ResolverConfiguration resolverConfiguration, final IProgressMonitor monitor) { - -- Map readProjectsWithDependencies(IProjectRegistry state, Collection pomFiles, -- ResolverConfiguration resolverConfiguration, IProgressMonitor monitor) { - try { -- return execute(state, pomFiles.size() == 1 ? pomFiles.iterator().next() : null, resolverConfiguration, -- (context, aMonitor) -> { -- ProjectBuildingRequest configuration = context.newProjectBuildingRequest(); -- configuration.setResolveDependencies(true); -- return getMaven().readMavenProjects( -- pomFiles.stream().map(file -> file.getLocation().toFile()).collect(Collectors.toList()), -- configuration); -+ return execute(state, pomFile, resolverConfiguration, (context, pm) -> { -+ ProjectBuildingRequest configuration = context.newProjectBuildingRequest(); -+ configuration.setResolveDependencies(true); -+ return getMaven().readMavenProject(pomFile.getLocation().toFile(), configuration); - }, monitor); - } catch(CoreException ex) { -- MavenExecutionResult result = new DefaultMavenExecutionResult(); -+ DefaultMavenExecutionResult result = new DefaultMavenExecutionResult(); - result.addException(ex); -- return pomFiles.stream().filter(IResource::isAccessible).map(IResource::getLocation).filter(Objects::nonNull) -- .map(IPath::toFile).collect(HashMap::new, (map, pomFile) -> map.put(pomFile, result), -- (container, toFold) -> container.putAll(toFold)); -+ return result; - } -+ - } - - public IMavenProjectFacade[] getProjects() { -@@ -1098,9 +1037,6 @@ - Map mavenProjects = getContextProjects(); - if(mavenProject != null) { - mavenProjects.put(facade, mavenProject); -- if(this.addContextProjectListener != null) { -- this.addContextProjectListener.accept(mavenProjects); -- } - } else { - mavenProjects.remove(facade); - synchronized(legacyMavenProjects) { diff --git a/eclipse-m2e-core.spec b/eclipse-m2e-core.spec index 5a0970f..2d5cb35 100644 --- a/eclipse-m2e-core.spec +++ b/eclipse-m2e-core.spec @@ -1,8 +1,8 @@ %global release_dir m2e-core-%{version} Name: eclipse-m2e-core -Version: 1.16.0 -Release: 7%{?dist} +Version: 1.16.1 +Release: 1%{?dist} Summary: Maven integration for Eclipse # Most of components are under EPL, but some of them are licensed under @@ -10,7 +10,7 @@ Summary: Maven integration for Eclipse License: EPL-2.0 and ASL 2.0 URL: https://eclipse.org/m2e/ -Source0: https://git.eclipse.org/c/m2e/m2e-core.git/snapshot/%{release_dir}.tar.xz +Source0: https://github.com/eclipse-m2e/m2e-core/archive/%{version}.tar.gz # Allow building against the Fedora shipped guava version Patch0: 0001-Fix-manifests-for-guava-and-use-OSGi-fied-archetypes.patch @@ -31,8 +31,6 @@ Patch4: 0005-Port-to-latest-version-of-maven-archetypes.patch # Avoid dep on aether-connector, use java 11 instead Patch5: 0006-Remove-dep-on-aether-connector.patch -Patch1000: core.patch - BuildArch: noarch # Upstream Eclipse no longer supports non-64bit arches @@ -221,8 +219,8 @@ Obsoletes: eclipse-m2e-sourcelookup < 1.1.1-1 Provides: eclipse-m2e-sourcelookup = %{version}-%{release} # Not shipping tests or javadoc since F33 -Obsoletes: %{name}-javadoc <= 1.16.0-3 -Obsoletes: %{name}-tests <= 1.16.0-3 +Obsoletes: %{name}-javadoc < 1.16.1-1 +Obsoletes: %{name}-tests < 1.16.1-1 %description The goal of the m2ec project is to provide a first-class Apache Maven support @@ -309,6 +307,8 @@ done %pom_remove_dep :tycho-sourceref-jgit %pom_xpath_remove 'pom:configuration/pom:timestampProvider' %pom_xpath_remove 'pom:configuration/pom:sourceReferences' +%pom_remove_plugin ":exec-maven-plugin" m2e-maven-runtime +%pom_remove_plugin ":properties-maven-plugin" m2e-maven-runtime # Specify a guava version sed -i -e '/com.google.guava/a20.0' \ @@ -318,12 +318,6 @@ sed -i -e '/com.google.guava/a20.0' \ sed -i -e '/org.slf4j/s|^\(.*\)|\1,org.apache.lucene.analysis,org.apache.lucene.analysis.standard,org.apache.lucene.analysis.util,org.apache.lucene.document,org.apache.lucene.index,org.apache.lucene.queryparser.classic,org.apache.lucene.search,org.apache.lucene.search.highlight,org.apache.lucene.store,org.apache.lucene.util|' \ org.eclipse.m2e.core/META-INF/MANIFEST.MF org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF -# Maven 3.6.2 API -sed -i -e 's/DefaultProjectBuilder\.DISABLE_GLOBAL_MODEL_CACHE_SYSTEM_PROPERTY/"maven.defaultProjectBuilder.disableGlobalModelCache"/' \ - org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/MavenPluginActivator.java - -%patch1000 -p1 - %build export JAVA_HOME=%{_jvmdir}/java-11 # Building m2e is a two step process. See upstream documentation: @@ -332,14 +326,13 @@ repo=localrepo xmvn -B -o package -f m2e-maven-runtime/pom.xml -Dmaven.repo.local=${repo} # Manually install the first stage (don't rely on felix OBR) mkdir tmp && pushd tmp -xmvn -B -o install:install-file -DgroupId=org.eclipse.m2e -DartifactId=org.eclipse.m2e.archetype.common -Dversion=%{version}-SNAPSHOT -Dpackaging=jar \ - -Dmaven.repo.local=../${repo} -Dfile=../m2e-maven-runtime/org.eclipse.m2e.archetype.common/target/org.eclipse.m2e.archetype.common-%{version}-SNAPSHOT.jar -xmvn -B -o install:install-file -DgroupId=org.eclipse.m2e -DartifactId=org.eclipse.m2e.maven.indexer -Dversion=%{version}-SNAPSHOT -Dpackaging=jar \ - -Dmaven.repo.local=../${repo} -Dfile=../m2e-maven-runtime/org.eclipse.m2e.maven.indexer/target/org.eclipse.m2e.maven.indexer-%{version}-SNAPSHOT.jar -xmvn -B -o install:install-file -DgroupId=org.eclipse.m2e -DartifactId=org.eclipse.m2e.maven.runtime -Dversion=%{version}-SNAPSHOT -Dpackaging=jar \ - -Dmaven.repo.local=../${repo} -Dfile=../m2e-maven-runtime/org.eclipse.m2e.maven.runtime/target/org.eclipse.m2e.maven.runtime-%{version}-SNAPSHOT.jar -xmvn -B -o install:install-file -DgroupId=org.eclipse.m2e -DartifactId=org.eclipse.m2e.maven.runtime.slf4j.simple -Dversion=%{version}-SNAPSHOT -Dpackaging=jar \ - -Dmaven.repo.local=../${repo} -Dfile=../m2e-maven-runtime/org.eclipse.m2e.maven.runtime.slf4j.simple/target/org.eclipse.m2e.maven.runtime.slf4j.simple-%{version}-SNAPSHOT.jar +for aid in org.eclipse.m2e.archetype.common \ + org.eclipse.m2e.maven.indexer \ + org.eclipse.m2e.maven.runtime \ + org.eclipse.m2e.maven.runtime.slf4j.simple ; do + xmvn -B -o install:install-file -DgroupId=org.eclipse.m2e -DartifactId=$aid -Dversion=1.16.0-SNAPSHOT -Dpackaging=jar \ + -Dmaven.repo.local=../${repo} -Dfile=../m2e-maven-runtime/$aid/target/$aid-1.16.0-SNAPSHOT.jar +done popd # Second stage build %mvn_build -j -f -- -Dmaven.repo.local=${repo} -Dmaven.compiler.source=1.8 -Dmaven.compiler.target=1.8 @@ -351,7 +344,7 @@ for mod in org.eclipse.m2e.archetype.common \ org.eclipse.m2e.maven.runtime \ org.eclipse.m2e.maven.runtime.slf4j.simple do - %mvn_artifact -Dtype=eclipse-plugin m2e-maven-runtime/$mod/pom.xml m2e-maven-runtime/$mod/target/$mod-%{version}-SNAPSHOT.jar + %mvn_artifact -Dtype=eclipse-plugin m2e-maven-runtime/$mod/pom.xml m2e-maven-runtime/$mod/target/$mod-1.16.0-SNAPSHOT.jar done %mvn_install @@ -365,6 +358,9 @@ xmvn-subst -s $(find %{buildroot}%{_datadir}/eclipse/droplets/m2e-core -name jar %license LICENSE-2.0.txt %changelog +* Fri Aug 14 2020 Mat Booth - 1.16.1-1 +- Update to latest upstream release + * Thu Aug 06 2020 Mat Booth - 1.16.0-7 - Fix broken requires diff --git a/sources b/sources index 42432c2..acbb0af 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (m2e-core-1.16.0.tar.xz) = 3e96f475c948d682c665a65e263fb2da3b6cbf996d844ad47d738b1eba11602ee8084250d21ab5676e47667b53f41d3caaafba2cebf7d94c6917cb672e8e0f33 +SHA512 (1.16.1.tar.gz) = 35ae108925373af84c66a262c79305b4b270af9850cc1fcd4687cc437e51cd7f048c3050a882637a9b93b8e12cd53e702c2be71c2b620c3ca0d3f3928b13c37e