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   */
29  public interface Invoker
30  {
31  
32      /**
33       * The role name used to register implementations of this interface within Plexus.
34       */
35      String ROLE = Invoker.class.getName();
36  
37      /**
38       * Executes Maven using the parameters specified by the given invocation request. Parameters not specified by the
39       * invocation request will be derived from the state of this invoker instance. In case both the invoker instance and
40       * the invocation request provide a value for a particular option, the value from the invocation request dominates.
41       *
42       * @param request The invocation request to execute, must not be <code>null</code>.
43       * @return The result of the Maven invocation, never <code>null</code>.
44       * @throws MavenInvocationException if cannot configure correctly execution parameters
45       */
46      InvocationResult execute( InvocationRequest request )
47          throws MavenInvocationException;
48  
49      /**
50       * Gets the path to the base directory of the local repository to use for the Maven invocation.
51       *
52       * @return The path to the base directory of the local repository or <code>null</code> to use the location from
53       *         the <code>settings.xml</code>.
54       */
55      File getLocalRepositoryDirectory();
56  
57      /**
58       * Gets the working directory for the Maven invocation.
59       *
60       * @return The working directory for the Maven invocation or <code>null</code> if the working directory is derived
61       *         from the base directory of the processed POM.
62       */
63      File getWorkingDirectory();
64  
65      /**
66       * Gets the logger used by this invoker to output diagnostic messages.
67       *
68       * @return The logger used by this invoker to output diagnostic messages, never <code>null</code>.
69       */
70      InvokerLogger getLogger();
71  
72      /**
73       * Gets the path to the base directory of the Maven installation used to invoke Maven.
74       *
75       * @return The path to the base directory of the Maven installation or <code>null</code> if using the default
76       *         Maven installation.
77       */
78      File getMavenHome();
79  
80      /**
81       * Sets the path to the base directory of the Maven installation used to invoke Maven. This parameter may be left
82       * unspecified to use the default Maven installation which will be discovered by evaluating the system property
83       * <code>maven.home</code>.
84       *
85       * @param mavenHome The path to the base directory of the Maven installation, may be <code>null</code> to use the
86       *            default Maven installation.
87       * @return This invoker instance.
88       */
89      Invoker setMavenHome( File mavenHome );
90  
91      /**
92       * Get the customized File of the Maven executable.
93       *
94       * @return the custom Maven executable, otherwise {@code null}
95       */
96      File getMavenExecutable();
97  
98      /**
99       * {@code mavenExecutable} can either be a file relative to ${maven.home}/bin/ or an absolute file.
100      *
101      * @param mavenExecutable the executable
102      * @return This invoker instance
103      */
104     Invoker setMavenExecutable( File mavenExecutable );
105 
106     /**
107      * Sets the path to the base directory of the local repository to use for the Maven invocation.
108      *
109      * @param localRepositoryDirectory The path to the base directory of the local repository or <code>null</code> to
110      *            use the location from the <code>settings.xml</code>.
111      * @return This invoker instance.
112      */
113     Invoker setLocalRepositoryDirectory( File localRepositoryDirectory );
114 
115     /**
116      * Sets the logger used by this invoker to output diagnostic messages.
117      *
118      * @param logger The logger used by this invoker to output diagnostic messages, may be <code>null</code> to use a
119      *            default logger.
120      * @return This invoker instance.
121      */
122     Invoker setLogger( InvokerLogger logger );
123 
124     /**
125      * Sets the working directory for the Maven invocation.
126      *
127      * @param workingDirectory The working directory for the Maven invocation, may be <code>null</code> to derive the
128      *            working directory from the base directory of the processed POM.
129      * @return This invoker instance.
130      *
131      * @deprecated Please use {@link InvocationRequest#setBaseDirectory(File)}
132      */
133     @Deprecated
134     Invoker setWorkingDirectory( File workingDirectory );
135 
136     /**
137      * Sets the input stream used to provide input for the invoked Maven build. This is in particular useful when
138      * invoking Maven in interactive mode.
139      *
140      * @param inputStream The input stream used to provide input for the invoked Maven build, may be <code>null</code>
141      *            if not required.
142      * @return This invoker instance.
143      *
144      * @deprecated Please use {@link InvocationRequest#setInputStream(InputStream)}
145      */
146     @Deprecated
147     Invoker setInputStream( InputStream inputStream );
148 
149     /**
150      * Sets the handler used to capture the standard output from the Maven build.
151      *
152      * @param outputHandler The output handler, may be <code>null</code> if the output is not of interest.
153      * @return This invoker instance.
154      *
155      * @deprecated Please use {@link InvocationRequest#setOutputHandler(InvocationOutputHandler)}
156      */
157     @Deprecated
158     Invoker setOutputHandler( InvocationOutputHandler outputHandler );
159 
160     /**
161      * Sets the handler used to capture the error output from the Maven build.
162      *
163      * @param errorHandler The error handler, may be <code>null</code> if the output is not of interest.
164      * @return This invoker instance.
165      *
166      * @deprecated Pleas use {@link InvocationRequest#setErrorHandler(InvocationOutputHandler)}
167      */
168     @Deprecated
169     Invoker setErrorHandler( InvocationOutputHandler errorHandler );
170 }