|
16 | 16 |
|
17 | 17 | package org.springframework.boot.build;
|
18 | 18 |
|
| 19 | +import java.io.File; |
19 | 20 | import java.util.Arrays;
|
20 | 21 | import java.util.Collections;
|
21 | 22 | import java.util.List;
|
22 | 23 | import java.util.Map;
|
23 | 24 | import java.util.Set;
|
24 | 25 | import java.util.TreeMap;
|
25 | 26 | import java.util.stream.Collectors;
|
| 27 | +import java.util.stream.Stream; |
26 | 28 |
|
27 | 29 | import io.spring.javaformat.gradle.SpringJavaFormatPlugin;
|
28 | 30 | import io.spring.javaformat.gradle.tasks.CheckFormat;
|
29 | 31 | import io.spring.javaformat.gradle.tasks.Format;
|
| 32 | +import org.gradle.api.Action; |
| 33 | +import org.gradle.api.GradleException; |
30 | 34 | import org.gradle.api.JavaVersion;
|
31 | 35 | import org.gradle.api.Project;
|
| 36 | +import org.gradle.api.Task; |
32 | 37 | import org.gradle.api.artifacts.Configuration;
|
33 | 38 | import org.gradle.api.artifacts.ConfigurationContainer;
|
34 | 39 | import org.gradle.api.artifacts.Dependency;
|
35 | 40 | import org.gradle.api.artifacts.DependencySet;
|
| 41 | +import org.gradle.api.file.FileTree; |
36 | 42 | import org.gradle.api.plugins.JavaBasePlugin;
|
37 | 43 | import org.gradle.api.plugins.JavaPlugin;
|
38 | 44 | import org.gradle.api.plugins.JavaPluginExtension;
|
@@ -178,7 +184,10 @@ private boolean isCi() {
|
178 | 184 | }
|
179 | 185 |
|
180 | 186 | private void configureJavadocConventions(Project project) {
|
181 |
| - project.getTasks().withType(Javadoc.class, (javadoc) -> javadoc.getOptions().source("1.8").encoding("UTF-8")); |
| 187 | + project.getTasks().withType(Javadoc.class, (javadoc) -> { |
| 188 | + javadoc.getOptions().source("1.8").encoding("UTF-8"); |
| 189 | + javadoc.doFirst(new VerifyPackageInfo()); |
| 190 | + }); |
182 | 191 | }
|
183 | 192 |
|
184 | 193 | private void configureJavaConventions(Project project) {
|
@@ -264,4 +273,22 @@ private void createProhibitedDependenciesCheck(Configuration classpath, Project
|
264 | 273 | project.getTasks().getByName(JavaBasePlugin.CHECK_TASK_NAME).dependsOn(checkClasspathForProhibitedDependencies);
|
265 | 274 | }
|
266 | 275 |
|
| 276 | + private static final class VerifyPackageInfo implements Action<Task> { |
| 277 | + |
| 278 | + @Override |
| 279 | + public void execute(Task javadoc) { |
| 280 | + FileTree source = ((Javadoc) javadoc).getSource(); |
| 281 | + Stream<File> dirs = source.getFiles().stream().map((file) -> file.getParentFile()).distinct(); |
| 282 | + Set<File> missingPackageInfo = dirs.map((file) -> new File(file, "package-info.java")) |
| 283 | + .filter((packageInfo) -> !packageInfo.isFile()).collect(Collectors.toSet()); |
| 284 | + if (!missingPackageInfo.isEmpty()) { |
| 285 | + StringBuilder message = new StringBuilder( |
| 286 | + "A package-info.java file was missing from the following directories:\n"); |
| 287 | + missingPackageInfo.forEach((packageInfo) -> message.append("\t" + packageInfo.getParentFile() + "\n")); |
| 288 | + throw new GradleException(message.toString()); |
| 289 | + } |
| 290 | + } |
| 291 | + |
| 292 | + } |
| 293 | + |
267 | 294 | }
|
0 commit comments