diff --git a/org.eclipse.m2e.core/META-INF/MANIFEST.MF b/org.eclipse.m2e.core/META-INF/MANIFEST.MF index 2fa9aafa97..d7e07c05a6 100644 --- a/org.eclipse.m2e.core/META-INF/MANIFEST.MF +++ b/org.eclipse.m2e.core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.m2e.core;singleton:=true -Bundle-Version: 2.7.600.qualifier +Bundle-Version: 2.8.600.qualifier Bundle-Activator: org.eclipse.m2e.core.internal.MavenPluginActivator Bundle-Vendor: %Bundle-Vendor Bundle-Localization: plugin diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenModelManager.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenModelManager.java index 93900a17f5..38bcba46ce 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenModelManager.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenModelManager.java @@ -20,9 +20,7 @@ import java.io.InputStream; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -71,9 +69,10 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.model.DependencyManagement; import org.apache.maven.model.Model; -import org.apache.maven.model.building.FileModelSource; -import org.apache.maven.model.building.ModelProcessor; import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectBuilder; +import org.apache.maven.project.ProjectBuildingException; +import org.apache.maven.project.ProjectBuildingResult; import org.eclipse.m2e.core.internal.IMavenToolbox; import org.eclipse.m2e.core.internal.MavenPluginActivator; @@ -106,13 +105,26 @@ public org.apache.maven.model.Model readMavenModel(InputStream reader) throws Co } /** - * Read the model from the provided pom file (might not exits) pointer + * Shortcut for {@link #readMavenModel(File, IProgressMonitor) with 2nd argument being {@code null}. * - * @param pomFile the file pointer - * @return a maven model, or null if the pointer do not point to any valid maven directory - * @throws CoreException if the file points to a valid maven directory but the pom could not be read + * @deprecated Use {@link #readMavenModel(File, IProgressMonitor)} instead. */ + @Deprecated public org.apache.maven.model.Model readMavenModel(File pomFile) throws CoreException { + return readMavenModel(pomFile, null); + } + + /** + * Read the (effective) model from the provided POM file + * + * @param pomFile either the path to the directory containing a pom.xml or the path to the pom.xml itself + * @param progressMonitor the progress monitor, may be {@code null} + * @return the effective maven model, or null if the pomFile does not point to an existing pom.file or + * container directory + * @throws CoreException if the file points to a valid maven directory but the pom could not be read + */ + public org.apache.maven.model.Model readMavenModel(File pomFile, IProgressMonitor progressMonitor) + throws CoreException { File baseDir = pomFile.isDirectory() ? pomFile : pomFile.getParentFile(); Objects.requireNonNull(baseDir, "not a directory and not a parent, invalid file?"); IComponentLookup lookup = containerManager.getComponentLookup(baseDir); @@ -121,17 +133,20 @@ public org.apache.maven.model.Model readMavenModel(File pomFile) throws CoreExce if(locatePom.isEmpty()) { return null; } - ModelProcessor modelProcessor = lookup.lookup(ModelProcessor.class); File pom = locatePom.get(); - Model model; - try { - model = modelProcessor.read(pom, new HashMap<>(Map.of(ModelProcessor.SOURCE, new FileModelSource(pom)))); - } catch(IOException ex) { - throw new CoreException(Status.error(ex.getMessage(), ex)); - } - model.setPomFile(pom); - return model; + IMavenExecutionContext context = maven.createExecutionContext(); + return context.execute((IMavenExecutionContext innerContext, IProgressMonitor monitor) -> { + ProjectBuilder projectBuilder = lookup.lookup(ProjectBuilder.class); + + try { + ProjectBuildingResult result = projectBuilder.build(pom, innerContext.getExecutionRequest() + .getProjectBuildingRequest().setRepositorySession(innerContext.getRepositorySession())); + return result.getProject().getModel(); + } catch(ProjectBuildingException ex) { + throw new CoreException(Status.error(ex.getMessage(), ex)); + } + }, progressMonitor); } public org.apache.maven.model.Model readMavenModel(IFile pomFile) throws CoreException { diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/LocalProjectScanner.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/LocalProjectScanner.java index 84889830be..affae362ef 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/LocalProjectScanner.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/LocalProjectScanner.java @@ -91,7 +91,7 @@ private void scanFolder(File baseDir, String rootRelPath, IProgressMonitor m) th return; } - MavenProjectInfo projectInfo = readMavenProjectInfo(baseDir, rootRelPath, null); + MavenProjectInfo projectInfo = readMavenProjectInfo(baseDir, rootRelPath, null, m); if(projectInfo != null) { addProject(projectInfo); monitor.done(); @@ -114,7 +114,8 @@ private void scanFolder(File baseDir, String rootRelPath, IProgressMonitor m) th } } - private MavenProjectInfo readMavenProjectInfo(File baseDir, String modulePath, MavenProjectInfo parentInfo) { + private MavenProjectInfo readMavenProjectInfo(File baseDir, String modulePath, MavenProjectInfo parentInfo, + IProgressMonitor progressMonitor) { try { baseDir = baseDir.getCanonicalFile(); @@ -122,7 +123,7 @@ private MavenProjectInfo readMavenProjectInfo(File baseDir, String modulePath, M return null; // we already know this project //mkleint: well, if the project is first scanned standalone and later scanned via parent reference, the parent ref gets thrown away?? } - Model model = modelManager.readMavenModel(new File(baseDir, IMavenConstants.POM_FILE_NAME)); + Model model = modelManager.readMavenModel(new File(baseDir, IMavenConstants.POM_FILE_NAME), progressMonitor); if(model == null) { return null; } @@ -164,7 +165,7 @@ private MavenProjectInfo readMavenProjectInfo(File baseDir, String modulePath, M Set profiles = e.getValue(); File moduleBaseDir = new File(baseDir, module); - MavenProjectInfo moduleInfo = readMavenProjectInfo(moduleBaseDir, module, projectInfo); + MavenProjectInfo moduleInfo = readMavenProjectInfo(moduleBaseDir, module, projectInfo, progressMonitor); if(moduleInfo != null) { moduleInfo.addProfiles(profiles); projectInfo.add(moduleInfo); diff --git a/org.eclipse.m2e.feature/feature.xml b/org.eclipse.m2e.feature/feature.xml index b637f8d345..2338b42700 100644 --- a/org.eclipse.m2e.feature/feature.xml +++ b/org.eclipse.m2e.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF b/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF index 37eacaf932..840fe66a8e 100644 --- a/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF +++ b/org.eclipse.m2e.tests.common/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: M2E Testing Helpers Bundle-SymbolicName: org.eclipse.m2e.tests.common;singleton:=true -Bundle-Version: 2.1.1.qualifier +Bundle-Version: 2.1.101.qualifier Require-Bundle: org.junit;bundle-version="4.0.0", org.eclipse.m2e.core;bundle-version="[2.0.0,3.0.0)", org.eclipse.m2e.maven.runtime;bundle-version="[3.9.900,4.0.0)", diff --git a/org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/AbstractMavenProjectTestCase.java b/org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/AbstractMavenProjectTestCase.java index 9b86f4cce7..3ab2a9aa0d 100644 --- a/org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/AbstractMavenProjectTestCase.java +++ b/org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/AbstractMavenProjectTestCase.java @@ -496,7 +496,7 @@ protected IProject[] importProjects(String basedir, String[] pomNames, ResolverC final List projectInfos = new ArrayList<>(); for(String pomName : pomNames) { File pomFile = new File(dst, pomName); - Model model = mavenModelManager.readMavenModel(pomFile); + Model model = mavenModelManager.readMavenModel(pomFile, null); MavenProjectInfo projectInfo = new MavenProjectInfo(pomName, pomFile, model, null); setBasedirRename(projectInfo); projectInfos.add(projectInfo); @@ -562,7 +562,7 @@ protected IProject importProject(String projectName, String projectLocation, copyDir(new File(projectLocation), dir); File pomFile = new File(dir, IMavenConstants.POM_FILE_NAME); - Model model = MavenPlugin.getMavenModelManager().readMavenModel(pomFile); + Model model = MavenPlugin.getMavenModelManager().readMavenModel(pomFile, null); final MavenProjectInfo projectInfo = new MavenProjectInfo(projectName, pomFile, model, null); setBasedirRename(projectInfo);