1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.site.render;
20
21 import java.io.File;
22 import java.io.IOException;
23
24 import org.apache.maven.archiver.MavenArchiveConfiguration;
25 import org.apache.maven.archiver.MavenArchiver;
26 import org.apache.maven.artifact.DependencyResolutionRequiredException;
27 import org.apache.maven.plugin.MojoExecutionException;
28 import org.apache.maven.plugin.MojoFailureException;
29 import org.apache.maven.plugins.annotations.Component;
30 import org.apache.maven.plugins.annotations.LifecyclePhase;
31 import org.apache.maven.plugins.annotations.Mojo;
32 import org.apache.maven.plugins.annotations.Parameter;
33 import org.apache.maven.plugins.annotations.ResolutionScope;
34 import org.apache.maven.project.MavenProjectHelper;
35 import org.codehaus.plexus.archiver.Archiver;
36 import org.codehaus.plexus.archiver.ArchiverException;
37 import org.codehaus.plexus.archiver.jar.JarArchiver;
38 import org.codehaus.plexus.archiver.jar.ManifestException;
39
40
41
42
43
44
45
46
47
48 @Mojo(
49 name = "jar",
50 defaultPhase = LifecyclePhase.PACKAGE,
51 requiresDependencyResolution = ResolutionScope.TEST,
52 requiresReports = true)
53 public class SiteJarMojo extends SiteMojo {
54 private static final String[] DEFAULT_ARCHIVE_EXCLUDES = new String[] {};
55
56 private static final String[] DEFAULT_ARCHIVE_INCLUDES = new String[] {"**/**"};
57
58
59
60
61 @Parameter(property = "project.build.directory", required = true)
62 private String jarOutputDirectory;
63
64
65
66
67
68 @Parameter(property = "project.build.finalName", required = true)
69 private String finalName;
70
71
72
73
74 @Component
75 private MavenProjectHelper projectHelper;
76
77
78
79
80 @Parameter(property = "site.attach", defaultValue = "true")
81 private boolean attach;
82
83
84
85
86
87
88 @Component(role = Archiver.class, hint = "jar")
89 private JarArchiver jarArchiver;
90
91
92
93
94
95
96
97 @Parameter
98 private MavenArchiveConfiguration archive = new MavenArchiveConfiguration();
99
100
101
102
103
104
105
106 @Parameter
107 private String[] archiveIncludes;
108
109
110
111
112
113
114
115 @Parameter
116 private String[] archiveExcludes;
117
118
119
120
121
122
123
124
125 @Parameter(defaultValue = "${project.build.outputTimestamp}")
126 private String outputTimestamp;
127
128
129
130
131 public void execute() throws MojoExecutionException, MojoFailureException {
132 if (skip) {
133 getLog().info("maven.site.skip = true: Skipping jar generation");
134 return;
135 }
136
137 super.execute();
138
139 try {
140 File outputFile =
141 createArchive(outputDirectory, finalName + "-" + getClassifier() + "." + getArtifactType());
142
143 if (attach) {
144 projectHelper.attachArtifact(project, getArtifactType(), getClassifier(), outputFile);
145 } else {
146 getLog().info("NOT adding site jar to the list of attached artifacts.");
147 }
148 } catch (ArchiverException | IOException | ManifestException | DependencyResolutionRequiredException e) {
149 throw new MojoExecutionException("Error while creating archive.", e);
150 }
151 }
152
153 protected String getArtifactType() {
154 return "jar";
155 }
156
157 protected String getClassifier() {
158 return "site";
159 }
160
161
162
163
164
165
166
167
168
169
170
171
172 private File createArchive(File siteDirectory, String jarFilename)
173 throws ArchiverException, IOException, ManifestException, DependencyResolutionRequiredException {
174 File siteJar = new File(jarOutputDirectory, jarFilename);
175
176 MavenArchiver archiver = new MavenArchiver();
177 archiver.setCreatedBy("Maven Site Plugin", "org.apache.maven.plugins", "maven-site-plugin");
178
179 archiver.setArchiver(this.jarArchiver);
180
181 archiver.setOutputFile(siteJar);
182
183
184 archiver.configureReproducibleBuild(outputTimestamp);
185
186 if (!siteDirectory.isDirectory()) {
187 getLog().warn("JAR will be empty - no content was marked for inclusion!");
188 } else {
189 archiver.getArchiver().addDirectory(siteDirectory, getArchiveIncludes(), getArchiveExcludes());
190 }
191
192 archiver.createArchive(getSession(), getProject(), archive);
193
194 return siteJar;
195 }
196
197 private String[] getArchiveIncludes() {
198 if (this.archiveIncludes != null && this.archiveIncludes.length > 0) {
199 return this.archiveIncludes;
200 }
201
202 return DEFAULT_ARCHIVE_INCLUDES;
203 }
204
205 private String[] getArchiveExcludes() {
206 if (this.archiveExcludes != null && this.archiveExcludes.length > 0) {
207 return this.archiveExcludes;
208 }
209 return DEFAULT_ARCHIVE_EXCLUDES;
210 }
211 }