1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugin.plugin;
20
21 import javax.lang.model.SourceVersion;
22
23 import java.io.File;
24 import java.util.Arrays;
25 import java.util.stream.Collectors;
26
27 import org.apache.maven.plugin.MojoExecutionException;
28 import org.apache.maven.plugins.annotations.Component;
29 import org.apache.maven.plugins.annotations.LifecyclePhase;
30 import org.apache.maven.plugins.annotations.Mojo;
31 import org.apache.maven.plugins.annotations.Parameter;
32 import org.apache.maven.plugins.annotations.ResolutionScope;
33 import org.apache.maven.tools.plugin.generator.GeneratorException;
34 import org.apache.maven.tools.plugin.generator.PluginHelpGenerator;
35 import org.codehaus.plexus.util.StringUtils;
36 import org.codehaus.plexus.velocity.VelocityComponent;
37
38
39
40
41
42
43
44
45 @Mojo(
46 name = "helpmojo",
47 defaultPhase = LifecyclePhase.GENERATE_SOURCES,
48 threadSafe = true,
49 requiresDependencyResolution = ResolutionScope.COMPILE)
50 public class HelpGeneratorMojo extends AbstractGeneratorMojo {
51
52
53
54 @Parameter(defaultValue = "${project.build.directory}/generated-sources/plugin")
55 protected File outputDirectory;
56
57
58
59
60
61
62
63
64
65
66
67
68 @Parameter
69 private String helpPackageName;
70
71
72
73
74 @Component
75 private VelocityComponent velocity;
76
77 String getHelpPackageName() {
78 String packageName = null;
79 if (StringUtils.isNotBlank(helpPackageName)) {
80 packageName = helpPackageName;
81 }
82
83 if (packageName == null) {
84 packageName = project.getGroupId() + "." + project.getArtifactId();
85 packageName = packageName.replace("-", "_");
86
87 String[] packageItems = packageName.split("\\.");
88 packageName =
89 Arrays.stream(packageItems).map(this::prefixSpecialCase).collect(Collectors.joining("."));
90 }
91
92 return packageName;
93 }
94
95 private String prefixSpecialCase(String name) {
96 if (SourceVersion.isKeyword(name) || !Character.isJavaIdentifierStart(name.charAt(0))) {
97 name = "_" + name;
98 }
99 return name;
100 }
101
102 @Override
103 protected void generate() throws MojoExecutionException {
104 PluginHelpGenerator pluginHelpGenerator = new PluginHelpGenerator()
105 .setMavenProject(project)
106 .setHelpPackageName(getHelpPackageName())
107 .setGoalPrefix(goalPrefix)
108 .setVelocityComponent(velocity);
109
110 try {
111 pluginHelpGenerator.execute(outputDirectory);
112 } catch (GeneratorException e) {
113 throw new MojoExecutionException(e.getMessage(), e);
114 }
115
116 if (!project.getCompileSourceRoots().contains(outputDirectory.getAbsolutePath())) {
117 project.addCompileSourceRoot(outputDirectory.getAbsolutePath());
118 }
119 }
120 }