1 package org.apache.maven.plugins.enforcer;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.List;
25
26 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
27 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
28 import org.apache.maven.execution.MavenSession;
29 import org.apache.maven.model.Model;
30 import org.apache.maven.model.Repository;
31 import org.apache.maven.plugin.logging.Log;
32 import org.apache.maven.project.MavenProject;
33 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
34 import org.codehaus.plexus.util.StringUtils;
35
36
37
38
39
40
41 public class RequireNoRepositories
42 extends AbstractNonCacheableEnforcerRule
43 {
44 private static final String VERSION = " version:";
45
46
47
48
49
50
51 private boolean banRepositories = true;
52
53
54
55
56
57
58 private boolean banPluginRepositories = true;
59
60
61
62
63
64
65 private List<String> allowedRepositories = Collections.emptyList();
66
67
68
69
70
71
72 private List<String> allowedPluginRepositories = Collections.emptyList();
73
74
75
76
77
78
79 private boolean allowSnapshotRepositories = false;
80
81
82
83
84
85
86 private boolean allowSnapshotPluginRepositories = false;
87
88 public final void setBanRepositories( boolean banRepositories )
89 {
90 this.banRepositories = banRepositories;
91 }
92
93 public final void setBanPluginRepositories( boolean banPluginRepositories )
94 {
95 this.banPluginRepositories = banPluginRepositories;
96 }
97
98 public final void setAllowedRepositories( List<String> allowedRepositories )
99 {
100 this.allowedRepositories = allowedRepositories;
101 }
102
103 public final void setAllowedPluginRepositories( List<String> allowedPluginRepositories )
104 {
105 this.allowedPluginRepositories = allowedPluginRepositories;
106 }
107
108 public final void setAllowSnapshotRepositories( boolean allowSnapshotRepositories )
109 {
110 this.allowSnapshotRepositories = allowSnapshotRepositories;
111 }
112
113 public final void setAllowSnapshotPluginRepositories( boolean allowSnapshotPluginRepositories )
114 {
115 this.allowSnapshotPluginRepositories = allowSnapshotPluginRepositories;
116 }
117
118 private Log logger;
119
120 @Override
121 public void execute( EnforcerRuleHelper helper )
122 throws EnforcerRuleException
123 {
124 logger = helper.getLog();
125
126 MavenSession session;
127 try
128 {
129 session = (MavenSession) helper.evaluate( "${session}" );
130
131 List<MavenProject> sortedProjects = session.getProjectDependencyGraph().getSortedProjects();
132
133 List<Model> models = new ArrayList<Model>();
134 for ( MavenProject mavenProject : sortedProjects )
135 {
136 logger.debug( "Scanning project: " + mavenProject.getGroupId() + ":" + mavenProject.getArtifactId()
137 + VERSION + mavenProject.getVersion() );
138 models.add( mavenProject.getOriginalModel() );
139 }
140
141 List<Model> badModels = new ArrayList<Model>();
142
143 StringBuilder newMsg = new StringBuilder();
144 newMsg.append( "Some poms have repositories defined:" + System.lineSeparator() );
145
146 for ( Model model : models )
147 {
148 if ( banRepositories )
149 {
150 List<Repository> repos = model.getRepositories();
151 if ( repos != null && !repos.isEmpty() )
152 {
153 List<String> bannedRepos =
154 findBannedRepositories( repos, allowedRepositories, allowSnapshotRepositories );
155 if ( !bannedRepos.isEmpty() )
156 {
157 badModels.add( model );
158 newMsg.append(
159 model.getGroupId() + ":" + model.getArtifactId() + VERSION + model.getVersion()
160 + " has repositories " + bannedRepos );
161 }
162 }
163 }
164 if ( banPluginRepositories )
165 {
166 List<Repository> repos = model.getPluginRepositories();
167 if ( repos != null && !repos.isEmpty() )
168 {
169 List<String> bannedRepos =
170 findBannedRepositories( repos, allowedPluginRepositories, allowSnapshotPluginRepositories );
171 if ( !bannedRepos.isEmpty() )
172 {
173 badModels.add( model );
174 newMsg.append(
175 model.getGroupId() + ":" + model.getArtifactId() + VERSION + model.getVersion()
176 + " has plugin repositories " + bannedRepos );
177 }
178 }
179 }
180 }
181
182
183
184 if ( !badModels.isEmpty() )
185 {
186 String message = getMessage();
187 if ( StringUtils.isNotEmpty( message ) )
188 {
189 newMsg.append( message );
190 }
191
192 throw new EnforcerRuleException( newMsg.toString() );
193 }
194
195 }
196 catch ( ExpressionEvaluationException e )
197 {
198 throw new EnforcerRuleException( e.getLocalizedMessage() );
199 }
200 }
201
202
203
204
205
206
207
208
209 private static List<String> findBannedRepositories( List<Repository> repos, List<String> allowedRepos,
210 boolean allowSnapshots )
211 {
212 List<String> bannedRepos = new ArrayList<String>( allowedRepos.size() );
213 for ( Repository r : repos )
214 {
215 if ( !allowedRepos.contains( r.getId() ) )
216 {
217 if ( !allowSnapshots || r.getReleases() == null || r.getReleases().isEnabled() )
218 {
219
220
221
222
223 bannedRepos.add( r.getId() );
224 }
225 }
226 }
227 return bannedRepos;
228 }
229 }