Hi Folks, in order integrate Ant with VAJ 3.0 to automate our nightly JUnit tests I had to make a few changes to the VAJ tasks of Ant 1.5.1.
I think these changes might be useful to other people as well, so I submit this patchset (patches are against CVS). In addition to the source code patches I've also included a patch for the corresponding page of the manual to reflect the new attributes, etc. The patchset contains the following (independent) changes: 1. New "haltonerror" attribute for all three tasks Affected Files: VAJExport.java, VAJImport.java, VAJLoad.java, VAJTask.java, VAJAntTool.html The haltonerror attribute works similar to the attribute supported by the <junit> task. Using this attribute you can control if a failed execution of a vaj task should stop the build (BuildException) or only log the errors and let the build continue. This feature is useful when exporting large codebases, as VAJ responds even to "minor" errors (like the seemingly ever existing class having syntax errors or unmet dependencies ;) with an exception, bringing down the build although only a few classes could not be exported (p.ex. in vendor supplied packages, etc). 2. Fix for bogus urlencoding in VAJRemoteUtil Affected Files: VAJRemoteUtil.java In order to make a path sent to a VAJ tool servlet "URL compliant" VAJRemoteUtil replaces all backslashes by slashes, ruining DOS/Windows style paths. This breaks the <vajexport> task (at least with VAJ 3.0 and Win2000) and probably also has an impact on the <vajimport> task (not verified). I wonder why this bug hasn't shown up earlier... probably it isn't a problem in newer VAJ versions anymore. I've replaced this with real urlencoding (URLEncoder) and it works nice here. 3. Support for dynamic version specifiers in <vajload> Affected Files: VAJLocalUtil.java, VAJAntTool.html Related Bugs: #2236 As stated in "Bug" #2236 the <vajload> task only is able to load project versions based on the version name/id. I've added the ability to use "*" and "**" as version qualifiers in order to load the latest editions available. "*" loads the latest _versioned_ edition of the project that is available, "**" loads the latest edition regardless if versioned or not (thus including scratch and open editions). I guess I don't have to explain why this is useful in conjunction with automated JUnit testing ;-) 4. Base classes for Servlets changed to IBM VAJ classes Affected Files: VAJToolsServlet.java Related Bugs: #10016 This "fix" surely is problematic (see Bug) In order to work with the VAJ Remote Tool API it seems the Servlets must be extending the IBM Servlet classes (com.ibm.ivj.toolserver.servletclasses.servlet.*) instead of the usual javax.servlet.* classes. This also _is_ true for Version 3.0 (not sure about 3.02 though) which I've got here. This contradicts the issues considered in the Bug (p.ex. by Stefan, etc.): Modifying these imports doesn't break support for version 3.0, it makes it! (Making me wonder if there is any version that works with javax.servlet.* derived classes...) I've modified the import statements to reflect this, causing the obvious problem that the servlet classes won't compile anymore without the IBM libraries (but VAJLocalUtil.java won't do that either...) I see three ways to solve this problem: 1. Come up with mock classes (same interface, no-op methods) to make the compiler happy and use them during the build (I'd prefer this way) 2. Ship compiled .class files supplied by someone that has VAJ available (I'd be willing to do that _for this version_) 3. Leave it alone and let people figure it out... (surely the easiest way, but probably gives a few people - like me - a hard time...) If 3 is the chosen solution the VAJ page in the manual cries for an update :-) I hope the patch helps the people plagued by the VAJ Repository... ;-) Okay, here goes: Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java =================================================================== RCS file: /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java,v retrieving revision 1.9 diff -u -r1.9 VAJExport.java --- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java 25 Jul 2002 15:21:15 -0000 1.9 +++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java 16 Jan 2003 18:27:42 -0000 @@ -77,14 +77,68 @@ * 'org.foo.subsystem1' except of these starting with * 'org.foo.subsystem1.test'. * - * There are flags to choose which items to export: - * exportSources: export Java sources - * exportResources: export project resources - * exportClasses: export class files - * exportDebugInfo: export class files with debug info (use with exportClasses) - * default is exporting Java files and resources. + * <p>Parameters: + * <table border="1" cellpadding="2" cellspacing="0"> + * <tr> + * <td valign="top"><b>Attribute</b></td> + * <td valign="top"><b>Description</b></td> + * <td align="center" valign="top"><b>Required</b></td> + * </tr> + * <tr> + * <td valign="top">destdir</td> + * <td valign="top">location to store the exported files</td> + * <td align="center" valign="top">Yes</td> + * <tr> + * <td valign="top">exportSources</td> + * <td valign="top">export Java sources, defaults to "yes"</td> + * <td align="center" valign="top">No</td> + * </tr> + * <tr> + * <td valign="top">exportResources</td> + * <td valign="top">export resource files, defaults to "yes"</td> + * <td align="center" valign="top">No</td> + * </tr> + * <tr> + * <td valign="top">exportClasses</td> + * <td valign="top">export class files, defaults to "no"</td> + * <td align="center" valign="top">No</td> + * </tr> + * <tr> + * <td valign="top">exportDebugInfo</td> + * <td valign="top">include debug info in exported class files, + * defaults to "no"</td> + * <td align="center" valign="top">No</td> + * </tr> + * <tr> + * <td valign="top">defaultexcludes</td> + * <td valign="top">use default excludes when exporting, + * defaults to "yes". + * Default excludes are: IBM/**, + * Java class libraries/**, Sun class libraries/**, + * JSP Page Compile Generated Code/**, Visual Age*/**</td> + * <td align="center" valign="top">No</td> + * </tr> + * <tr> + * <td valign="top">overwrite</td> + * <td valign="top">overwrite existing files, defaults to "yes"</td> + * <td align="center" valign="top">No</td> + * </tr> + * <tr> + * <td valign="top">remote</td> + * <td valign="top">remote tool server to run this command against + * (format: <servername> : <port no>)</td> + * <td align="center" valign="top">No</td> + * </tr> + * <tr> + * <td valign="top">haltonerror</td> + * <td valign="top">stop the build process if an error occurs, + * defaults to "yes"</td> + * <td align="center" valign="top">No</td> + * </tr> + * </table> * * @author Wolf Siberski, TUI Infotec GmbH + * @author Martin Landers, Beck et al. projects */ public class VAJExport extends VAJTask { @@ -123,12 +177,20 @@ } // delegate the export to the VAJUtil object. - getUtil().exportPackages(destDir, - patternSet.getIncludePatterns(getProject()), - patternSet.getExcludePatterns(getProject()), - exportClasses, exportDebugInfo, - exportResources, exportSources, - useDefaultExcludes, overwrite); + try { + getUtil().exportPackages(destDir, + patternSet.getIncludePatterns(getProject()), + patternSet.getExcludePatterns(getProject()), + exportClasses, exportDebugInfo, + exportResources, exportSources, + useDefaultExcludes, overwrite); + } catch (BuildException ex) { + if (haltOnError) { + throw ex; + } else { + log(ex.toString()); + } + } } /** Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java =================================================================== RCS file: /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java,v retrieving revision 1.17 diff -u -r1.17 VAJImport.java --- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java 25 Jul 2002 15:21:15 -0000 1.17 +++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java 16 Jan 2003 18:27:42 -0000 @@ -82,7 +82,7 @@ * created in the repository and automatically loaded into the Workspace. * There has to be at least one nested FileSet element. * </p> - * <p>There are attributes to choose which items to export: + * <p>Parameters: * <table border="1" cellpadding="2" cellspacing="0"> * <tr> * <td valign="top"><b>Attribute</b></td> @@ -110,9 +110,22 @@ * <td valign="top">import class files, defaults to "no"</td> * <td align="center" valign="top">No</td> * </tr> + * <tr> + * <td valign="top">remote</td> + * <td valign="top">remote tool server to run this command against + * (format: <servername> : <port no>)</td> + * <td align="center" valign="top">No</td> + * </tr> + * <tr> + * <td valign="top">haltonerror</td> + * <td valign="top">stop the build process if an error occurs, + * defaults to "yes"</td> + * <td align="center" valign="top">No</td> + * </tr> * </table> * * @author Glenn McAllister, inspired by a similar task written by Peter Kelley + * @author Martin Landers, Beck et al. projects */ public class VAJImport extends VAJTask { protected Vector filesets = new Vector(); @@ -124,6 +137,25 @@ /** + * Extended DirectoryScanner that has accessors for the + * includes and excludes fields. + * + * This is kindof a hack to get includes and excludes + * from the directory scanner. In order to keep + * the URLs short we only want to send the patterns to the + * remote tool server and let him figure out the files. + * + * This replaces the former reflection hack that + * didn't compile for old JDKs. + * + * @see VAJImport#importFileSet(FileSet) + */ + private static class LocalDirectoryScanner extends DirectoryScanner { + public String[] getIncludes() { return includes; } + public String[] getExcludes() { return excludes; } + } + + /** * The VisualAge for Java Project name to import into. */ public void setProject(String projectName) { @@ -182,9 +214,17 @@ throw new BuildException("The VisualAge for Java Project name is required!"); } - for (Enumeration e = filesets.elements(); e.hasMoreElements();) { - importFileset((FileSet) e.nextElement()); - } + try { + for (Enumeration e = filesets.elements(); e.hasMoreElements();) { + importFileset((FileSet) e.nextElement()); + } + } catch (BuildException ex) { + if (haltOnError) { + throw ex; + } else { + log(ex.toString()); + } + } } /** @@ -192,35 +232,14 @@ * Workspace. */ protected void importFileset(FileSet fileset) { - DirectoryScanner ds = fileset.getDirectoryScanner(this.getProject()); + LocalDirectoryScanner ds = new LocalDirectoryScanner(); + fileset.setupDirectoryScanner(ds, this.getProject()); if (ds.getIncludedFiles().length == 0) { return; } - String[] includes = null; - String[] excludes = null; - - // Hack to get includes and excludes. We could also use getIncludedFiles, - // but that would result in very long HTTP-requests. - // Therefore we want to send the patterns only to the remote tool server - // and let him figure out the files. - try { - Class directoryScanner = ds.getClass(); - - Field includesField = directoryScanner.getDeclaredField("includes"); - includesField.setAccessible(true); - includes = (String[]) includesField.get(ds); - - Field excludesField = directoryScanner.getDeclaredField("excludes"); - excludesField.setAccessible(true); - excludes = (String[]) excludesField.get(ds); - } catch (NoSuchFieldException nsfe) { - throw new BuildException( - "DirectoryScanner.includes or .excludes missing" + nsfe.getMessage()); - } catch (IllegalAccessException iae) { - throw new BuildException( - "Access to DirectoryScanner.includes or .excludes not allowed"); - } + String[] includes = ds.getIncludes(); + String[] excludes = ds.getExcludes(); getUtil().importFiles(importProject, ds.getBasedir(), includes, excludes, Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoad.java =================================================================== RCS file: /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoad.java,v retrieving revision 1.4 diff -u -r1.4 VAJLoad.java --- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoad.java 14 Apr 2002 11:16:18 -0000 1.4 +++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoad.java 16 Jan 2003 18:27:42 -0000 @@ -56,19 +56,50 @@ import java.util.Vector; +import org.apache.tools.ant.BuildException; /** - * Load specific project versions into the Visual Age for Java workspace. - * Each project and version name has to be specified completely. + * Load project versions into the Visual Age for Java workspace. + * Each project is identified by its name and a version qualifier. + * Allowed qualifiers are: + * <ul> + * <li>Any valid Visual Age version name</li> + * <li>* (loads the latest <b>versioned</b> edition)</li> + * <li>** (loads the latest edition, including open editions)</li> + * </ul> * Example: * <blockquote> * <vajload> - * <project name="MyVAProject" version="2.1"/> + * <project name="MyVAProject" version="*"/> * <project name="Apache Xerces" version="1.2.0"/> + * <project name="Brand New Stuff" version="**"/> * </vajload> * </blockquote> * + * <p>Parameters: + * <table border="1" cellpadding="2" cellspacing="0"> + * <tr> + * <td valign="top"><b>Attribute</b></td> + * <td valign="top"><b>Description</b></td> + * <td align="center" valign="top"><b>Required</b></td> + * </tr> + * <tr> + * <td valign="top">remote</td> + * <td valign="top">remote tool server to run this command against + * (format: <servername> : <port no>)</td> + * <td align="center" valign="top">No</td> + * </tr> + * <tr> + * <td valign="top">haltonerror</td> + * <td valign="top">stop the build process if an error occurs, + defaults to "yes"</td> + * <td align="center" valign="top">No</td> + * </tr> + * </table> + * </p> + * * @author Wolf Siberski, TUI Infotec GmbH + * @author Martin Landers, Beck et al. projects */ public class VAJLoad extends VAJTask { @@ -78,7 +109,15 @@ * Load specified projects. */ public void execute() { - getUtil().loadProjects(projectDescriptions); + try { + getUtil().loadProjects(projectDescriptions); + } catch (BuildException ex) { + if (haltOnError) { + throw ex; + } else { + log(ex.toString()); + } + } } /** Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java =================================================================== RCS file: /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java,v retrieving revision 1.10 diff -u -r1.10 VAJLocalUtil.java --- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java 31 Oct 2002 15:12:52 -0000 1.10 +++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java 16 Jan 2003 18:27:42 -0000 @@ -64,6 +64,7 @@ import com.ibm.ivj.util.base.Type; import com.ibm.ivj.util.base.Workspace; import java.io.File; +import java.util.Date; import java.util.Enumeration; import java.util.Vector; import org.apache.tools.ant.BuildException; @@ -75,6 +76,7 @@ * wraps IvjExceptions into BuildExceptions * * @author Wolf Siberski, TUI Infotec GmbH + * @author Martin Landers, Beck et al. projects */ abstract class VAJLocalUtil implements VAJUtil{ // singleton containing the VAJ workspace @@ -194,10 +196,17 @@ e.hasMoreElements();) { VAJProjectDescription d = (VAJProjectDescription) e.nextElement(); - ProjectEdition pe = findProjectEdition(d.getName(), d.getVersion()); + ProjectEdition pe; + if (d.getVersion().equals("*")) + pe = findLatestProjectEdition(d.getName(), false); + else if (d.getVersion().equals("**")) + pe = findLatestProjectEdition(d.getName(), true); + else + pe = findProjectEdition(d.getName(), d.getVersion()); try { - log("Loading '" + d.getName() + "', Version '" + d.getVersion() - + "', into Workspace", MSG_VERBOSE); + log("Loading '" + pe.getName() + "', Version '" + + ((pe.getVersionName() != null)?pe.getVersionName():"("+pe.getVersionStamp()+ ")")+ + "' into Workspace", MSG_VERBOSE); pe.loadIntoWorkspace(); } catch (IvjException ex) { throw createBuildException("Project '" + d.getName() @@ -264,6 +273,47 @@ } return pe; + } catch (IvjException e) { + throw createBuildException("VA Exception occured: ", e); + } + + } + + /** + * Finds the latest project edition in the repository. + * + * @param name project name + * @param includeOpenEditions include open/scratch editions in the search? + * @return com.ibm.ivj.util.base.ProjectEdition the specified edition + */ + private ProjectEdition findLatestProjectEdition( + String name, + boolean includeOpenEditions) { + try { + ProjectEdition[] editions = null; + editions = getWorkspace().getRepository().getProjectEditions(name); + if (editions == null) { + throw new BuildException("Project " + name + " doesn't exist"); + } + + // find latest (versioned) project edition by date + ProjectEdition pe = null; + Date latestStamp = new Date(0); // Let's hope there are no projects older than the epoch ;-) + for (int i = 0; i < editions.length; i++) { + if (!includeOpenEditions && !editions[i].isVersion()) + continue; + if (latestStamp.before(editions[i].getVersionStamp())) { + latestStamp = editions[i].getVersionStamp(); + pe = editions[i]; + } + } + + if (pe == null) { + throw new BuildException("Can't determine latest edition for project " + name); + } + log("Using version " + ((pe.getVersionName() != null)?pe.getVersionName():"("+pe.getVersionStamp()+ ")") + + " of " + pe.getName(), MSG_INFO); + return pe; } catch (IvjException e) { throw createBuildException("VA Exception occured: ", e); } Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java =================================================================== RCS file: /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java,v retrieving revision 1.6 diff -u -r1.6 VAJRemoteUtil.java --- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java 25 Jul 2002 15:21:15 -0000 1.6 +++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java 16 Jan 2003 18:27:42 -0000 @@ -61,6 +61,7 @@ import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; +import java.net.URLEncoder; import java.util.Enumeration; import java.util.Vector; import org.apache.tools.ant.BuildException; @@ -71,6 +72,7 @@ * wraps IvjExceptions into BuildExceptions * * @author Wolf Siberski, TUI Infotec GmbH + * @author Martin Landers, Beck et al. projects */ class VAJRemoteUtil implements VAJUtil{ // calling task @@ -139,7 +141,7 @@ boolean includeSources, boolean useDefaultExcludes) { String result = VAJToolsServlet.DIR_PARAM + "=" - + dir.getAbsolutePath().replace('\\', '/') + "&" + + URLEncoder.encode(dir.getAbsolutePath()) + "&" + VAJToolsServlet.CLASSES_PARAM + "=" + includeClasses + "&" + VAJToolsServlet.RESOURCES_PARAM + "=" + includeResources + "&" + VAJToolsServlet.SOURCES_PARAM + "=" + includeSources + "&" @@ -148,13 +150,13 @@ if (includePatterns != null) { for (int i = 0; i < includePatterns.length; i++){ result = result + "&" + VAJExportServlet.INCLUDE_PARAM + "=" - + includePatterns[i].replace(' ', '+').replace('\\', '/'); + + URLEncoder.encode(includePatterns[i]); } } if (excludePatterns != null) { for (int i = 0; i < excludePatterns.length; i++){ result = result + "&" + VAJExportServlet.EXCLUDE_PARAM + "=" - + excludePatterns[i].replace(' ', '+').replace('\\', '/'); + + URLEncoder.encode(excludePatterns[i]); } } Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java =================================================================== RCS file: /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java,v retrieving revision 1.5 diff -u -r1.5 VAJTask.java --- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java 9 Jul 2002 21:06:06 -0000 1.5 +++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java 16 Jan 2003 18:27:43 -0000 @@ -59,6 +59,7 @@ * attributes (remoteServer) and util methods * * @author: Wolf Siberski + * @author: Martin Landers, Beck et al. projects */ import org.apache.tools.ant.Task; @@ -79,6 +80,8 @@ // holds the appropriate VAJUtil implementation private VAJUtil util = null; + // checks if this task throws BuildException on error + protected boolean haltOnError = true; /** * returns the VAJUtil implementation @@ -102,5 +105,16 @@ */ public void setRemote(String remoteServer) { this.remoteServer = remoteServer; + } + + /** + * Flag to control behaviour in case of VAJ errors. + * If this attribute is set errors will be ignored + * (no BuildException will be thrown) otherwise + * VAJ errors will be wrapped into a BuildException and + * stop the build. + */ + public void setHaltonerror(boolean newHaltOnError) { + haltOnError = newHaltOnError; } } Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java =================================================================== RCS file: /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java,v retrieving revision 1.10 diff -u -r1.10 VAJToolsServlet.java --- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java 25 Jul 2002 15:21:15 -0000 1.10 +++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java 16 Jan 2003 18:27:43 -0000 @@ -56,11 +56,11 @@ +import com.ibm.ivj.toolserver.servletclasses.servlet.ServletException; +import com.ibm.ivj.toolserver.servletclasses.servlet.http.HttpServlet; +import com.ibm.ivj.toolserver.servletclasses.servlet.http.HttpServletRequest; +import com.ibm.ivj.toolserver.servletclasses.servlet.http.HttpServletResponse; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.util.StringUtils; Index: docs/manual/Integration/VAJAntTool.html =================================================================== RCS file: /home/cvspublic/jakarta-ant/docs/manual/Integration/VAJAntTool.html,v retrieving revision 1.14 diff -u -r1.14 VAJAntTool.html --- docs/manual/Integration/VAJAntTool.html 25 Nov 2002 12:42:51 -0000 1.14 +++ docs/manual/Integration/VAJAntTool.html 16 Jan 2003 18:52:41 -0000 @@ -14,8 +14,11 @@ [EMAIL PROTECTED]</A> ) <LI>Christoph Wilhelms (<A href="mailto:[EMAIL PROTECTED]"> - [EMAIL PROTECTED]</A>)</LI></UL> -Version 1.2 - 2001/06/14<br> + [EMAIL PROTECTED]</A>)</LI> + <LI>Martin Landers + (<A href="mailto:[EMAIL PROTECTED]"> + [EMAIL PROTECTED]</A>)</LI></UL> +Version 1.2.1 - 2003/01/16<br> <hr> <h2>Table of Contents</H2> <ul> @@ -99,15 +102,21 @@ <td valign="top"><b>Attribute</B></TD> <td valign="top"><b>Description</B></TD> <td align="middle" valign="top"><b>Required</B></TD></TR> - <tr> + <tr> <td valign="top">remote</TD> <td valign="top"> <P>name and port of a remote tool server. (format: <servername>:<port no>).<BR>If this attribute is set, the tasks will be executed on the specified tool server. </P></TD> - <td valign="top" align="middle">no</TD></TR></TABLE> - + <td valign="top" align="middle">no</TD></TR> + <tr> + <td valign="top">haltonerror</B></TD> + <td valign="top"> + <P>Stop the build process if an error occurs, + (default: "yes")</P></TD> + <td align="middle" valign="top">no</TD></TR></TABLE> + <h3>Parameters specified as nested elements</H3> <h4>vajproject</H4> <table border="1" cellpadding="2" cellspacing="0"> @@ -123,13 +132,17 @@ <td valign="top" align="middle">yes</TD></TR> <tr> <td valign="top">version</TD> - <td valign="top">name of the requested version</TD> + <td valign="top"><P>name of the requested version, + or one of the special qualifiers "*" or "**"<BR> + "*" loads the latest <b>versioned</b> edition of the project<BR> + "**" will load the latest version (including open editions)</P></TD> <td valign="top" align="middle">yes</TD></TR> </TABLE> <h3>Example</H3> <pre><vajload remote="localhost:32767"> - <vajproject name="My Testcases" version="1.7beta"/> + <vajproject name="My App" version="*"/> + <vajproject name="My Testcases" version="**"/> <vajproject name="JUnit" version="3.2"/> </vajload> </PRE> @@ -193,8 +206,14 @@ <servername>:<port no>).<BR>If this attribute is set, the tasks will be executed on the specified tool server. </P></TD> - <td valign="top" align="middle">no</TD></TR></TABLE> - + <td valign="top" align="middle">no</TD></TR> + <tr> + <td valign="top">haltonerror</B></TD> + <td valign="top"> + <P>Stop the build process if an error occurs, + (default: "yes")</P></TD> + <td align="middle" valign="top">no</TD></TR></TABLE> + <h3>Parameters specified as nested elements</H3> <h4>include</H4> @@ -260,7 +279,7 @@ <td valign="top"><b>Description</B></TD> <td align="middle" valign="top"><b>Required</B></TD></TR> <tr> - <td valign="top">vajProject</TD> + <td valign="top">project</TD> <td valign="top">imported files are added to this VAJ project</TD> <td valign="top" align="middle">yes</TD></TR> @@ -285,8 +304,14 @@ <servername>:<port no>).<BR>If this attribute is set, the tasks will be executed on the specified tool server. </P></TD> - <td valign="top" align="middle">no</TD></TR></TABLE> - + <td valign="top" align="middle">no</TD></TR> + <tr> + <td valign="top">haltonerror</B></TD> + <td valign="top"> + <P>Stop the build process if an error occurs, + (default: "yes")</P></TD> + <td align="middle" valign="top">no</TD></TR></TABLE> + <h3>Parameters specified as nested elements</H3> <h4>fileset</H4> @@ -553,10 +578,14 @@ <td valign="top">1.2</TD> <td valign="top">2001/07/02</TD> <td valign="top"> - <P>Added documentation of new remote feature.<BR>Minor corrections.</P></TD></TR></TABLE> + <P>Added documentation of new remote feature.<BR>Minor corrections.</P></TD></TR> + <tr valign="top"> + <td valign="top">1.2.1</TD> + <td valign="top">2003/01/16</TD> + <td valign="top"> + <P>Added documentation for haltonerror, "*" and "**" version qualifiers.</P></TD></TR></TABLE> <hr> -<center>Copyright &#copy 2001-2002 Apache Software +<center>Copyright © 2001-2002 Apache Software Foundation. All rights Reserved.</CENTER> </body> </html> - -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>