Class ForkedJvm


  • class ForkedJvm
    extends java.lang.Object
    Runs the main() method of some tool in a forked JVM.
    Version:
    $Id: ForkedJvm.java 7758 2008-09-29 20:06:33Z bentmann $
    See Also:
    java - The Java Application Launcher
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.Set classPathEntries
      The class path entries for the forked JVM, given as strings.
      private java.util.List cmdLineArgs
      The command line arguments to pass to the main() method, given as strings.
      private java.lang.String executable
      The executable used to fork the JVM.
      private java.lang.String mainClass
      The qualified name of the class on which to invoke the main() method.
      private org.codehaus.plexus.util.cli.StreamConsumer systemErr
      The consumer for System.err messages.
      private org.codehaus.plexus.util.cli.StreamConsumer systemOut
      The consumer for System.out messages.
      private java.io.File workingDirectory
      The working directory for the forked JVM.
    • Constructor Summary

      Constructors 
      Constructor Description
      ForkedJvm()
      Creates a new configuration to fork a JVM.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addArgument​(java.io.File argument)
      Adds the specified file path to the command line for the main() method.
      void addArgument​(java.lang.String argument)
      Adds the specified argument to the command line for the main() method.
      void addArguments​(java.lang.String[] arguments)
      Adds the specified arguments to the command line for the main() method.
      void addClassPathEntry​(java.io.File path)
      Adds the specified path to the class path of the forked JVM.
      void addClassPathEntry​(java.lang.Class type)
      Adds the source JAR of the specified class/interface to the class path of the forked JVM.
      void addClassPathEntry​(java.lang.String path)
      Adds the specified path to the class path of the forked JVM.
      private org.codehaus.plexus.util.cli.Commandline createCommandLine()
      Creates the command line for the new JVM based on the current configuration.
      private java.lang.String[] getArguments()
      Gets the command line arguments for the main() method.
      private java.lang.String getClassPath()
      Gets the class path for the forked JVM.
      private static java.io.File getClassSource​(java.lang.Class type)
      Gets the JAR file or directory that contains the specified class.
      private static java.io.File getClassSource​(java.lang.String className)
      Gets the JAR file or directory that contains the specified class.
      private static java.lang.String getDefaultExecutable()
      Gets the absolute path to the JVM executable.
      private static java.io.File getResourceSource​(java.lang.String resource, java.lang.ClassLoader loader)
      Gets the JAR file or directory that contains the specified resource.
      int run()
      Forks a JVM using the previously set parameters.
      void setMainClass​(java.lang.Class type)
      Sets the class on which to invoke the main() method.
      void setMainClass​(java.lang.String name)
      Sets the qualified name of the class on which to invoke the main() method.
      void setSystemErr​(org.codehaus.plexus.util.cli.StreamConsumer consumer)
      Sets the stream consumer used to handle messages from System.err.
      void setSystemOut​(org.codehaus.plexus.util.cli.StreamConsumer consumer)
      Sets the stream consumer used to handle messages from System.out.
      void setWorkingDirectory​(java.io.File directory)
      Sets the working directory for the forked JVM.
      java.lang.String toString()
      Gets a string representation of the command line arguments.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • systemOut

        private org.codehaus.plexus.util.cli.StreamConsumer systemOut
        The consumer for System.out messages.
      • systemErr

        private org.codehaus.plexus.util.cli.StreamConsumer systemErr
        The consumer for System.err messages.
      • executable

        private java.lang.String executable
        The executable used to fork the JVM.
      • workingDirectory

        private java.io.File workingDirectory
        The working directory for the forked JVM.
      • classPathEntries

        private java.util.Set classPathEntries
        The class path entries for the forked JVM, given as strings.
      • mainClass

        private java.lang.String mainClass
        The qualified name of the class on which to invoke the main() method.
      • cmdLineArgs

        private java.util.List cmdLineArgs
        The command line arguments to pass to the main() method, given as strings.
    • Constructor Detail

      • ForkedJvm

        public ForkedJvm()
        Creates a new configuration to fork a JVM.
    • Method Detail

      • getDefaultExecutable

        private static java.lang.String getDefaultExecutable()
        Gets the absolute path to the JVM executable.
        Returns:
        The absolute path to the JVM executable.
      • setWorkingDirectory

        public void setWorkingDirectory​(java.io.File directory)
        Sets the working directory for the forked JVM.
        Parameters:
        directory - The working directory for the forked JVM, may be null to inherit the working directory of the current JVM.
      • setSystemOut

        public void setSystemOut​(org.codehaus.plexus.util.cli.StreamConsumer consumer)
        Sets the stream consumer used to handle messages from System.out.
        Parameters:
        consumer - The stream consumer, may be null to discard the output.
      • setSystemErr

        public void setSystemErr​(org.codehaus.plexus.util.cli.StreamConsumer consumer)
        Sets the stream consumer used to handle messages from System.err.
        Parameters:
        consumer - The stream consumer, may be null to discard the output.
      • getClassPath

        private java.lang.String getClassPath()
        Gets the class path for the forked JVM.
        Returns:
        The class path for the forked JVM.
      • addClassPathEntry

        public void addClassPathEntry​(java.lang.String path)
        Adds the specified path to the class path of the forked JVM.
        Parameters:
        path - The path to add, may be null.
      • addClassPathEntry

        public void addClassPathEntry​(java.io.File path)
        Adds the specified path to the class path of the forked JVM.
        Parameters:
        path - The path to add, may be null.
      • addClassPathEntry

        public void addClassPathEntry​(java.lang.Class type)
        Adds the source JAR of the specified class/interface to the class path of the forked JVM.
        Parameters:
        type - The class/interface to add, may be null.
      • getClassSource

        private static java.io.File getClassSource​(java.lang.Class type)
        Gets the JAR file or directory that contains the specified class.
        Parameters:
        type - The class/interface to find, may be null.
        Returns:
        The absolute path to the class source location or null if unknown.
      • getClassSource

        private static java.io.File getClassSource​(java.lang.String className)
        Gets the JAR file or directory that contains the specified class.
        Parameters:
        className - The qualified name of the class/interface to find, may be null.
        Returns:
        The absolute path to the class source location or null if unknown.
      • getResourceSource

        private static java.io.File getResourceSource​(java.lang.String resource,
                                                      java.lang.ClassLoader loader)
        Gets the JAR file or directory that contains the specified resource.
        Parameters:
        resource - The absolute name of the resource to find, may be null.
        loader - The class loader to use for searching the resource, may be null.
        Returns:
        The absolute path to the resource location or null if unknown.
      • setMainClass

        public void setMainClass​(java.lang.String name)
        Sets the qualified name of the class on which to invoke the main() method. The source of the specified class will automatically be added to the class path of the forked JVM.
        Parameters:
        name - The qualified name of the class on which to invoke the main() method.
      • setMainClass

        public void setMainClass​(java.lang.Class type)
        Sets the class on which to invoke the main() method. The source of the specified class will automatically be added to the class path of the forked JVM.
        Parameters:
        type - The class on which to invoke the main() method, may be null.
      • getArguments

        private java.lang.String[] getArguments()
        Gets the command line arguments for the main() method.
        Returns:
        The command line arguments for the main() method.
      • addArgument

        public void addArgument​(java.lang.String argument)
        Adds the specified argument to the command line for the main() method.
        Parameters:
        argument - The argument to add, may be null.
      • addArgument

        public void addArgument​(java.io.File argument)
        Adds the specified file path to the command line for the main() method.
        Parameters:
        argument - The argument to add, may be null.
      • addArguments

        public void addArguments​(java.lang.String[] arguments)
        Adds the specified arguments to the command line for the main() method.
        Parameters:
        arguments - The arguments to add, may be null.
      • createCommandLine

        private org.codehaus.plexus.util.cli.Commandline createCommandLine()
        Creates the command line for the new JVM based on the current configuration.
        Returns:
        The command line used to fork the JVM, never null.
      • run

        public int run()
                throws java.lang.Exception
        Forks a JVM using the previously set parameters.
        Returns:
        The exit code of the forked JVM.
        Throws:
        java.lang.Exception - If the JVM could not be forked.
      • toString

        public java.lang.String toString()
        Gets a string representation of the command line arguments.
        Overrides:
        toString in class java.lang.Object
        Returns:
        A string representation of the command line arguments.