Skip to content

Commit 39e00e7

Browse files
committed
Retrieve effective instead of raw model when importing projects
This will also interpolate correctly. Use ProjectBuilder instead of ModelProcessor to parse the POM. Encapsulate in a dedicated MavenExecutionContext. This closes #1948
1 parent 3785255 commit 39e00e7

File tree

5 files changed

+40
-24
lines changed

5 files changed

+40
-24
lines changed

org.eclipse.m2e.core/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %Bundle-Name
44
Bundle-SymbolicName: org.eclipse.m2e.core;singleton:=true
5-
Bundle-Version: 2.7.600.qualifier
5+
Bundle-Version: 2.8.600.qualifier
66
Bundle-Activator: org.eclipse.m2e.core.internal.MavenPluginActivator
77
Bundle-Vendor: %Bundle-Vendor
88
Bundle-Localization: plugin

org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenModelManager.java

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@
2020
import java.io.InputStream;
2121
import java.util.Collection;
2222
import java.util.Collections;
23-
import java.util.HashMap;
2423
import java.util.HashSet;
25-
import java.util.Map;
2624
import java.util.Objects;
2725
import java.util.Optional;
2826

@@ -71,9 +69,10 @@
7169
import org.apache.maven.artifact.Artifact;
7270
import org.apache.maven.model.DependencyManagement;
7371
import org.apache.maven.model.Model;
74-
import org.apache.maven.model.building.FileModelSource;
75-
import org.apache.maven.model.building.ModelProcessor;
7672
import org.apache.maven.project.MavenProject;
73+
import org.apache.maven.project.ProjectBuilder;
74+
import org.apache.maven.project.ProjectBuildingException;
75+
import org.apache.maven.project.ProjectBuildingResult;
7776

7877
import org.eclipse.m2e.core.internal.IMavenToolbox;
7978
import org.eclipse.m2e.core.internal.MavenPluginActivator;
@@ -106,13 +105,26 @@ public org.apache.maven.model.Model readMavenModel(InputStream reader) throws Co
106105
}
107106

108107
/**
109-
* Read the model from the provided pom file (might not exits) pointer
108+
* Shortcut for {@link #readMavenModel(File, IProgressMonitor) with 2nd argument being {@code null}.
110109
*
111-
* @param pomFile the file pointer
112-
* @return a maven model, or <code>null</code> if the pointer do not point to any valid maven directory
113-
* @throws CoreException if the file points to a valid maven directory but the pom could not be read
110+
* @deprecated Use {@link #readMavenModel(File, IProgressMonitor)} instead.
114111
*/
112+
@Deprecated
115113
public org.apache.maven.model.Model readMavenModel(File pomFile) throws CoreException {
114+
return readMavenModel(pomFile, null);
115+
}
116+
117+
/**
118+
* Read the (effective) model from the provided POM file
119+
*
120+
* @param pomFile either the path to the directory containing a pom.xml or the path to the pom.xml itself
121+
* @param progressMonitor the progress monitor, may be {@code null}
122+
* @return the effective maven model, or <code>null</code> if the pomFile does not point to an existing pom.file or
123+
* container directory
124+
* @throws CoreException if the file points to a valid maven directory but the pom could not be read
125+
*/
126+
public org.apache.maven.model.Model readMavenModel(File pomFile, IProgressMonitor progressMonitor)
127+
throws CoreException {
116128
File baseDir = pomFile.isDirectory() ? pomFile : pomFile.getParentFile();
117129
Objects.requireNonNull(baseDir, "not a directory and not a parent, invalid file?");
118130
IComponentLookup lookup = containerManager.getComponentLookup(baseDir);
@@ -121,17 +133,20 @@ public org.apache.maven.model.Model readMavenModel(File pomFile) throws CoreExce
121133
if(locatePom.isEmpty()) {
122134
return null;
123135
}
124-
ModelProcessor modelProcessor = lookup.lookup(ModelProcessor.class);
125136

126137
File pom = locatePom.get();
127-
Model model;
128-
try {
129-
model = modelProcessor.read(pom, new HashMap<>(Map.of(ModelProcessor.SOURCE, new FileModelSource(pom))));
130-
} catch(IOException ex) {
131-
throw new CoreException(Status.error(ex.getMessage(), ex));
132-
}
133-
model.setPomFile(pom);
134-
return model;
138+
IMavenExecutionContext context = maven.createExecutionContext();
139+
return context.execute((IMavenExecutionContext innerContext, IProgressMonitor monitor) -> {
140+
ProjectBuilder projectBuilder = lookup.lookup(ProjectBuilder.class);
141+
142+
try {
143+
ProjectBuildingResult result = projectBuilder.build(pom, innerContext.getExecutionRequest()
144+
.getProjectBuildingRequest().setRepositorySession(innerContext.getRepositorySession()));
145+
return result.getProject().getModel();
146+
} catch(ProjectBuildingException ex) {
147+
throw new CoreException(Status.error(ex.getMessage(), ex));
148+
}
149+
}, progressMonitor);
135150
}
136151

137152
public org.apache.maven.model.Model readMavenModel(IFile pomFile) throws CoreException {

org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/LocalProjectScanner.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ private void scanFolder(File baseDir, String rootRelPath, IProgressMonitor m) th
9191
return;
9292
}
9393

94-
MavenProjectInfo projectInfo = readMavenProjectInfo(baseDir, rootRelPath, null);
94+
MavenProjectInfo projectInfo = readMavenProjectInfo(baseDir, rootRelPath, null, m);
9595
if(projectInfo != null) {
9696
addProject(projectInfo);
9797
monitor.done();
@@ -114,15 +114,16 @@ private void scanFolder(File baseDir, String rootRelPath, IProgressMonitor m) th
114114
}
115115
}
116116

117-
private MavenProjectInfo readMavenProjectInfo(File baseDir, String modulePath, MavenProjectInfo parentInfo) {
117+
private MavenProjectInfo readMavenProjectInfo(File baseDir, String modulePath, MavenProjectInfo parentInfo,
118+
IProgressMonitor progressMonitor) {
118119
try {
119120
baseDir = baseDir.getCanonicalFile();
120121

121122
if(!scannedFolders.add(baseDir)) {
122123
return null; // we already know this project
123124
//mkleint: well, if the project is first scanned standalone and later scanned via parent reference, the parent ref gets thrown away??
124125
}
125-
Model model = modelManager.readMavenModel(new File(baseDir, IMavenConstants.POM_FILE_NAME));
126+
Model model = modelManager.readMavenModel(new File(baseDir, IMavenConstants.POM_FILE_NAME), progressMonitor);
126127
if(model == null) {
127128
return null;
128129
}

org.eclipse.m2e.scm/src/org/eclipse/m2e/scm/internal/wizards/MavenProjectCheckoutJob.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
125125
for(MavenProjectInfo projectInfo : projects) {
126126
Model model = projectInfo.getModel();
127127
if(model == null) {
128-
model = modelManager.readMavenModel(projectInfo.getPomFile());
128+
model = modelManager.readMavenModel(projectInfo.getPomFile(), null);
129129
projectInfo.setModel(model);
130130
}
131131

org.eclipse.m2e.tests.common/src/org/eclipse/m2e/tests/common/AbstractMavenProjectTestCase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ protected IProject[] importProjects(String basedir, String[] pomNames, ResolverC
496496
final List<MavenProjectInfo> projectInfos = new ArrayList<>();
497497
for(String pomName : pomNames) {
498498
File pomFile = new File(dst, pomName);
499-
Model model = mavenModelManager.readMavenModel(pomFile);
499+
Model model = mavenModelManager.readMavenModel(pomFile, null);
500500
MavenProjectInfo projectInfo = new MavenProjectInfo(pomName, pomFile, model, null);
501501
setBasedirRename(projectInfo);
502502
projectInfos.add(projectInfo);
@@ -562,7 +562,7 @@ protected IProject importProject(String projectName, String projectLocation,
562562
copyDir(new File(projectLocation), dir);
563563

564564
File pomFile = new File(dir, IMavenConstants.POM_FILE_NAME);
565-
Model model = MavenPlugin.getMavenModelManager().readMavenModel(pomFile);
565+
Model model = MavenPlugin.getMavenModelManager().readMavenModel(pomFile, null);
566566
final MavenProjectInfo projectInfo = new MavenProjectInfo(projectName, pomFile, model, null);
567567
setBasedirRename(projectInfo);
568568

0 commit comments

Comments
 (0)