Class AbstractExecMojo

  • All Implemented Interfaces:
    org.apache.maven.plugin.ContextEnabled, org.apache.maven.plugin.Mojo
    Direct Known Subclasses:
    ExecJavaMojo, ExecMojo

    public abstract class AbstractExecMojo
    extends org.apache.maven.plugin.AbstractMojo
    This class is used for unifying functionality between the 2 mojo exec plugins ('java' and 'exec'). It handles parsing the arguments and adding source/test folders.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private boolean addOutputToClasspath
      Add project output directory to classpath.
      private boolean addResourcesToClasspath
      Add project resource directories to classpath.
      protected java.lang.String classpathScope
      Defines the scope of the classpath passed to the plugin.
      private java.lang.String commandlineArgs
      Arguments separated by space for the executed program.
      protected ExecutableDependency executableDependency
      If provided the ExecutableDependency identifies which of the plugin dependencies contains the executable class.
      protected boolean includePluginDependencies
      Indicates if this plugin's dependencies should be used when executing the main class.
      private java.util.List<org.apache.maven.artifact.Artifact> pluginDependencies  
      protected org.apache.maven.project.MavenProject project
      The enclosing project.
      protected org.eclipse.aether.RepositorySystem repositorySystem  
      private org.apache.maven.execution.MavenSession session
      The current build session instance.
      private boolean skip
      Skip the execution.
      private java.io.File sourceRoot
      This folder is added to the list of those folders containing source to be compiled.
      private java.io.File testSourceRoot
      This folder is added to the list of those folders containing source to be compiled for testing.
      • Fields inherited from interface org.apache.maven.plugin.Mojo

        ROLE
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void collectProjectArtifactsAndClasspath​(java.util.List<org.apache.maven.artifact.Artifact> artifacts, java.util.List<java.nio.file.Path> theClasspathFiles)
      Collects the project artifacts in the specified List and the project specific classpath (build output and build test output) Files in the specified List, depending on the plugin classpathScope value.
      protected java.util.Set<org.apache.maven.artifact.Artifact> determineRelevantPluginDependencies()
      Determine all plugin dependencies relevant to the executable.
      protected org.apache.maven.artifact.Artifact findExecutableArtifact()
      Examine the plugin dependencies to find the executable artifact.
      protected java.util.List<org.apache.maven.artifact.Artifact> getPluginDependencies()  
      protected org.apache.maven.execution.MavenSession getSession()  
      protected boolean hasCommandlineArgs()  
      protected boolean isSkip()
      Check if the execution should be skipped
      protected java.lang.String[] parseCommandlineArgs()
      Parses the argument string given by the user.
      protected void registerSourceRoots()
      Register compile and compile tests source roots if necessary
      private java.util.Set<org.apache.maven.artifact.Artifact> resolveExecutableDependencies​(org.apache.maven.artifact.Artifact executableArtifact)
      Resolve the executable dependencies for the specified project
      • 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
      • Methods inherited from interface org.apache.maven.plugin.Mojo

        execute
    • Field Detail

      • repositorySystem

        @Component
        protected org.eclipse.aether.RepositorySystem repositorySystem
      • project

        @Parameter(defaultValue="${project}",
                   readonly=true)
        protected org.apache.maven.project.MavenProject project
        The enclosing project.
      • session

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

        @Parameter(readonly=true,
                   defaultValue="${plugin.artifacts}")
        private java.util.List<org.apache.maven.artifact.Artifact> pluginDependencies
      • executableDependency

        @Parameter
        protected ExecutableDependency executableDependency
        If provided the ExecutableDependency identifies which of the plugin dependencies contains the executable class. This will have the effect of only including plugin dependencies required by the identified ExecutableDependency.

        If includeProjectDependencies is set to true, all of the project dependencies will be included on the executable's classpath. Whether a particular project dependency is a dependency of the identified ExecutableDependency will be irrelevant to its inclusion in the classpath.

        Since:
        1.1-beta-1
      • sourceRoot

        @Parameter(property="sourceRoot")
        private java.io.File sourceRoot
        This folder is added to the list of those folders containing source to be compiled. Use this if your plugin generates source code.
      • testSourceRoot

        @Parameter(property="testSourceRoot")
        private java.io.File testSourceRoot
        This folder is added to the list of those folders containing source to be compiled for testing. Use this if your plugin generates test source code.
      • commandlineArgs

        @Parameter(property="exec.args")
        private java.lang.String commandlineArgs
        Arguments separated by space for the executed program. For example: "-j 20"
      • classpathScope

        @Parameter(property="exec.classpathScope",
                   defaultValue="runtime")
        protected java.lang.String classpathScope
        Defines the scope of the classpath passed to the plugin.
        • runtime (default): Include "compile" and "runtime" scopes
        • compile: Include "compile", "provided", and "system" scopes
        • test: Include all scopes
        • provided: Include "compile", "runtime", "provided", and "system" scopes
        • system: Include "system" scope
        Since 1.1.2, the default value is 'runtime' instead of 'compile'.
      • skip

        @Parameter(property="exec.skip",
                   defaultValue="false",
                   alias="skip")
        private boolean skip
        Skip the execution. Starting with version 1.4.0 the former name skip has been changed into exec.skip.
        Since:
        1.0.1
      • addResourcesToClasspath

        @Parameter(property="addResourcesToClasspath",
                   defaultValue="false")
        private boolean addResourcesToClasspath
        Add project resource directories to classpath. This is especially useful if the exec plugin is used for a code generator that reads its settings from the classpath.
        Since:
        1.5.1
      • addOutputToClasspath

        @Parameter(property="addOutputToClasspath",
                   defaultValue="true")
        private boolean addOutputToClasspath
        Add project output directory to classpath. This might be undesirable when the exec plugin is run before the compile step. Default is true.
        Since:
        1.5.1
      • includePluginDependencies

        @Parameter(property="exec.includePluginsDependencies",
                   defaultValue="false")
        protected boolean includePluginDependencies
        Indicates if this plugin's dependencies should be used when executing the main class.

        This is useful when project dependencies are not appropriate. Using only the plugin dependencies can be particularly useful when the project is not a java project. For example a mvn project using the csharp plugins only expects to see dotnet libraries as dependencies.

        Since:
        3.4.0
    • Constructor Detail

      • AbstractExecMojo

        public AbstractExecMojo()
    • Method Detail

      • collectProjectArtifactsAndClasspath

        protected void collectProjectArtifactsAndClasspath​(java.util.List<org.apache.maven.artifact.Artifact> artifacts,
                                                           java.util.List<java.nio.file.Path> theClasspathFiles)
        Collects the project artifacts in the specified List and the project specific classpath (build output and build test output) Files in the specified List, depending on the plugin classpathScope value.
        Parameters:
        artifacts - the list where to collect the scope specific artifacts
        theClasspathFiles - the list where to collect the scope specific output directories
      • parseCommandlineArgs

        protected java.lang.String[] parseCommandlineArgs()
                                                   throws org.apache.maven.plugin.MojoExecutionException
        Parses the argument string given by the user. Strings are recognized as everything between STRING_WRAPPER. PARAMETER_DELIMITER is ignored inside a string. STRING_WRAPPER and PARAMETER_DELIMITER can be escaped using ESCAPE_CHAR.
        Returns:
        Array of String representing the arguments
        Throws:
        org.apache.maven.plugin.MojoExecutionException - for wrong formatted arguments
      • hasCommandlineArgs

        protected boolean hasCommandlineArgs()
        Returns:
        true of the mojo has command line arguments
      • registerSourceRoots

        protected void registerSourceRoots()
        Register compile and compile tests source roots if necessary
      • isSkip

        protected boolean isSkip()
        Check if the execution should be skipped
        Returns:
        true to skip
      • getSession

        protected final org.apache.maven.execution.MavenSession getSession()
      • getPluginDependencies

        protected final java.util.List<org.apache.maven.artifact.Artifact> getPluginDependencies()
      • findExecutableArtifact

        protected org.apache.maven.artifact.Artifact findExecutableArtifact()
                                                                     throws org.apache.maven.plugin.MojoExecutionException
        Examine the plugin dependencies to find the executable artifact.
        Returns:
        an artifact which refers to the actual executable tool (not a POM)
        Throws:
        org.apache.maven.plugin.MojoExecutionException - if no executable artifact was found
      • determineRelevantPluginDependencies

        protected java.util.Set<org.apache.maven.artifact.Artifact> determineRelevantPluginDependencies()
                                                                                                 throws org.apache.maven.plugin.MojoExecutionException
        Determine all plugin dependencies relevant to the executable. Takes includePlugins, and the executableDependency into consideration.
        Returns:
        a set of Artifact objects. (Empty set is returned if there are no relevant plugin dependencies.)
        Throws:
        org.apache.maven.plugin.MojoExecutionException - if a problem happens resolving the plufin dependencies
      • resolveExecutableDependencies

        private java.util.Set<org.apache.maven.artifact.Artifact> resolveExecutableDependencies​(org.apache.maven.artifact.Artifact executableArtifact)
                                                                                         throws org.apache.maven.plugin.MojoExecutionException
        Resolve the executable dependencies for the specified project
        Parameters:
        executableArtifact - the executable plugin dependency
        Returns:
        a set of Artifacts
        Throws:
        org.apache.maven.plugin.MojoExecutionException - if a failure happens