git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275404 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -772,7 +772,7 @@ | |||||
| </manifest> | </manifest> | ||||
| </jar> | </jar> | ||||
| <jar destfile="${build.lib}/nodeps.jar" | |||||
| <jar destfile="${build.lib}/ant-nodeps.jar" | |||||
| basedir="${build.classes}" | basedir="${build.classes}" | ||||
| manifest="${manifest.tmp}"> | manifest="${manifest.tmp}"> | ||||
| <and> | <and> | ||||
| @@ -87,6 +87,7 @@ Options: | |||||
| -verbose, -v be extra verbose | -verbose, -v be extra verbose | ||||
| -debug print debugging information | -debug print debugging information | ||||
| -emacs produce logging information without adornments | -emacs produce logging information without adornments | ||||
| -lib <path> specifies a path to search for jars and classes | |||||
| -logfile <file> use given file for log | -logfile <file> use given file for log | ||||
| -l <file> '' | -l <file> '' | ||||
| -logger <classname> the class which is to perform logging | -logger <classname> the class which is to perform logging | ||||
| @@ -109,6 +110,45 @@ Options: | |||||
| <p>For more information about <code>-inputhandler</code> see | <p>For more information about <code>-inputhandler</code> see | ||||
| <a href="inputhandler.html">InputHandler</a>. | <a href="inputhandler.html">InputHandler</a>. | ||||
| <h3><a name="libs">Library Directories</a></h3> | |||||
| <p> | |||||
| Prior to Ant 1.6, all jars in the ANT_HOME/lib would be added to the CLASSPATH | |||||
| used to run Ant. This was done in the scripts that started Ant. From Ant 1.6, | |||||
| two directories are scanned by default and more can be added as required. The | |||||
| default directories scanned are ANT_HOME/lib and a user specific directory, | |||||
| ${user.home}/.ant/lib. This arrangement allows the Ant installation to be | |||||
| shared by many users while still allowing each user to deploy additional jars. | |||||
| Such additional jars could be support jars for Ant's optional tasks or jars | |||||
| containing third-party tasks to be used in the build. It also allows the main Ant | |||||
| installation to be locked down which will please system adminstrators. | |||||
| </p> | |||||
| <p> | |||||
| Additional directories to be searched may be added by using the -lib option. | |||||
| The -lib option specifies a search path. Any jars or classes in the directories | |||||
| of the path will be added to Ant's classloader. The order in which jars are | |||||
| added to the classpath is as follows | |||||
| </p> | |||||
| <ul> | |||||
| <li>-lib jars in the order specified by the -lib elements on the command line</li> | |||||
| <li>jars from ${user.home}/.ant/lib</li> | |||||
| <li>jars from ANT_HOME/lib</li> | |||||
| </ul> | |||||
| <p> | |||||
| Note that the CLASSPATH environment variable is passed to Ant using a -lib | |||||
| option. Ant itself is started with a very minimalistic classpath. | |||||
| </p> | |||||
| <p> | |||||
| The location of ${user.home}/.ant/lib is somewhat dependent on the JVM. On Unix | |||||
| systems ${user.home} maps to the user's home directory whilst on recent | |||||
| versions of Windows it will be somewhere such as | |||||
| C:\Documents and Settings\username\.ant\lib. You should consult your | |||||
| JVM documentation for more details. | |||||
| </p> | |||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <blockquote> | <blockquote> | ||||
| <pre>ant</pre> | <pre>ant</pre> | ||||
| @@ -132,6 +172,13 @@ the target called <code>dist</code>.</p> | |||||
| the target called <code>dist</code>, setting the <code>build</code> property | the target called <code>dist</code>, setting the <code>build</code> property | ||||
| to the value <code>build/classes</code>.</p> | to the value <code>build/classes</code>.</p> | ||||
| <blockquote> | |||||
| <pre>ant -lib /home/ant/extras</pre> | |||||
| </blockquote> | |||||
| <p>runs Ant picking up additional task and support jars from the | |||||
| /home/ant/extras location | |||||
| </p> | |||||
| <h3><a name="files">Files</a></h3> | <h3><a name="files">Files</a></h3> | ||||
| <p>The Ant wrapper script for Unix will source (read and evaluate) the | <p>The Ant wrapper script for Unix will source (read and evaluate) the | ||||
| @@ -207,19 +254,35 @@ have some documentation inside.</p> | |||||
| <h2><a name="viajava">Running Ant via Java</a></h2> | <h2><a name="viajava">Running Ant via Java</a></h2> | ||||
| <p>If you have installed Ant in the do-it-yourself way, Ant can be started | <p>If you have installed Ant in the do-it-yourself way, Ant can be started | ||||
| with:</p> | |||||
| with two entry points:</p> | |||||
| <blockquote> | <blockquote> | ||||
| <pre>java -Dant.home=c:\ant org.apache.tools.ant.Main [options] [target]</pre> | <pre>java -Dant.home=c:\ant org.apache.tools.ant.Main [options] [target]</pre> | ||||
| </blockquote> | </blockquote> | ||||
| <p>These instructions actually do exactly the same as the <code>ant</code> | |||||
| command. The options and target are the same as when running Ant with the <code>ant</code> | |||||
| command. This example assumes you have set your classpath to include:</p> | |||||
| <blockquote> | |||||
| <pre>java -Dant.home=c:\ant org.apache.tools.ant.launch.Launcher [options] [target]</pre> | |||||
| </blockquote> | |||||
| <p> | |||||
| The first method runs Ant's traditional entry point. The second method uses | |||||
| the Ant Launcher introduced in Ant 1.6. The former method does not support | |||||
| the -lib option and all required classes are loaded from the CLASSPATH. You must | |||||
| ensure that all required jars are available. At a minimum the CLASSPATH should | |||||
| include: | |||||
| </p> | |||||
| <ul> | <ul> | ||||
| <li><code>ant.jar</code></li> | |||||
| <li><code>ant.jar</code> and <code>ant-launcher.jar</code></li> | |||||
| <li>jars/classes for your XML parser</li> | <li>jars/classes for your XML parser</li> | ||||
| <li>the JDK's required jar/zip files</li> | <li>the JDK's required jar/zip files</li> | ||||
| </ul> | </ul> | ||||
| <p> | |||||
| The latter method supports the -lib option and will load jars from the | |||||
| specified ANT_HOME. You should start the latter with the most minimal | |||||
| classpath possible, generally just the ant-launcher.jar. | |||||
| </p> | |||||
| <br> | <br> | ||||
| <hr> | <hr> | ||||
| <p align="center">Copyright © 2000-2003 Apache Software Foundation. All rights | <p align="center">Copyright © 2000-2003 Apache Software Foundation. All rights | ||||
| @@ -13,6 +13,7 @@ | |||||
| <h3>Running Ant</h3> | <h3>Running Ant</h3> | ||||
| <a href="running.html#commandline">Command Line</a><br> | <a href="running.html#commandline">Command Line</a><br> | ||||
| <a href="running.html#options">Options</a><br> | <a href="running.html#options">Options</a><br> | ||||
| <a href="running.html#libs">Library Directories</a><br> | |||||
| <a href="running.html#files">Files</a><br> | <a href="running.html#files">Files</a><br> | ||||
| <a href="running.html#envvars">Environment Variables</a><br> | <a href="running.html#envvars">Environment Variables</a><br> | ||||
| <a href="running.html#cygwin">Cygwin Users</a><br> | <a href="running.html#cygwin">Cygwin Users</a><br> | ||||
| @@ -291,7 +291,8 @@ public class Main implements AntMain { | |||||
| /** | /** | ||||
| * Process command line arguments. | * Process command line arguments. | ||||
| * When ant is started from Launcher, the -lib argument does not get passed through to this routine. | |||||
| * When ant is started from Launcher, the -lib argument does not get | |||||
| * passed through to this routine. | |||||
| * | * | ||||
| * @param args the command line arguments. | * @param args the command line arguments. | ||||
| * | * | ||||
| @@ -808,6 +809,7 @@ public class Main implements AntMain { | |||||
| msg.append(" -verbose, -v be extra verbose" + lSep); | msg.append(" -verbose, -v be extra verbose" + lSep); | ||||
| msg.append(" -debug, -d print debugging information" + lSep); | msg.append(" -debug, -d print debugging information" + lSep); | ||||
| msg.append(" -emacs, -e produce logging information without adornments" + lSep); | msg.append(" -emacs, -e produce logging information without adornments" + lSep); | ||||
| msg.append(" -lib <path> specifies a path to search for jars and classes" + lSep); | |||||
| msg.append(" -logfile <file> use given file for log" + lSep); | msg.append(" -logfile <file> use given file for log" + lSep); | ||||
| msg.append(" -l <file> ''" + lSep); | msg.append(" -l <file> ''" + lSep); | ||||
| msg.append(" -logger <classname> the class which is to perform logging" + lSep); | msg.append(" -logger <classname> the class which is to perform logging" + lSep); | ||||
| @@ -0,0 +1,77 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "Ant" and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.tools.ant.launch; | |||||
| import java.io.PrintStream; | |||||
| import java.io.PrintWriter; | |||||
| /** | |||||
| * Signals an error condition during launching | |||||
| * | |||||
| * @author Conro MacNeill | |||||
| * @since Ant 1.6 | |||||
| */ | |||||
| public class LaunchException extends Exception { | |||||
| /** | |||||
| * Constructs an exception with the given descriptive message. | |||||
| * | |||||
| * @param message A description of or information about the exception. | |||||
| * Should not be <code>null</code>. | |||||
| */ | |||||
| public LaunchException(String message) { | |||||
| super(message); | |||||
| } | |||||
| } | |||||
| @@ -88,6 +88,8 @@ public class Launcher { | |||||
| try { | try { | ||||
| Launcher launcher = new Launcher(); | Launcher launcher = new Launcher(); | ||||
| launcher.run(args); | launcher.run(args); | ||||
| } catch (LaunchException e) { | |||||
| System.err.println(e.getMessage()); | |||||
| } catch (Throwable t) { | } catch (Throwable t) { | ||||
| t.printStackTrace(); | t.printStackTrace(); | ||||
| } | } | ||||
| @@ -102,7 +104,7 @@ public class Launcher { | |||||
| * @exception MalformedURLException if the URLs required for the classloader | * @exception MalformedURLException if the URLs required for the classloader | ||||
| * cannot be created. | * cannot be created. | ||||
| */ | */ | ||||
| private void run(String[] args) throws MalformedURLException { | |||||
| private void run(String[] args) throws LaunchException, MalformedURLException { | |||||
| String antHomeProperty = System.getProperty(ANTHOME_PROPERTY); | String antHomeProperty = System.getProperty(ANTHOME_PROPERTY); | ||||
| File antHome = null; | File antHome = null; | ||||
| @@ -119,7 +121,7 @@ public class Launcher { | |||||
| } | } | ||||
| if (!antHome.exists()) { | if (!antHome.exists()) { | ||||
| throw new IllegalStateException("Ant home is set incorrectly or " | |||||
| throw new LaunchException("Ant home is set incorrectly or " | |||||
| + "ant could not be located"); | + "ant could not be located"); | ||||
| } | } | ||||
| @@ -130,7 +132,7 @@ public class Launcher { | |||||
| for (int i = 0; i < args.length; ++i) { | for (int i = 0; i < args.length; ++i) { | ||||
| if (args[i].equals("-lib")) { | if (args[i].equals("-lib")) { | ||||
| if (i == args.length - 1) { | if (i == args.length - 1) { | ||||
| throw new IllegalStateException("The -lib argument must " | |||||
| throw new LaunchException("The -lib argument must " | |||||
| + "be followed by a library location"); | + "be followed by a library location"); | ||||
| } | } | ||||
| libPaths.add(args[++i]); | libPaths.add(args[++i]); | ||||
| @@ -34,7 +34,7 @@ case "`uname`" in | |||||
| ;; | ;; | ||||
| esac | esac | ||||
| if [ -z "$ANT_HOME" ] ; then | |||||
| if [ -z "$ANT_HOME" -o ! -d "$ANT_HOME" ] ; then | |||||
| # try to find ANT | # try to find ANT | ||||
| if [ -d /opt/ant ] ; then | if [ -d /opt/ant ] ; then | ||||
| ANT_HOME=/opt/ant | ANT_HOME=/opt/ant | ||||