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
+
+
+ Attribute |
+ Description |
+ Required |
+
+
+ name |
+ The module name |
+ Yes |
+
+
+
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);