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.plugins.annotations.Component;
24 import org.apache.maven.plugins.annotations.Execute;
25 import org.apache.maven.plugins.annotations.LifecyclePhase;
26 import org.apache.maven.plugins.annotations.Mojo;
27 import org.apache.maven.plugins.annotations.Parameter;
28 import org.apache.maven.plugins.annotations.ResolutionScope;
29 import org.apache.maven.reporting.AbstractMavenReport;
30 import org.apache.maven.reporting.MavenReportException;
31 import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalysis;
32 import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzer;
33 import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzerException;
34
35 import java.util.Locale;
36 import java.util.ResourceBundle;
37
38
39
40
41
42
43
44 @Mojo( name = "analyze-report", requiresDependencyResolution = ResolutionScope.TEST, threadSafe = true )
45 @Execute( phase = LifecyclePhase.TEST_COMPILE )
46 public class AnalyzeReportMojo
47 extends AbstractMavenReport
48 {
49
50
51
52
53
54 @Component
55 private ProjectDependencyAnalyzer analyzer;
56
57
58
59
60
61
62 @Parameter( property = "ignoreNonCompile", defaultValue = "false" )
63 private boolean ignoreNonCompile;
64
65
66
67
68
69
70
71 @Parameter
72 private String[] usedDependencies;
73
74
75
76
77
78
79 @Parameter( property = "mdep.analyze.skip", defaultValue = "false" )
80 private boolean skip;
81
82
83
84
85
86
87 @Override
88 public void executeReport( Locale locale )
89 throws MavenReportException
90 {
91
92 ProjectDependencyAnalysis analysis;
93 try
94 {
95 analysis = analyzer.analyze( project );
96
97 if ( usedDependencies != null )
98 {
99 analysis = analysis.forceDeclaredDependenciesUsage( usedDependencies );
100 }
101 }
102 catch ( ProjectDependencyAnalyzerException exception )
103 {
104 throw new MavenReportException( "Cannot analyze dependencies", exception );
105 }
106
107
108 if ( ignoreNonCompile )
109 {
110 analysis = analysis.ignoreNonCompile();
111 }
112
113
114 Sink sink = getSink();
115 ResourceBundle bundle = getBundle( locale );
116
117
118 AnalyzeReportView analyzethis = new AnalyzeReportView();
119 analyzethis.generateReport( analysis, sink, bundle );
120 }
121
122
123
124
125 @Override
126 public boolean canGenerateReport()
127 {
128 if ( skip )
129 {
130 getLog().info( "Skipping plugin execution" );
131 return false;
132 }
133
134
135 if ( "pom".equals( project.getPackaging() ) )
136 {
137 getLog().info( "Skipping pom project" );
138 return false;
139 }
140
141 return true;
142 }
143
144
145
146
147 @Override
148 public String getOutputName()
149 {
150 return "dependency-analysis";
151 }
152
153
154
155
156 @Override
157 public String getName( Locale locale )
158 {
159 return getBundle( locale ).getString( "analyze.report.name" );
160 }
161
162
163
164
165 @Override
166 public String getDescription( Locale locale )
167 {
168 return getBundle( locale ).getString( "analyze.report.description" );
169 }
170
171
172
173
174
175
176
177 protected ResourceBundle getBundle( Locale locale )
178 {
179 return ResourceBundle.getBundle( "analyze-report", locale, this.getClass().getClassLoader() );
180 }
181 }