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