Package org.codehaus.mojo.exec
Class ExecMojo
- java.lang.Object
-
- org.apache.maven.plugin.AbstractMojo
-
- org.codehaus.mojo.exec.AbstractExecMojo
-
- org.codehaus.mojo.exec.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 theexecutable
, 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 class org.codehaus.mojo.exec.AbstractExecMojo
classpathScope, executableDependency, project
-
-
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.codehaus.mojo.exec.AbstractExecMojo
collectProjectArtifactsAndClasspath, findExecutableArtifact, hasCommandlineArgs, isSkip, parseCommandlineArgs, registerSourceRoots
-
-
-
-
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:
- relative to the root of the project
- as toolchain executable
- relative to the working directory (Windows only)
- relative to the directories specified in the system property PATH (Windows Only)
- 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 thatSystem.out
andSystem.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 theexec.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.
-
CLASSPATH_TOKEN
public static final java.lang.String CLASSPATH_TOKEN
- See Also:
- Constant Field Values
-
MODULEPATH_TOKEN
public static final java.lang.String MODULEPATH_TOKEN
- See Also:
- Constant Field Values
-
processDestroyer
private org.apache.commons.exec.ProcessDestroyer processDestroyer
-
-
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()
-
-