1 package org.apache.maven.project;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.List;
23
24 import org.apache.maven.artifact.repository.ArtifactRepository;
25 import org.apache.maven.model.Model;
26 import org.apache.maven.model.building.AbstractModelBuildingListener;
27 import org.apache.maven.model.building.ModelBuildingEvent;
28 import org.apache.maven.model.building.ModelProblem.Severity;
29 import org.apache.maven.model.building.ModelProblem.Version;
30 import org.apache.maven.model.building.ModelProblemCollectorRequest;
31 import org.apache.maven.plugin.PluginManagerException;
32 import org.apache.maven.plugin.PluginResolutionException;
33 import org.apache.maven.plugin.version.PluginVersionResolutionException;
34
35
36
37
38
39
40 public class DefaultModelBuildingListener
41 extends AbstractModelBuildingListener
42 {
43
44 private MavenProject project;
45
46 private ProjectBuildingHelper projectBuildingHelper;
47
48 private ProjectBuildingRequest projectBuildingRequest;
49
50 private List<ArtifactRepository> remoteRepositories;
51
52 private List<ArtifactRepository> pluginRepositories;
53
54 public DefaultModelBuildingListener( MavenProject project, ProjectBuildingHelper projectBuildingHelper,
55 ProjectBuildingRequest projectBuildingRequest )
56 {
57 if ( project == null )
58 {
59 throw new IllegalArgumentException( "project missing" );
60 }
61 this.project = project;
62
63 if ( projectBuildingHelper == null )
64 {
65 throw new IllegalArgumentException( "project building helper missing" );
66 }
67 this.projectBuildingHelper = projectBuildingHelper;
68
69 if ( projectBuildingRequest == null )
70 {
71 throw new IllegalArgumentException( "project building request missing" );
72 }
73 this.projectBuildingRequest = projectBuildingRequest;
74 this.remoteRepositories = projectBuildingRequest.getRemoteRepositories();
75 this.pluginRepositories = projectBuildingRequest.getPluginArtifactRepositories();
76 }
77
78
79
80
81
82
83 public MavenProject getProject()
84 {
85 return project;
86 }
87
88 @Override
89 public void buildExtensionsAssembled( ModelBuildingEvent event )
90 {
91 Model model = event.getModel();
92
93 try
94 {
95 pluginRepositories =
96 projectBuildingHelper.createArtifactRepositories( model.getPluginRepositories(), pluginRepositories,
97 projectBuildingRequest );
98 }
99 catch ( Exception e )
100 {
101 event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
102 .setMessage( "Invalid plugin repository: " + e.getMessage() )
103 .setException( e ) );
104 }
105 project.setPluginArtifactRepositories( pluginRepositories );
106
107 if ( event.getRequest().isProcessPlugins() )
108 {
109 try
110 {
111 ProjectRealmCache.CacheRecord record =
112 projectBuildingHelper.createProjectRealm( project, model, projectBuildingRequest );
113
114 project.setClassRealm( record.realm );
115 project.setExtensionDependencyFilter( record.extensionArtifactFilter );
116 }
117 catch ( PluginResolutionException e )
118 {
119 event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
120 .setMessage( "Unresolveable build extension: " + e.getMessage() )
121 .setException( e ) );
122 }
123 catch ( PluginVersionResolutionException e )
124 {
125 event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
126 .setMessage( "Unresolveable build extension: " + e.getMessage() )
127 .setException( e ) );
128 }
129 catch ( PluginManagerException e )
130 {
131 event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
132 .setMessage( "Unresolveable build extension: " + e.getMessage() )
133 .setException( e ) );
134 }
135
136 projectBuildingHelper.selectProjectRealm( project );
137 }
138
139
140 try
141 {
142 remoteRepositories =
143 projectBuildingHelper.createArtifactRepositories( model.getRepositories(), remoteRepositories,
144 projectBuildingRequest );
145 }
146 catch ( Exception e )
147 {
148 event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
149 .setMessage( "Invalid artifact repository: " + e.getMessage() )
150 .setException( e ) );
151 }
152 project.setRemoteArtifactRepositories( remoteRepositories );
153 }
154
155 }