Class ExecMojo

  • All Implemented Interfaces:
    org.apache.maven.plugin.ContextEnabled, org.apache.maven.plugin.Mojo

    @Mojo(name="exec",
          threadSafe=true,
          requiresDependencyResolution=TEST)
    public class ExecMojo
    extends AbstractExecMojo
    A Plugin for executing external programs.
    Since:
    1.0
    Version:
    $Id$
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.List<?> arguments
      A list of arguments passed to the executable, which should be of type <argument> or <classpath>.
      private boolean async
      If set to true the child process executes asynchronously and build execution continues in parallel.
      private boolean asyncDestroyOnShutdown
      If set to true, the asynchronous child process is destroyed upon JVM shutdown.
      private java.io.File basedir  
      static java.lang.String CLASSPATH_TOKEN  
      private java.io.File environmentScript
      Environment script to be merged with environmentVariables This script is platform specifics, on Unix its must be Bourne shell format.
      private java.util.Map<java.lang.String,​java.lang.String> environmentVariables
      Environment variables to pass to the executed program.
      private java.lang.String executable
      The executable.
      private boolean longClasspath
      If set to true the classpath and the main class will be written to a MANIFEST.MF file and wrapped into a jar.
      private boolean longModulepath
      If set to true the modulepath and the main class will be written as an @arg file Instead of '--module-path/-p MODULEPATH ' the exec plugin executes '@modulepath'.
      static java.lang.String MODULEPATH_TOKEN  
      private java.io.File outputFile
      Program standard and error output will be redirected to the file specified by this optional field.
      private org.apache.commons.exec.ProcessDestroyer processDestroyer  
      private org.apache.maven.execution.MavenSession session
      The current build session instance.
      private int[] successCodes
      Exit codes to be resolved as successful execution for non-compliant applications (applications not returning 0 for success).
      private java.lang.String toolchain
      The toolchain.
      private java.io.File workingDirectory
      The current working directory.
      • Fields inherited from interface org.apache.maven.plugin.Mojo

        ROLE
    • Constructor Summary

      Constructors 
      Constructor Description
      ExecMojo()  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private static void addToClasspath​(java.lang.StringBuffer theClasspath, java.lang.String toAdd)  
      private java.lang.String computeClasspathString​(AbstractPath specifiedClasspath)
      Compute the classpath from the specified Classpath.
      private java.util.List<java.lang.String> computePath​(AbstractPath specifiedClasspath)
      Compute the classpath from the specified Classpath.
      private void createArgFile​(java.lang.String filePath, java.util.List<java.lang.String> lines)  
      protected java.util.Map<java.lang.String,​java.lang.String> createEnvs​(java.io.File envScriptFile)  
      protected java.io.File createEnvWrapperFile​(java.io.File envScript)  
      private java.io.File createJar​(java.util.List<java.lang.String> classPath, java.lang.String mainClass)
      Create a jar with just a manifest containing a Main-Class entry for SurefireBooter and a Class-Path entry for all classpath elements.
      void execute()
      priority in the execute method will be to use System properties arguments over the pom specification.
      protected int executeCommandLine​(org.apache.commons.exec.Executor exec, org.apache.commons.exec.CommandLine commandLine, java.util.Map<java.lang.String,​java.lang.String> enviro, java.io.FileOutputStream outputFile)  
      protected int executeCommandLine​(org.apache.commons.exec.Executor exec, org.apache.commons.exec.CommandLine commandLine, java.util.Map<java.lang.String,​java.lang.String> enviro, java.io.OutputStream out, java.io.OutputStream err)  
      protected int executeCommandLine​(org.apache.commons.exec.Executor exec, org.apache.commons.exec.CommandLine commandLine, java.util.Map<java.lang.String,​java.lang.String> enviro, org.apache.commons.exec.PumpStreamHandler psh)  
      private void fillSuccessCodes​(org.apache.commons.exec.Executor exec)  
      private java.util.List<org.apache.maven.artifact.Artifact> filterArtifacts​(java.util.List<org.apache.maven.artifact.Artifact> artifacts, java.util.Collection<java.lang.String> dependencies)  
      (package private) static java.lang.String findExecutable​(java.lang.String executable, java.util.List<java.lang.String> paths)  
      (package private) java.lang.String getExecutable()  
      private static java.util.List<java.lang.String> getExecutableExtensions()  
      (package private) org.apache.commons.exec.CommandLine getExecutablePath​(java.util.Map<java.lang.String,​java.lang.String> enviro, java.io.File dir)  
      private java.util.List<java.lang.String> getExecutablePaths​(java.util.Map<java.lang.String,​java.lang.String> enviro)  
      protected org.apache.commons.exec.ProcessDestroyer getProcessDestroyer()  
      int[] getSuccessCodes()  
      protected java.lang.String getSystemProperty​(java.lang.String key)  
      private org.apache.maven.toolchain.Toolchain getToolchain()  
      private void handleArguments​(java.util.List<java.lang.String> commandArguments)  
      private void handleCommandLineArgs​(java.util.List<java.lang.String> commandArguments)  
      private java.util.Map<java.lang.String,​java.lang.String> handleSystemEnvVariables()  
      private void handleSystemPropertyArguments​(java.lang.String argsProp, java.util.List<java.lang.String> commandArguments)  
      private void handleWorkingDirectory()
      This is a convenient method to make the execute method a little bit more readable.
      private static boolean hasExecutableExtension​(java.lang.String exec)  
      private static boolean hasNativeExtension​(java.lang.String exec)  
      private boolean isLongClassPathArgument​(java.lang.String arg)  
      private boolean isLongModulePathArgument​(java.lang.String arg)  
      (package private) boolean isResultCodeAFailure​(int result)  
      (package private) void setArguments​(java.util.List<?> arguments)  
      (package private) void setBasedir​(java.io.File basedir)  
      (package private) void setExecutable​(java.lang.String executable)  
      (package private) void setProject​(org.apache.maven.project.MavenProject project)  
      void setSuccessCodes​(java.lang.Integer... list)  
      (package private) void setWorkingDirectory​(java.io.File workingDir)  
      (package private) void setWorkingDirectory​(java.lang.String workingDir)  
      • Methods inherited from class org.apache.maven.plugin.AbstractMojo

        getLog, getPluginContext, setLog, setPluginContext
      • Methods inherited from class java.lang.Object

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

      • executable

        @Parameter(property="exec.executable")
        private java.lang.String executable

        The executable. Can be a full path or the name of the executable. In the latter case, the executable must be in the PATH for the execution to work. Omit when using executableDependency.

        The plugin will search for the executable in the following order:

        1. relative to the root of the project
        2. as toolchain executable
        3. relative to the working directory (Windows only)
        4. relative to the directories specified in the system property PATH (Windows Only)
        Otherwise use the executable as is.

        Since:
        1.0
      • toolchain

        @Parameter(property="exec.toolchain",
                   defaultValue="jdk")
        private java.lang.String toolchain

        The toolchain. If omitted, "jdk" is assumed.

      • workingDirectory

        @Parameter(property="exec.workingdir")
        private java.io.File workingDirectory
        The current working directory. Optional. If not specified, basedir will be used.
        Since:
        1.0
      • outputFile

        @Parameter(property="exec.outputFile")
        private java.io.File outputFile
        Program standard and error output will be redirected to the file specified by this optional field. If not specified the standard Maven logging is used.
        Note: Be aware that System.out and System.err use buffering, so don't rely on the order!
        Since:
        1.1-beta-2
        See Also:
        System.err, System.in
      • arguments

        @Parameter
        private java.util.List<?> arguments

        A list of arguments passed to the executable, which should be of type <argument> or <classpath>. Can be overridden by using the exec.args environment variable.

        Since:
        1.0
      • basedir

        @Parameter(readonly=true,
                   required=true,
                   defaultValue="${basedir}")
        private java.io.File basedir
        Since:
        1.0
      • environmentVariables

        @Parameter
        private java.util.Map<java.lang.String,​java.lang.String> environmentVariables
        Environment variables to pass to the executed program.
        Since:
        1.1-beta-2
      • environmentScript

        @Parameter
        private java.io.File environmentScript
        Environment script to be merged with environmentVariables This script is platform specifics, on Unix its must be Bourne shell format. Use this feature if you have a need to create environment variable dynamically such as invoking Visual Studio environment script file
        Since:
        1.4.0
      • session

        @Parameter(defaultValue="${session}",
                   readonly=true)
        private org.apache.maven.execution.MavenSession session
        The current build session instance. This is used for toolchain manager API calls.
      • successCodes

        @Parameter
        private int[] successCodes
        Exit codes to be resolved as successful execution for non-compliant applications (applications not returning 0 for success).
        Since:
        1.1.1
      • longClasspath

        @Parameter(property="exec.longClasspath",
                   defaultValue="false")
        private boolean longClasspath
        If set to true the classpath and the main class will be written to a MANIFEST.MF file and wrapped into a jar. Instead of '-classpath/-cp CLASSPATH mainClass' the exec plugin executes '-jar maven-exec.jar'.
        Since:
        1.1.2
      • longModulepath

        @Parameter(property="exec.longModulepath",
                   defaultValue="true")
        private boolean longModulepath
        If set to true the modulepath and the main class will be written as an @arg file Instead of '--module-path/-p MODULEPATH ' the exec plugin executes '@modulepath'.
        Since:
        1.1.2
      • async

        @Parameter(property="exec.async",
                   defaultValue="false")
        private boolean async
        If set to true the child process executes asynchronously and build execution continues in parallel.
      • asyncDestroyOnShutdown

        @Parameter(property="exec.asyncDestroyOnShutdown",
                   defaultValue="true")
        private boolean asyncDestroyOnShutdown
        If set to true, the asynchronous child process is destroyed upon JVM shutdown. If set to false, asynchronous child process continues execution after JVM shutdown. Applies only to asynchronous processes; ignored for synchronous processes.
      • MODULEPATH_TOKEN

        public static final java.lang.String MODULEPATH_TOKEN
        See Also:
        Constant Field Values
      • processDestroyer

        private org.apache.commons.exec.ProcessDestroyer processDestroyer
    • Constructor Detail

      • ExecMojo

        public ExecMojo()
    • Method Detail

      • execute

        public void execute()
                     throws org.apache.maven.plugin.MojoExecutionException
        priority in the execute method will be to use System properties arguments over the pom specification.
        Throws:
        org.apache.maven.plugin.MojoExecutionException - if a failure happens
      • handleSystemEnvVariables

        private java.util.Map<java.lang.String,​java.lang.String> handleSystemEnvVariables()
                                                                                         throws org.apache.maven.plugin.MojoExecutionException
        Throws:
        org.apache.maven.plugin.MojoExecutionException
      • handleWorkingDirectory

        private void handleWorkingDirectory()
                                     throws org.apache.maven.plugin.MojoExecutionException
        This is a convenient method to make the execute method a little bit more readable. It will define the workingDirectory to be the baseDir in case of workingDirectory is null. If the workingDirectory does not exist it will created.
        Throws:
        org.apache.maven.plugin.MojoExecutionException
      • handleSystemPropertyArguments

        private void handleSystemPropertyArguments​(java.lang.String argsProp,
                                                   java.util.List<java.lang.String> commandArguments)
                                            throws org.apache.maven.plugin.MojoExecutionException
        Throws:
        org.apache.maven.plugin.MojoExecutionException
      • handleCommandLineArgs

        private void handleCommandLineArgs​(java.util.List<java.lang.String> commandArguments)
                                    throws org.apache.maven.plugin.MojoExecutionException,
                                           java.io.IOException
        Throws:
        org.apache.maven.plugin.MojoExecutionException
        java.io.IOException
      • handleArguments

        private void handleArguments​(java.util.List<java.lang.String> commandArguments)
                              throws org.apache.maven.plugin.MojoExecutionException,
                                     java.io.IOException
        Throws:
        org.apache.maven.plugin.MojoExecutionException
        java.io.IOException
      • fillSuccessCodes

        private void fillSuccessCodes​(org.apache.commons.exec.Executor exec)
      • isResultCodeAFailure

        boolean isResultCodeAFailure​(int result)
      • isLongClassPathArgument

        private boolean isLongClassPathArgument​(java.lang.String arg)
      • isLongModulePathArgument

        private boolean isLongModulePathArgument​(java.lang.String arg)
      • computeClasspathString

        private java.lang.String computeClasspathString​(AbstractPath specifiedClasspath)
        Compute the classpath from the specified Classpath. The computed classpath is based on the classpathScope. The plugin cannot know from maven the phase it is executed in. So we have to depend on the user to tell us he wants the scope in which the plugin is expected to be executed.
        Parameters:
        specifiedClasspath - Non null when the user restricted the dependencies, null otherwise (the default classpath will be used)
        Returns:
        a platform specific String representation of the classpath
      • computePath

        private java.util.List<java.lang.String> computePath​(AbstractPath specifiedClasspath)
        Compute the classpath from the specified Classpath. The computed classpath is based on the classpathScope. The plugin cannot know from maven the phase it is executed in. So we have to depend on the user to tell us he wants the scope in which the plugin is expected to be executed.
        Parameters:
        specifiedClasspath - Non null when the user restricted the dependencies, null otherwise (the default classpath will be used)
        Returns:
        a list of class path elements
      • addToClasspath

        private static void addToClasspath​(java.lang.StringBuffer theClasspath,
                                           java.lang.String toAdd)
      • filterArtifacts

        private java.util.List<org.apache.maven.artifact.Artifact> filterArtifacts​(java.util.List<org.apache.maven.artifact.Artifact> artifacts,
                                                                                   java.util.Collection<java.lang.String> dependencies)
      • getExecutablePath

        org.apache.commons.exec.CommandLine getExecutablePath​(java.util.Map<java.lang.String,​java.lang.String> enviro,
                                                              java.io.File dir)
      • findExecutable

        static java.lang.String findExecutable​(java.lang.String executable,
                                               java.util.List<java.lang.String> paths)
      • hasNativeExtension

        private static boolean hasNativeExtension​(java.lang.String exec)
      • hasExecutableExtension

        private static boolean hasExecutableExtension​(java.lang.String exec)
      • getExecutableExtensions

        private static java.util.List<java.lang.String> getExecutableExtensions()
      • getExecutablePaths

        private java.util.List<java.lang.String> getExecutablePaths​(java.util.Map<java.lang.String,​java.lang.String> enviro)
      • executeCommandLine

        protected int executeCommandLine​(org.apache.commons.exec.Executor exec,
                                         org.apache.commons.exec.CommandLine commandLine,
                                         java.util.Map<java.lang.String,​java.lang.String> enviro,
                                         java.io.OutputStream out,
                                         java.io.OutputStream err)
                                  throws org.apache.commons.exec.ExecuteException,
                                         java.io.IOException
        Throws:
        org.apache.commons.exec.ExecuteException
        java.io.IOException
      • executeCommandLine

        protected int executeCommandLine​(org.apache.commons.exec.Executor exec,
                                         org.apache.commons.exec.CommandLine commandLine,
                                         java.util.Map<java.lang.String,​java.lang.String> enviro,
                                         java.io.FileOutputStream outputFile)
                                  throws org.apache.commons.exec.ExecuteException,
                                         java.io.IOException
        Throws:
        org.apache.commons.exec.ExecuteException
        java.io.IOException
      • executeCommandLine

        protected int executeCommandLine​(org.apache.commons.exec.Executor exec,
                                         org.apache.commons.exec.CommandLine commandLine,
                                         java.util.Map<java.lang.String,​java.lang.String> enviro,
                                         org.apache.commons.exec.PumpStreamHandler psh)
                                  throws org.apache.commons.exec.ExecuteException,
                                         java.io.IOException
        Throws:
        org.apache.commons.exec.ExecuteException
        java.io.IOException
      • setExecutable

        void setExecutable​(java.lang.String executable)
      • getExecutable

        java.lang.String getExecutable()
      • setWorkingDirectory

        void setWorkingDirectory​(java.lang.String workingDir)
      • setWorkingDirectory

        void setWorkingDirectory​(java.io.File workingDir)
      • setArguments

        void setArguments​(java.util.List<?> arguments)
      • setBasedir

        void setBasedir​(java.io.File basedir)
      • setProject

        void setProject​(org.apache.maven.project.MavenProject project)
      • getSystemProperty

        protected java.lang.String getSystemProperty​(java.lang.String key)
      • setSuccessCodes

        public void setSuccessCodes​(java.lang.Integer... list)
      • getSuccessCodes

        public int[] getSuccessCodes()
      • getToolchain

        private org.apache.maven.toolchain.Toolchain getToolchain()
      • createJar

        private java.io.File createJar​(java.util.List<java.lang.String> classPath,
                                       java.lang.String mainClass)
                                throws java.io.IOException
        Create a jar with just a manifest containing a Main-Class entry for SurefireBooter and a Class-Path entry for all classpath elements. Copied from surefire (ForkConfiguration#createJar())
        Parameters:
        classPath - List<String> of all classpath elements.
        Returns:
        Throws:
        java.io.IOException
      • createArgFile

        private void createArgFile​(java.lang.String filePath,
                                   java.util.List<java.lang.String> lines)
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • createEnvs

        protected java.util.Map<java.lang.String,​java.lang.String> createEnvs​(java.io.File envScriptFile)
                                                                             throws org.apache.maven.plugin.MojoExecutionException
        Throws:
        org.apache.maven.plugin.MojoExecutionException
      • createEnvWrapperFile

        protected java.io.File createEnvWrapperFile​(java.io.File envScript)
                                             throws java.io.IOException
        Throws:
        java.io.IOException
      • getProcessDestroyer

        protected org.apache.commons.exec.ProcessDestroyer getProcessDestroyer()