1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.project;
20
21 import java.util.List;
22 import java.util.Objects;
23 import org.apache.maven.artifact.repository.ArtifactRepository;
24 import org.apache.maven.model.Model;
25 import org.apache.maven.model.building.AbstractModelBuildingListener;
26 import org.apache.maven.model.building.ModelBuildingEvent;
27 import org.apache.maven.model.building.ModelProblem.Severity;
28 import org.apache.maven.model.building.ModelProblem.Version;
29 import org.apache.maven.model.building.ModelProblemCollectorRequest;
30 import org.apache.maven.plugin.PluginManagerException;
31 import org.apache.maven.plugin.PluginResolutionException;
32 import org.apache.maven.plugin.version.PluginVersionResolutionException;
33
34
35
36
37
38
39 public class DefaultModelBuildingListener extends AbstractModelBuildingListener {
40
41 private MavenProject project;
42
43 private ProjectBuildingHelper projectBuildingHelper;
44
45 private ProjectBuildingRequest projectBuildingRequest;
46
47 private List<ArtifactRepository> remoteRepositories;
48
49 private List<ArtifactRepository> pluginRepositories;
50
51 public DefaultModelBuildingListener(
52 MavenProject project,
53 ProjectBuildingHelper projectBuildingHelper,
54 ProjectBuildingRequest projectBuildingRequest) {
55 this.project = Objects.requireNonNull(project, "project cannot be null");
56 this.projectBuildingHelper =
57 Objects.requireNonNull(projectBuildingHelper, "projectBuildingHelper cannot be null");
58 this.projectBuildingRequest =
59 Objects.requireNonNull(projectBuildingRequest, "projectBuildingRequest cannot be null");
60 this.remoteRepositories = projectBuildingRequest.getRemoteRepositories();
61 this.pluginRepositories = projectBuildingRequest.getPluginArtifactRepositories();
62 }
63
64
65
66
67
68
69 public MavenProject getProject() {
70 return project;
71 }
72
73 @Override
74 public void buildExtensionsAssembled(ModelBuildingEvent event) {
75 Model model = event.getModel();
76
77 try {
78 pluginRepositories = projectBuildingHelper.createArtifactRepositories(
79 model.getPluginRepositories(), pluginRepositories, projectBuildingRequest);
80 } catch (Exception e) {
81 event.getProblems()
82 .add(new ModelProblemCollectorRequest(Severity.ERROR, Version.BASE)
83 .setMessage("Invalid plugin repository: " + e.getMessage())
84 .setException(e));
85 }
86 project.setPluginArtifactRepositories(pluginRepositories);
87
88 if (event.getRequest().isProcessPlugins()) {
89 try {
90 ProjectRealmCache.CacheRecord record =
91 projectBuildingHelper.createProjectRealm(project, model, projectBuildingRequest);
92
93 project.setClassRealm(record.getRealm());
94 project.setExtensionDependencyFilter(record.getExtensionArtifactFilter());
95 } catch (PluginResolutionException | PluginManagerException | PluginVersionResolutionException e) {
96 event.getProblems()
97 .add(new ModelProblemCollectorRequest(Severity.ERROR, Version.BASE)
98 .setMessage("Unresolvable build extension: " + e.getMessage())
99 .setException(e));
100 }
101
102 projectBuildingHelper.selectProjectRealm(project);
103 }
104
105
106 try {
107 remoteRepositories = projectBuildingHelper.createArtifactRepositories(
108 model.getRepositories(), remoteRepositories, projectBuildingRequest);
109 } catch (Exception e) {
110 event.getProblems()
111 .add(new ModelProblemCollectorRequest(Severity.ERROR, Version.BASE)
112 .setMessage("Invalid artifact repository: " + e.getMessage())
113 .setException(e));
114 }
115 project.setRemoteArtifactRepositories(remoteRepositories);
116 }
117 }