org.codehaus.plexus.classworlds.launcher

## Class Launcher

- java.lang.Object
- - org.codehaus.plexus.classworlds.launcher.Launcher

Direct Known Subclasses:
  Launcher

    public class Launcher
    extends java.lang.Object

Command-line invokable application launcher.

This launcher class assists in the creation of classloaders and `ClassRealm`s from a configuration file and the launching of the application's `main` method from the correct class loaded through the correct classloader.

The path to the configuration file is specified using the `classworlds.conf` system property, typically specified using the `-D` switch to `java`.

Version:
  $Id: Launcher.java 7933 2008-12-17 17:33:58Z bentmann $
Author:
  bob mcwhirter

### Field Summary

Fields
`protected static java.lang.String` `CLASSWORLDS_CONF`
`protected java.lang.String` `mainClassName`
`protected java.lang.String` `mainRealmName`
`protected java.lang.ClassLoader` `systemClassLoader`
`protected static java.lang.String` `UBERJAR_CONF_DIR`
`protected ClassWorld` `world`

### Constructor Summary

Constructors
Constructor and Description
`Launcher()`

### Method Summary

Methods
`void` `configure(java.io.InputStream is)` Configure from a file.
`protected java.lang.reflect.Method` `getEnhancedMainMethod()` Retrieve the enhanced main entry method.
`int` `getExitCode()`
`java.lang.Class` `getMainClass()` Retrieve the main entry class.
`java.lang.String` `getMainClassName()`
`protected java.lang.reflect.Method` `getMainMethod()` Retrieve the main entry method.
`ClassRealm` `getMainRealm()` Retrieve the main entry realm.
`java.lang.String` `getMainRealmName()`
`java.lang.ClassLoader` `getSystemClassLoader()`
`ClassWorld` `getWorld()`
`void` `launch(java.lang.String[] args)` Launch the application.
`protected void` `launchEnhanced(java.lang.String[] args)` Attempt to launch the application through the enhanced main method.
`protected void` `launchStandard(java.lang.String[] args)` Attempt to launch the application through the standard main method.
`static void` `main(java.lang.String[] args)` Launch the launcher from the command line.
`static int` `mainWithExitCode(java.lang.String[] args)` Launch the launcher.
`void` `setAppMain(java.lang.String mainClassName, java.lang.String mainRealmName)`
`void` `setSystemClassLoader(java.lang.ClassLoader loader)`
`void` `setWorld(ClassWorld world)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### CLASSWORLDS_CONF

    protected static final java.lang.String CLASSWORLDS_CONF

See Also:
  Constant Field Values

#### UBERJAR_CONF_DIR

    protected static final java.lang.String UBERJAR_CONF_DIR

See Also:
  Constant Field Values

#### systemClassLoader

    protected java.lang.ClassLoader systemClassLoader

#### mainClassName

    protected java.lang.String mainClassName

#### mainRealmName

    protected java.lang.String mainRealmName

#### world

    protected ClassWorld world

### Constructor Detail

#### Launcher

    public Launcher()

### Method Detail

#### setSystemClassLoader

    public void setSystemClassLoader(java.lang.ClassLoader loader)

#### getSystemClassLoader

    public java.lang.ClassLoader getSystemClassLoader()

#### getExitCode

    public int getExitCode()

#### setAppMain

    public void setAppMain(java.lang.String mainClassName,
                  java.lang.String mainRealmName)

#### getMainRealmName

    public java.lang.String getMainRealmName()

#### getMainClassName

    public java.lang.String getMainClassName()

#### setWorld

    public void setWorld(ClassWorld world)

#### getWorld

    public ClassWorld getWorld()

#### configure

    public void configure(java.io.InputStream is)
                   throws java.io.IOException,
                          ConfigurationException,
                          DuplicateRealmException,
                          NoSuchRealmException

Configure from a file.

Parameters:
  `is` - The config input stream.
Throws:
  `java.io.IOException` - If an error occurs reading the config file.
  `java.net.MalformedURLException` - If the config file contains invalid URLs.
  `ConfigurationException` - If the config file is corrupt.
  `DuplicateRealmException` - If the config file defines two realms with the same id.
  `NoSuchRealmException` - If the config file defines a main entry point in a non-existent realm.

#### getMainClass

    public java.lang.Class getMainClass()
                                 throws java.lang.ClassNotFoundException,
                                        NoSuchRealmException

Retrieve the main entry class.

Returns:
  The main entry class.
Throws:
  `java.lang.ClassNotFoundException` - If the class cannot be found.
  `NoSuchRealmException` - If the specified main entry realm does not exist.

#### getMainRealm

    public ClassRealm getMainRealm()
                            throws NoSuchRealmException

Retrieve the main entry realm.

Returns:
  The main entry realm.
Throws:
  `NoSuchRealmException` - If the specified main entry realm does not exist.

#### getEnhancedMainMethod

    protected java.lang.reflect.Method getEnhancedMainMethod()
                                                      throws java.lang.ClassNotFoundException,
                                                             java.lang.NoSuchMethodException,
                                                             NoSuchRealmException

Retrieve the enhanced main entry method.

Returns:
  The enhanced main entry method.
Throws:
  `java.lang.ClassNotFoundException` - If the main entry class cannot be found.
  `java.lang.NoSuchMethodException` - If the main entry method cannot be found.
  `NoSuchRealmException` - If the main entry realm cannot be found.

#### getMainMethod

    protected java.lang.reflect.Method getMainMethod()
                                              throws java.lang.ClassNotFoundException,
                                                     java.lang.NoSuchMethodException,
                                                     NoSuchRealmException

Retrieve the main entry method.

Returns:
  The main entry method.
Throws:
  `java.lang.ClassNotFoundException` - If the main entry class cannot be found.
  `java.lang.NoSuchMethodException` - If the main entry method cannot be found.
  `NoSuchRealmException` - If the main entry realm cannot be found.

#### launch

    public void launch(java.lang.String[] args)
                throws java.lang.ClassNotFoundException,
                       java.lang.IllegalAccessException,
                       java.lang.reflect.InvocationTargetException,
                       java.lang.NoSuchMethodException,
                       NoSuchRealmException

Launch the application.

Parameters:
  `args` - The application args.
Throws:
  `java.lang.ClassNotFoundException` - If the main entry class cannot be found.
  `java.lang.IllegalAccessException` - If the method cannot be accessed.
  `java.lang.reflect.InvocationTargetException` - If the target of the invokation is invalid.
  `java.lang.NoSuchMethodException` - If the main entry method cannot be found.
  `NoSuchRealmException` - If the main entry realm cannot be found.

#### launchEnhanced

    protected void launchEnhanced(java.lang.String[] args)
                           throws java.lang.ClassNotFoundException,
                                  java.lang.IllegalAccessException,
                                  java.lang.reflect.InvocationTargetException,
                                  java.lang.NoSuchMethodException,
                                  NoSuchRealmException

Attempt to launch the application through the enhanced main method.

This will seek a method with the exact signature of:

      public static void main(String[] args, ClassWorld world)

Parameters:
  `args` - The application args.
Throws:
  `java.lang.ClassNotFoundException` - If the main entry class cannot be found.
  `java.lang.IllegalAccessException` - If the method cannot be accessed.
  `java.lang.reflect.InvocationTargetException` - If the target of the invokation is invalid.
  `java.lang.NoSuchMethodException` - If the main entry method cannot be found.
  `NoSuchRealmException` - If the main entry realm cannot be found.

#### launchStandard

    protected void launchStandard(java.lang.String[] args)
                           throws java.lang.ClassNotFoundException,
                                  java.lang.IllegalAccessException,
                                  java.lang.reflect.InvocationTargetException,
                                  java.lang.NoSuchMethodException,
                                  NoSuchRealmException

Attempt to launch the application through the standard main method.

This will seek a method with the exact signature of:

      public static void main(String[] args)

Parameters:
  `args` - The application args.
Throws:
  `java.lang.ClassNotFoundException` - If the main entry class cannot be found.
  `java.lang.IllegalAccessException` - If the method cannot be accessed.
  `java.lang.reflect.InvocationTargetException` - If the target of the invokation is invalid.
  `java.lang.NoSuchMethodException` - If the main entry method cannot be found.
  `NoSuchRealmException` - If the main entry realm cannot be found.

#### main

    public static void main(java.lang.String[] args)

Launch the launcher from the command line. Will exit using System.exit with an exit code of 0 for success, 100 if there was an unknown exception, or some other code for an application error.

Parameters:
  `args` - The application command-line arguments.

#### mainWithExitCode

    public static int mainWithExitCode(java.lang.String[] args)
                                throws java.lang.Exception

Launch the launcher.

Parameters:
  `args` - The application command-line arguments.
Returns:
  an integer exit code
Throws:
  `java.lang.Exception` - If an error occurs.