You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2019/10/28 07:03:41 UTC
[sling-slingfeature-maven-plugin] branch master updated: SLING-8806
: Provide a report for api generation
This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-slingfeature-maven-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new 68ef25f SLING-8806 : Provide a report for api generation
68ef25f is described below
commit 68ef25ff09f81cff3c7d333ff2c16f74f3493c44
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Mon Oct 28 08:03:29 2019 +0100
SLING-8806 : Provide a report for api generation
---
.../sling/feature/maven/mojos/ApisJarMojo.java | 67 ++++++++++++++++++++--
1 file changed, 63 insertions(+), 4 deletions(-)
diff --git a/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java b/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
index 535600d..1b9e48a 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
@@ -17,6 +17,7 @@
package org.apache.sling.feature.maven.mojos;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
@@ -24,6 +25,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
+import java.util.Collections;
import java.util.Enumeration;
import java.util.Formatter;
import java.util.HashSet;
@@ -36,6 +38,7 @@ import java.util.StringTokenizer;
import java.util.TreeSet;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
+import java.util.jar.JarInputStream;
import java.util.jar.Manifest;
import java.util.regex.Pattern;
import java.util.stream.Stream;
@@ -354,16 +357,21 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo implements Artifac
File apisDir = new File(regionDir, APIS);
List<String> nodeTypes = recollect(featureDir, deflatedBinDir, apiRegion, apisDir);
- createArchive(feature.getId(), apisDir, apiRegion, APIS, nodeTypes, this.apiResources);
+ final File apiJar = createArchive(feature.getId(), apisDir, apiRegion, APIS, nodeTypes, this.apiResources);
+ report(apiJar, APIS, apiRegion, "class");
File sourcesDir = new File(regionDir, SOURCES);
recollect(featureDir, deflatedSourcesDir, apiRegion, sourcesDir);
- createArchive(feature.getId(), sourcesDir, apiRegion, SOURCES, null, this.apiSourceResources);
+ final File sourceJar = createArchive(feature.getId(), sourcesDir, apiRegion, SOURCES, null,
+ this.apiSourceResources);
+ report(sourceJar, SOURCES, apiRegion, "java");
if (sourcesDir.list().length > 0) {
File javadocsDir = new File(regionDir, JAVADOC);
generateJavadoc(sourcesDir, javadocsDir, javadocClasspath);
- createArchive(feature.getId(), javadocsDir, apiRegion, JAVADOC, null, this.apiJavadocResources);
+ final File javadocJar = createArchive(feature.getId(), javadocsDir, apiRegion, JAVADOC, null,
+ this.apiJavadocResources);
+ report(javadocJar, JAVADOC, apiRegion, "html");
} else {
getLog().warn("Javadoc JAR will NOT be generated - sources directory was empty!");
}
@@ -373,6 +381,28 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo implements Artifac
.a(" succesfully created").toString());
}
+ private void report(final File jarFile, final String apiType, final ApiRegion apiRegion, final String extension) throws MojoExecutionException {
+ final List<String> packages = getPackages(jarFile, extension);
+ final List<String> missing = new ArrayList<>();
+ for (final String exp : apiRegion.getApis()) {
+ if (!packages.remove(exp)) {
+ missing.add(exp);
+ }
+ }
+ if (missing.isEmpty() && packages.isEmpty()) {
+ getLog().info("Verified " + apiType + " jar for region " + apiRegion.getName());
+ } else {
+ Collections.sort(missing);
+ getLog().info(apiType + " jar for region " + apiRegion.getName() + " has errors:");
+ for (final String m : missing) {
+ getLog().info("- Missing package " + m);
+ }
+ for (final String m : packages) {
+ getLog().info("- Wrong package " + m);
+ }
+ }
+ }
+
private File getArtifactFile(final ArtifactProvider artifactProvider, final ArtifactId artifactId)
throws MojoExecutionException {
final URL artifactURL = retrieve(artifactProvider, artifactId);
@@ -960,7 +990,7 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo implements Artifac
return nodeTypes;
}
- private void createArchive(ArtifactId featureId, File collectedDir, ApiRegion apiRegion, String classifier,
+ private File createArchive(ArtifactId featureId, File collectedDir, ApiRegion apiRegion, String classifier,
List<String> nodeTypes, List<File> resources) throws MojoExecutionException {
DirectoryScanner directoryScanner = new DirectoryScanner();
directoryScanner.setBasedir(collectedDir);
@@ -1035,6 +1065,8 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo implements Artifac
+ target
+" archive", e);
}
+
+ return target;
}
private void generateJavadoc(File sourcesDir, File javadocDir, Set<String> javadocClasspath)
@@ -1130,6 +1162,10 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo implements Artifac
filteringApis.add(packageToScannerFiler(api));
}
+ public Set<String> getApis() {
+ return apis;
+ }
+
public boolean containsApi(String api) {
return apis.contains(api);
}
@@ -1222,4 +1258,27 @@ public class ApisJarMojo extends AbstractIncludingFeatureMojo implements Artifac
public final List<ApiRegion> regions = new ArrayList<>();
}
+
+ private List<String> getPackages(final File file, final String extension) throws MojoExecutionException {
+ final String postfix = ".".concat(extension);
+ final Set<String> packages = new HashSet<>();
+ try (final JarInputStream jis = new JarInputStream(new FileInputStream(file))) {
+ JarEntry entry;
+ while ((entry = jis.getNextJarEntry()) != null) {
+ if (entry.getName().endsWith(postfix)) {
+ final int lastPos = entry.getName().lastIndexOf('/');
+ if (lastPos != -1) {
+ packages.add(entry.getName().substring(0, lastPos).replace('/', '.'));
+ }
+ }
+ jis.closeEntry();
+ }
+ } catch (final IOException ioe) {
+ throw new MojoExecutionException("Unable to scan file " + file + " : " + ioe.getMessage());
+ }
+ final List<String> sorted = new ArrayList<>(packages);
+ Collections.sort(sorted);
+ return sorted;
+ }
}
+