Class 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 ClassRealms 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.

    • 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
      • exitCode

        private int exitCode
    • 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)
      • 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.
      • 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.