| @@ -54,9 +54,9 @@ attributes.</p> | |||
| <td align="center" valign="top"><b>Required</b></td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">classname</td> | |||
| <td valign="top"><a name="classname">classname</a></td> | |||
| <td valign="top">the Java class to execute.</td> | |||
| <td align="center" valign="top">Either <tt>jar</tt> or <tt>classname</tt></td> | |||
| <td align="center" valign="top">Either <tt>jar</tt>, <tt>classname</tt> or <tt>module</tt></td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">jar</td> | |||
| @@ -64,7 +64,7 @@ attributes.</p> | |||
| Main-Class entry in the manifest). Fork must be set to true if this option is selected. | |||
| See notes below for more details. | |||
| </td> | |||
| <td align="center" valign="top">Either <tt>jar</tt> or <tt>classname</tt></td> | |||
| <td align="center" valign="top">Either <tt>jar</tt>, <tt>classname</tt> or <tt>module</tt></td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">args</td> | |||
| @@ -119,6 +119,25 @@ attributes.</p> | |||
| (ignored if fork is disabled)</td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">module</td> | |||
| <td valign="top">The initial or main module to resolve. To specify | |||
| the module main class use the <a href="#classname">classname</a> attribute. | |||
| Fork must be set to true if this option is selected.<em>since Ant 1.9.7</em></td> | |||
| <td align="center" valign="top">Either <tt>jar</tt>, <tt>classname</tt> or <tt>module</tt></td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">modulepath</td> | |||
| <td valign="top">Specify where to find application modules. A list of directories of modules, module files or exploded modules.<em>since Ant 1.9.7</em></td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">modulepathref</td> | |||
| <td valign="top">The modulepath to use, given as <a | |||
| href="../using.html#references">reference</a> to a PATH defined elsewhere. | |||
| <em>since Ant 1.9.7</em></td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">failonerror</td> | |||
| <td valign="top">Stop the buildprocess if the command exits with a | |||
| @@ -312,6 +331,18 @@ error and would mean the build exits. | |||
| , then <code><java></code> <b>must</b> return 0 otherwise the build will | |||
| exit, as the class was run by the build JVM.</p> | |||
| <a name="modulepath"><h4>modulepath</h4> | |||
| <i><b>Since Ant 1.9.7</b></i> | |||
| <p><code>Java</code>'s <i>modulepath</i> attribute is a <a | |||
| href="../using.html#path">PATH like structure</a> and can also be set via a nested | |||
| <i>modulepath</i> element.</p> | |||
| <a name="upgrademodulepath"><h4>upgrademodulepath</h4> | |||
| <i><b>Since Ant 1.9.7</b></i> | |||
| <p>The location of modules that replace upgradeable modules in the runtime image | |||
| can be specified using this <a href="../using.html#path">PATH like structure</a>.</p> | |||
| <h3>JAR file execution</h3> | |||
| <p>The parameter of the <tt>jar</tt> attribute is of type <tt>File</tt>; | |||
| @@ -400,6 +431,31 @@ log-prefix to <code>[java1.4]</code>. | |||
| JVM, as it takes different parameters for other JVMs, | |||
| That JVM can be started from <code><exec></code> if required.</p> | |||
| <pre> | |||
| <java | |||
| fork="true" | |||
| failonerror="true" | |||
| maxmemory="128m" | |||
| module="TestModule" | |||
| modulepath="lib:dist/test.jar"/> | |||
| </pre> | |||
| Runs the module TestModule resolved on the modulepath <tt>lib/:dist/test.jar</tt> | |||
| with a maximum memory of 128MB. Any non zero return code breaks the build. | |||
| <pre> | |||
| <java | |||
| fork="true" | |||
| failonerror="true" | |||
| maxmemory="128m" | |||
| module="TestModule" | |||
| classname="Main"> | |||
| <modulepath> | |||
| <pathelement location="lib"/> | |||
| <pathelement location="dist/test.jar"/> | |||
| </modulepath> | |||
| </java> | |||
| </pre> | |||
| Runs the class Main in module TestModule resolved on the modulepath <tt>lib/:dist/test.jar</tt> | |||
| with a maximum memory of 128MB. Any non zero return code breaks the build. | |||
| </body> | |||
| </html> | |||
| @@ -298,7 +298,7 @@ public class Java extends Task { | |||
| * Set the modulepath to be used when running the Java class. | |||
| * | |||
| * @param mp an Ant Path object containing the modulepath. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public void setModulepath(Path mp) { | |||
| createModulepath().append(mp); | |||
| @@ -308,7 +308,7 @@ public class Java extends Task { | |||
| * Add a path to the modulepath. | |||
| * | |||
| * @return created modulepath. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public Path createModulepath() { | |||
| return getCommandLine().createModulepath(getProject()).createPath(); | |||
| @@ -318,7 +318,7 @@ public class Java extends Task { | |||
| * Add a path to the upgrademodulepath. | |||
| * | |||
| * @return created upgrademodulepath. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public Path createUpgrademodulepath() { | |||
| return getCommandLine().createUpgrademodulepath(getProject()).createPath(); | |||
| @@ -379,7 +379,7 @@ public class Java extends Task { | |||
| * @param module the name of the module. | |||
| * | |||
| * @throws BuildException if the jar attribute has been set. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public void setModule(String module) throws BuildException { | |||
| if (getCommandLine().getJar() != null) { | |||
| @@ -374,7 +374,7 @@ public class CommandlineJava implements Cloneable { | |||
| /** | |||
| * Set the module to execute. | |||
| * @param module the module name. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public void setModule(final String module) { | |||
| if (executableType == null) { | |||
| @@ -404,7 +404,7 @@ public class CommandlineJava implements Cloneable { | |||
| * @return the name of the module to run or <tt>null</tt> if there is no module. | |||
| * @see #getJar() | |||
| * @see #getClassname() | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public String getModule() { | |||
| if(executableType == ExecutableType.MODULE) { | |||
| @@ -442,7 +442,7 @@ public class CommandlineJava implements Cloneable { | |||
| * Create a modulepath. | |||
| * @param p the project to use to create the path. | |||
| * @return a path to be configured. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public Path createModulepath(Project p) { | |||
| if (modulepath == null) { | |||
| @@ -455,7 +455,7 @@ public class CommandlineJava implements Cloneable { | |||
| * Create an upgrademodulepath. | |||
| * @param p the project to use to create the path. | |||
| * @return a path to be configured. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public Path createUpgrademodulepath(Project p) { | |||
| if (upgrademodulepath == null) { | |||
| @@ -672,7 +672,7 @@ public class CommandlineJava implements Cloneable { | |||
| /** | |||
| * Get the modulepath. | |||
| * @return modulepath or null. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public Path getModulepath() { | |||
| return modulepath; | |||
| @@ -681,7 +681,7 @@ public class CommandlineJava implements Cloneable { | |||
| /** | |||
| * Get the upgrademodulepath. | |||
| * @return upgrademodulepath or null. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public Path getUpgrademodulepath() { | |||
| return upgrademodulepath; | |||
| @@ -783,7 +783,7 @@ public class CommandlineJava implements Cloneable { | |||
| /** | |||
| * Determine whether the modulepath has been specified. | |||
| * @return true if the modulepath is to be used. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public boolean haveModulepath() { | |||
| Path fullClasspath = modulepath != null | |||
| @@ -795,7 +795,7 @@ public class CommandlineJava implements Cloneable { | |||
| /** | |||
| * Determine whether the upgrademodulepath has been specified. | |||
| * @return true if the upgrademodulepath is to be used. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| public boolean haveUpgrademodulepath() { | |||
| Path fullClasspath = upgrademodulepath != null | |||
| @@ -846,7 +846,7 @@ public class CommandlineJava implements Cloneable { | |||
| * @param module the module name. | |||
| * @param classname the classname or <code>null</code>. | |||
| * @return the main module with optional classname command line argument. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| private static String createModuleClassPair(final String module, final String classname) { | |||
| return classname == null ? | |||
| @@ -858,7 +858,7 @@ public class CommandlineJava implements Cloneable { | |||
| * Parses a module name from JDK 9 main module command line argument. | |||
| * @param moduleClassPair a module with optional classname or <code>null</code>. | |||
| * @return the module name or <code>null</code>. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| private static String parseModuleFromModuleClassPair(final String moduleClassPair) { | |||
| if (moduleClassPair == null) { | |||
| @@ -872,7 +872,7 @@ public class CommandlineJava implements Cloneable { | |||
| * Parses a classname from JDK 9 main module command line argument. | |||
| * @param moduleClassPair a module with optional classname or <code>null</code>. | |||
| * @return the classname or <code>null</code>. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| private static String parseClassFromModuleClassPair(final String moduleClassPair) { | |||
| if (moduleClassPair == null) { | |||
| @@ -886,7 +886,7 @@ public class CommandlineJava implements Cloneable { | |||
| /** | |||
| * Type of execution. | |||
| * @since ??? | |||
| * @since 1.9.7 | |||
| */ | |||
| private enum ExecutableType { | |||
| /** | |||