1 package org.apache.maven.plugins.dependency.analyze;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.doxia.sink.Sink;
23 import org.apache.maven.doxia.siterenderer.Renderer;
24 import org.apache.maven.plugins.annotations.Component;
25 import org.apache.maven.plugins.annotations.Execute;
26 import org.apache.maven.plugins.annotations.LifecyclePhase;
27 import org.apache.maven.plugins.annotations.Mojo;
28 import org.apache.maven.plugins.annotations.Parameter;
29 import org.apache.maven.plugins.annotations.ResolutionScope;
30 import org.apache.maven.project.MavenProject;
31 import org.apache.maven.reporting.AbstractMavenReport;
32 import org.apache.maven.reporting.MavenReportException;
33 import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalysis;
34 import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzer;
35 import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzerException;
36
37 import java.io.File;
38 import java.util.Locale;
39 import java.util.ResourceBundle;
40
41
42
43
44
45
46
47 @Mojo( name = "analyze-report", requiresDependencyResolution = ResolutionScope.TEST, threadSafe = true )
48 @Execute( phase = LifecyclePhase.TEST_COMPILE )
49 public class AnalyzeReportMojo
50 extends AbstractMavenReport
51 {
52
53
54
55
56
57 @Parameter( defaultValue = "${project}", readonly = true, required = true )
58 private MavenProject project;
59
60
61
62
63 @Component
64 private ProjectDependencyAnalyzer analyzer;
65
66
67
68
69 @Component
70 private Renderer siteRenderer;
71
72
73
74
75
76
77 @Parameter( defaultValue = "${project.build.directory}", readonly = true )
78 private File outputDirectory;
79
80
81
82
83
84
85 @Parameter( property = "ignoreNonCompile", defaultValue = "false" )
86 private boolean ignoreNonCompile;
87
88
89
90
91
92
93
94 @Parameter
95 private String[] usedDependencies;
96
97
98
99
100
101
102 @Parameter( property = "mdep.analyze.skip", defaultValue = "false" )
103 private boolean skip;
104
105
106
107
108
109
110 @Override
111 public void executeReport( Locale locale )
112 throws MavenReportException
113 {
114 if ( skip )
115 {
116 getLog().info( "Skipping plugin execution" );
117 return;
118 }
119
120
121 if ( "pom".equals( project.getPackaging() ) )
122 {
123 getLog().info( "Skipping pom project" );
124 return;
125 }
126
127 if ( outputDirectory == null || !outputDirectory.exists() )
128 {
129 getLog().info( "Skipping project with no Target directory" );
130 return;
131 }
132
133
134 ProjectDependencyAnalysis analysis;
135 try
136 {
137 analysis = analyzer.analyze( project );
138
139 if ( usedDependencies != null )
140 {
141 analysis = analysis.forceDeclaredDependenciesUsage( usedDependencies );
142 }
143 }
144 catch ( ProjectDependencyAnalyzerException exception )
145 {
146 throw new MavenReportException( "Cannot analyze dependencies", exception );
147 }
148
149
150 if ( ignoreNonCompile )
151 {
152 analysis = analysis.ignoreNonCompile();
153 }
154
155
156 Sink sink = getSink();
157 ResourceBundle bundle = getBundle( locale );
158
159
160 AnalyzeReportView analyzethis = new AnalyzeReportView();
161 analyzethis.generateReport( analysis, sink, bundle );
162 }
163
164
165
166
167
168
169 @Override
170 public String getOutputName()
171 {
172 return "dependency-analysis";
173 }
174
175
176
177
178 @Override
179 public String getName( Locale locale )
180 {
181 return getBundle( locale ).getString( "analyze.report.name" );
182 }
183
184
185
186
187 @Override
188 public String getDescription( Locale locale )
189 {
190 return getBundle( locale ).getString( "analyze.report.description" );
191 }
192
193
194
195
196
197
198 @Override
199 protected MavenProject getProject()
200 {
201 return project;
202 }
203
204
205
206
207 @Override
208 protected String getOutputDirectory()
209 {
210 getLog().info( outputDirectory.toString() );
211
212 return outputDirectory.toString();
213 }
214
215
216
217
218 @Override
219 protected Renderer getSiteRenderer()
220 {
221 return siteRenderer;
222 }
223
224
225
226
227
228
229
230 protected ResourceBundle getBundle( Locale locale )
231 {
232 return ResourceBundle.getBundle( "analyze-report", locale, this.getClass().getClassLoader() );
233 }
234 }