View Javadoc
1   package org.apache.maven.shared.invoker;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.io.File;
23  import java.io.InputStream;
24  
25  /**
26   * Provides a facade to invoke Maven.
27   * 
28   * @version $Id: Invoker.java 1712636 2015-11-04 20:35:22Z khmarbaise $
29   */
30  public interface Invoker
31  {
32  
33      /**
34       * The role name used to register implementations of this interface within Plexus.
35       */
36      String ROLE = Invoker.class.getName();
37  
38      /**
39       * Executes Maven using the parameters specified by the given invocation request. Parameters not specified by the
40       * invocation request will be derived from the state of this invoker instance. In case both the invoker instance and
41       * the invocation request provide a value for a particular option, the value from the invocation request dominates.
42       * 
43       * @param request The invocation request to execute, must not be <code>null</code>.
44       * @return The result of the Maven invocation, never <code>null</code>.
45       * @throws MavenInvocationException
46       */
47      InvocationResult execute( InvocationRequest request )
48          throws MavenInvocationException;
49  
50      /**
51       * Gets the path to the base directory of the local repository to use for the Maven invocation.
52       * 
53       * @return The path to the base directory of the local repository or <code>null</code> to use the location from
54       *         the <code>settings.xml</code>.
55       */
56      File getLocalRepositoryDirectory();
57  
58      /**
59       * Gets the working directory for the Maven invocation.
60       * 
61       * @return The working directory for the Maven invocation or <code>null</code> if the working directory is derived
62       *         from the base directory of the processed POM.
63       */
64      File getWorkingDirectory();
65  
66      /**
67       * Gets the logger used by this invoker to output diagnostic messages.
68       * 
69       * @return The logger used by this invoker to output diagnostic messages, never <code>null</code>.
70       */
71      InvokerLogger getLogger();
72  
73      /**
74       * Gets the path to the base directory of the Maven installation used to invoke Maven.
75       * 
76       * @return The path to the base directory of the Maven installation or <code>null</code> if using the default
77       *         Maven installation.
78       */
79      File getMavenHome();
80  
81      /**
82       * Sets the path to the base directory of the Maven installation used to invoke Maven. This parameter may be left
83       * unspecified to use the default Maven installation which will be discovered by evaluating the system property
84       * <code>maven.home</code> and the environment variable <code>M2_HOME</code>.
85       * 
86       * @param mavenHome The path to the base directory of the Maven installation, may be <code>null</code> to use the
87       *            default Maven installation.
88       * @return This invoker instance.
89       */
90      Invoker setMavenHome( File mavenHome );
91  
92      /**
93       * Get the customized File of the Maven executable.
94       * 
95       * @return the custom Maven executable, otherwise {@code null} 
96       */
97      File getMavenExecutable();
98  
99      /**
100      * {@code mavenExecutable} can either be a file relative to ${maven.home}/bin/ or an absolute file.
101      * 
102      * @param mavenExecutable the executable
103      * @return This invoker instance
104      */
105     Invoker setMavenExecutable( File mavenExecutable );
106 
107     /**
108      * Sets the path to the base directory of the local repository to use for the Maven invocation.
109      * 
110      * @param localRepositoryDirectory The path to the base directory of the local repository or <code>null</code> to
111      *            use the location from the <code>settings.xml</code>.
112      * @return This invoker instance.
113      */
114     Invoker setLocalRepositoryDirectory( File localRepositoryDirectory );
115 
116     /**
117      * Sets the logger used by this invoker to output diagnostic messages.
118      * 
119      * @param logger The logger used by this invoker to output diagnostic messages, may be <code>null</code> to use a
120      *            default logger.
121      * @return This invoker instance.
122      */
123     Invoker setLogger( InvokerLogger logger );
124 
125     /**
126      * Sets the working directory for the Maven invocation.
127      * 
128      * @param workingDirectory The working directory for the Maven invocation, may be <code>null</code> to derive the
129      *            working directory from the base directory of the processed POM.
130      * @return This invoker instance.
131      */
132     Invoker setWorkingDirectory( File workingDirectory );
133 
134     /**
135      * Sets the input stream used to provide input for the invoked Maven build. This is in particular useful when
136      * invoking Maven in interactive mode.
137      * 
138      * @param inputStream The input stream used to provide input for the invoked Maven build, may be <code>null</code>
139      *            if not required.
140      * @return This invoker instance.
141      */
142     Invoker setInputStream( InputStream inputStream );
143 
144     /**
145      * Sets the handler used to capture the standard output from the Maven build.
146      * 
147      * @param outputHandler The output handler, may be <code>null</code> if the output is not of interest.
148      * @return This invoker instance.
149      */
150     Invoker setOutputHandler( InvocationOutputHandler outputHandler );
151 
152     /**
153      * Sets the handler used to capture the error output from the Maven build.
154      * 
155      * @param errorHandler The error handler, may be <code>null</code> if the output is not of interest.
156      * @return This invoker instance.
157      */
158     Invoker setErrorHandler( InvocationOutputHandler errorHandler );
159 }