1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.dependency.analyze;
20
21 import java.util.Locale;
22
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 import org.codehaus.plexus.i18n.I18N;
35
36
37
38
39
40
41
42 @Mojo(name = "analyze-report", requiresDependencyResolution = ResolutionScope.TEST, threadSafe = true)
43 @Execute(phase = LifecyclePhase.TEST_COMPILE)
44 public class AnalyzeReportMojo extends AbstractMavenReport {
45
46
47
48
49
50 @Component
51 private ProjectDependencyAnalyzer analyzer;
52
53
54
55
56
57
58 @Parameter(property = "ignoreNonCompile", defaultValue = "false")
59 private boolean ignoreNonCompile;
60
61
62
63
64
65
66
67 @Parameter
68 private String[] usedDependencies;
69
70
71
72
73
74
75 @Parameter(property = "mdep.analyze.skip", defaultValue = "false")
76 private boolean skip;
77
78
79
80
81 @Component
82 private I18N i18n;
83
84
85
86
87
88
89 @Override
90 public void executeReport(Locale locale) throws MavenReportException {
91
92 ProjectDependencyAnalysis analysis;
93 try {
94 analysis = analyzer.analyze(project);
95
96 if (usedDependencies != null) {
97 analysis = analysis.forceDeclaredDependenciesUsage(usedDependencies);
98 }
99 } catch (ProjectDependencyAnalyzerException exception) {
100 throw new MavenReportException("Cannot analyze dependencies", exception);
101 }
102
103
104 if (ignoreNonCompile) {
105 analysis = analysis.ignoreNonCompile();
106 }
107
108
109 AnalyzeReportRenderer r = new AnalyzeReportRenderer(getSink(), i18n, locale, analysis);
110 r.render();
111 }
112
113
114
115 @Override
116 public boolean canGenerateReport() {
117 if (skip) {
118 getLog().info("Skipping plugin execution");
119 return false;
120 }
121
122
123 if ("pom".equals(project.getPackaging())) {
124 getLog().info("Skipping pom project");
125 return false;
126 }
127
128 return true;
129 }
130
131
132 @Override
133 public String getOutputName() {
134 return "dependency-analysis";
135 }
136
137
138 public String getName(Locale locale) {
139 return getI18nString(locale, "name");
140 }
141
142
143 public String getDescription(Locale locale) {
144 return getI18nString(locale, "description");
145 }
146
147
148
149
150
151
152
153
154 protected String getI18nString(Locale locale, String key) {
155 return i18n.getString("analyze-report", locale, "report.analyze." + key);
156 }
157 }