diff --git a/WHATSNEW b/WHATSNEW index 19b2c0f96..a773da1c7 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -46,6 +46,9 @@ Other changes: command line arguments that are not supported explicitly by the tasks via attributes. + * added several attributes to that support modules. + Bugzilla Report 62424 + Changes from Ant 1.10.4 TO Ant 1.10.5 ===================================== diff --git a/manual/Tasks/javadoc.html b/manual/Tasks/javadoc.html index eaebb4e7b..c818e92a4 100644 --- a/manual/Tasks/javadoc.html +++ b/manual/Tasks/javadoc.html @@ -89,8 +89,9 @@ with the exclude patterns of the packageset (and vice ve sourcepath Specify where to find source files all - At least one of the three or - nested <sourcepath>, <fileset> + At least one of the three or + nested <sourcepath>, <fileset>, + module or <packageset> or <packageset> @@ -105,6 +106,12 @@ with the exclude patterns of the packageset (and vice ve element. all + + modulenames + Comma separated list of module names -- see also + the nested module element. since Ant 1.10.6 + all + destdir Destination directory for output files @@ -500,6 +507,36 @@ with the exclude patterns of the packageset (and vice ve 1.4 No; defaults to true + + modulesourcepath + Specify where to find module source files + since Ant 1.10.6 + all + No + + + modulesourcepathref + Specify where to find module source files by reference to a PATH defined elsewhere. + since Ant 1.10.6 + all + No + + + modulepath + Specify where to find module files + since Ant 1.10.6 + all + No + + + modulepathref + Specify where to find module files by reference to a PATH defined elsewhere. + since Ant 1.10.6 + all + No +

Format of the group attribute

@@ -567,6 +604,24 @@ filesets, filelists or paths) will be passed to javadoc as source files.

Parameters
Same as for package. +

module

+

since Ant 1.10.6

+

Same as one entry in the list given by modulenames.

+ +
Parameters
+ + + + + + + + + + + +
AttributeDescriptionRequired
nameThe module nameYes
+

source

Same as one entry in the list given by sourcefiles.

@@ -786,11 +841,13 @@ target="_top">the default taglets.

-

sourcepath, classpath and bootclasspath

-

Javadoc's sourcepath, classpath and bootclasspath -attributes are path-like structure and can also be set via -nested sourcepath, classpath and bootclasspath elements -respectively.

+

sourcepath, classpath, bootclasspath, modulepath, modulesourcepath

+

Javadoc's sourcepath, classpath, +bootclasspath, modulepath, and modulesourcepath +attributes are PATH like structure +and can also be set via nested sourcepath, +classpath, bootclasspath, modulepath, +and modulesourcepath elements respectively.

arg

Since Ant 1.6

diff --git a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java index dc0887636..13b8fed37 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java +++ b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java @@ -451,11 +451,14 @@ public class Javadoc extends Task { private final List sourceFiles = new Vector<>(); private final List packageNames = new Vector<>(); private final List excludePackageNames = new Vector<>(1); + private final List moduleNames = new ArrayList<>(); private boolean author = true; private boolean version = true; private DocletInfo doclet = null; private Path classpath = null; private Path bootclasspath = null; + private Path modulePath = null; + private Path moduleSourcePath = null; private String group = null; private String packageList = null; private final List links = new Vector<>(); @@ -566,6 +569,88 @@ public class Javadoc extends Task { createSourcepath().setRefid(r); } + /** + * Specify where to find modules + * + * @param src a Path instance containing the modules. + * + * @since Ant 1.10.6 + */ + public void setModulePath(final Path mp) { + if (modulePath == null) { + modulePath = mp; + } else { + modulePath.append(mp); + } + } + + /** + * Create a path to be configured with the locations of the module + * files. + * + * @return a new Path instance to be configured by the Ant core. + * + * @since Ant 1.10.6 + */ + public Path createModulePath() { + if (modulePath == null) { + modulePath = new Path(getProject()); + } + return modulePath.createPath(); + } + + /** + * Adds a reference to a path defined elsewhere that defines the module path. + * + * @param r the reference containing the module path definition. + * + * @since Ant 1.10.6 + */ + public void setModulePathref(final Reference r) { + createModulePath().setRefid(r); + } + + /** + * Specify where to find sources for modules + * + * @param src a Path instance containing the sources for modules. + * + * @since Ant 1.10.6 + */ + public void setModuleSourcePath(final Path mp) { + if (moduleSourcePath == null) { + moduleSourcePath = mp; + } else { + moduleSourcePath.append(mp); + } + } + + /** + * Create a path to be configured with the locations of the module + * source files. + * + * @return a new Path instance to be configured by the Ant core. + * + * @since Ant 1.10.6 + */ + public Path createModuleSourcePath() { + if (moduleSourcePath == null) { + moduleSourcePath = new Path(getProject()); + } + return moduleSourcePath.createPath(); + } + + /** + * Adds a reference to a path defined elsewhere that defines the module source path. + * + * @param r the reference containing the module source path definition. + * + * @since Ant 1.10.6 + */ + public void setModuleSourcePathref(final Reference r) { + createModuleSourcePath().setRefid(r); + } + /** * Set the directory where the Javadoc output will be generated. * @@ -619,6 +704,21 @@ public class Javadoc extends Task { } } + /** + * Set the module names to be processed. + * + * @param modules a comma separated list of module names + * + * @since Ant 1.10.6 + */ + public void setModulenames(final String modules) { + for (String m : modules.split(",")) { + final PackageName mn = new PackageName(); + mn.setName(m); + addModule(mn); + } + } + /** * Add a single package to be processed. * @@ -631,6 +731,17 @@ public class Javadoc extends Task { packageNames.add(pn); } + /** + * Add a single module to be processed. + * + * @param mn the module name + * + * @since Ant 1.10.6 + */ + public void addModule(final PackageName mn) { + moduleNames.add(mn); + } + /** * Set the list of packages to be excluded. * @@ -1737,6 +1848,7 @@ public class Javadoc extends Task { doGroup(toExecute); // group attribute doGroups(toExecute); // groups attribute doDocFilesSubDirs(toExecute); // docfilessubdir attribute + doModuleArguments(toExecute); doJava14(toExecute); if (breakiterator && (doclet == null || JAVADOC_5)) { @@ -1852,9 +1964,9 @@ public class Javadoc extends Task { private void checkPackagesToDoc( final List packagesToDoc, final List sourceFilesToDoc) { if (packageList == null && packagesToDoc.isEmpty() - && sourceFilesToDoc.isEmpty()) { - throw new BuildException( - "No source files and no packages have been specified."); + && sourceFilesToDoc.isEmpty() && moduleNames.isEmpty()) { + throw new BuildException("No source files, no packages and no modules have " + + "been specified."); } } @@ -2479,6 +2591,23 @@ public class Javadoc extends Task { return fileContents; } + private void doModuleArguments(Commandline toExecute) { + if (!moduleNames.isEmpty()) { + toExecute.createArgument().setValue("--module"); + toExecute.createArgument() + .setValue(moduleNames.stream().map(PackageName::getName) + .collect(Collectors.joining(","))); + } + if (modulePath != null) { + toExecute.createArgument().setValue("--module-path"); + toExecute.createArgument().setPath(modulePath); + } + if (moduleSourcePath != null) { + toExecute.createArgument().setValue("--module-source-path"); + toExecute.createArgument().setPath(moduleSourcePath); + } + } + private class JavadocOutputStream extends LogOutputStream { JavadocOutputStream(final int level) { super(Javadoc.this, level);