in src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java [2014:2173]
private Collection<ArtifactInfo> generateJavadoc(
final ApisJarContext ctx,
final String regionName,
final JavadocLinks links,
final File javadocDir,
final RegionSupport regionSupport,
final boolean useDependencies)
throws MojoExecutionException {
javadocDir.mkdirs();
final Collection<ArtifactInfo> usedInfos = new ArrayList<>();
final List<String> sourceDirectories = new ArrayList<>();
final Set<String> javadocPackages = new HashSet<>();
for (final ArtifactInfo info : ctx.getArtifactInfos(regionName, useDependencies)) {
boolean addDirectory = false;
for (final Clause clause : info.getUsedExportedPackages(regionName)) {
if (!ctx.getPackagesWithoutSources().contains(clause.getName())
&& !links.getLinkedPackages().contains(clause.getName())) {
addDirectory = true;
javadocPackages.add(clause.getName());
}
}
if (addDirectory && info.getSourceDirectory() != null) {
usedInfos.add(info);
sourceDirectories.add(info.getSourceDirectory().getAbsolutePath());
}
}
if (javadocPackages.isEmpty()) {
return Collections.emptyList();
}
// handle additional packages
if (!useDependencies) {
for (final Artifact artifact : ApisUtil.getAdditionalJavadocArtifacts(ctx, regionName)) {
final boolean infoExists = ctx.getArtifactInfo(artifact.getId()) != null;
final ArtifactInfo info =
infoExists ? ctx.getArtifactInfo(artifact.getId()) : ctx.addArtifactInfo(artifact);
final Set<Clause> exportedPackages =
regionSupport.getAllPublicPackages(ctx, artifact, getArtifactFile(artifact.getId()));
final Iterator<Clause> iter = exportedPackages.iterator();
final Set<String> exportedPackageNames = new LinkedHashSet<>();
while (iter.hasNext()) {
final Clause c = iter.next();
if (javadocPackages.contains(c.getName())) {
iter.remove();
} else {
javadocPackages.add(c.getName());
exportedPackageNames.add(c.getName());
}
}
if (!exportedPackages.isEmpty()) {
info.setUsedExportedPackages(regionName, exportedPackages, "");
if (!infoExists) {
info.setUsedExportedPackages(exportedPackageNames);
info.setSourceDirectory(new File(
ctx.getDeflatedSourcesDir(), info.getId().toMvnName()));
}
usedInfos.add(info);
sourceDirectories.add(info.getSourceDirectory().getAbsolutePath());
}
}
} else {
final Collection<ArtifactInfo> infos = ctx.getArtifactInfos(regionName, true);
for (final ArtifactInfo i : ctx.getArtifactInfos(regionName, false)) {
if (!infos.contains(i)) {
boolean addDirectory = false;
for (final Clause clause : i.getUsedExportedPackages(regionName)) {
if (!ctx.getPackagesWithoutSources().contains(clause.getName())
&& !links.getLinkedPackages().contains(clause.getName())) {
addDirectory = true;
}
}
if (addDirectory && i.getSourceDirectory() != null) {
sourceDirectories.add(i.getSourceDirectory().getAbsolutePath());
}
}
}
}
final JavadocExecutor javadocExecutor = new JavadocExecutor(javadocDir.getParentFile())
.addArgument("-public")
.addArgument("-encoding", false)
.addArgument("UTF-8")
.addArgument("-charset", false)
.addArgument("UTF-8")
.addArgument("-docencoding", false)
.addArgument("UTF-8")
.addArgument("-d", false)
.addArgument(javadocDir.getAbsolutePath())
.addArgument("-sourcepath", false)
.addArgument(String.join(File.pathSeparator, sourceDirectories));
javadocExecutor
.addArgument("-source", false)
.addArgument(ctx.getConfig().getJavadocSourceLevel());
final String versionSuffix = ctx.getConfig().getApiVersion() != null
? ctx.getConfig().getApiVersion()
: ctx.getFeatureId().getVersion();
if (!StringUtils.isBlank(project.getName())) {
javadocExecutor
.addArgument("-doctitle", false)
.addQuotedArgument(project.getName().trim().concat(" ").concat(versionSuffix));
}
if (!StringUtils.isBlank(project.getDescription())) {
javadocExecutor
.addArgument("-windowtitle", false)
.addQuotedArgument(
project.getDescription().trim().concat(" ").concat(versionSuffix));
}
if (!StringUtils.isBlank(project.getInceptionYear())
&& project.getOrganization() != null
&& !StringUtils.isBlank(project.getOrganization().getName())) {
javadocExecutor
.addArgument("-bottom", false)
.addQuotedArgument(String.format(
"Copyright © %s - %s %s. All Rights Reserved",
project.getInceptionYear().trim(),
Calendar.getInstance().get(Calendar.YEAR),
project.getOrganization().getName().trim()));
}
if (!links.getJavadocLinks().isEmpty()) {
javadocExecutor.addArguments("-link", links.getJavadocLinks());
}
// classpath
final Collection<String> classpath =
ApisUtil.getJavadocClassPath(getLog(), repositorySystem, mavenSession, ctx, regionName);
if (!classpath.isEmpty()) {
javadocExecutor.addArgument("-classpath", false).addArgument(classpath, File.pathSeparator);
}
// turn off doclint
javadocExecutor.addArgument("-Xdoclint:none");
javadocExecutor.addArgument("--allow-script-in-comments");
if (!this.javadocIndex) {
javadocExecutor.addArgument("-noindex");
}
if (!this.javadocTree) {
javadocExecutor.addArgument("-notree");
}
// list packages
javadocExecutor.addArguments(javadocPackages);
javadocExecutor.execute(javadocDir, getLog(), this.ignoreJavadocErrors);
return usedInfos;
}