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