View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.api.cli;
20  
21  import java.io.InputStream;
22  import java.io.OutputStream;
23  import java.nio.file.Path;
24  import java.util.List;
25  import java.util.Map;
26  import java.util.Optional;
27  
28  import org.apache.maven.api.annotations.Experimental;
29  import org.apache.maven.api.annotations.Immutable;
30  import org.apache.maven.api.annotations.Nonnull;
31  import org.apache.maven.api.cli.extensions.CoreExtension;
32  import org.apache.maven.api.services.Lookup;
33  import org.apache.maven.api.services.MessageBuilderFactory;
34  
35  /**
36   * Represents a Maven invocation request, encapsulating all necessary information
37   * for invoking a Maven build or command. Arguments are parsed and exposed via methods.
38   *
39   * @since 4.0.0
40   */
41  @Immutable
42  @Experimental
43  public interface InvokerRequest {
44      /**
45       * The parser request this instance was created from.
46       */
47      @Nonnull
48      ParserRequest parserRequest();
49  
50      /**
51       * Returns the current working directory for the Maven execution.
52       * This is typically the directory from which Maven was invoked.
53       *
54       * @return the current working directory path
55       */
56      @Nonnull
57      Path cwd();
58  
59      /**
60       * Returns the Maven installation directory.
61       * This is usually set by the Maven launcher script using the "maven.home" system property.
62       *
63       * @return the Maven installation directory path
64       */
65      @Nonnull
66      Path installationDirectory();
67  
68      /**
69       * Returns the user's home directory.
70       * This is typically obtained from the "user.home" system property.
71       *
72       * @return the user's home directory path
73       */
74      @Nonnull
75      Path userHomeDirectory();
76  
77      /**
78       * Returns the list of extra JVM arguments to be passed to the forked process.
79       * These arguments allow for customization of the JVM environment in which tool will run.
80       * This property is used ONLY by executors and invokers that spawn a new JVM.
81       *
82       * @return an Optional containing the list of extra JVM arguments, or empty if not specified
83       */
84      @Nonnull
85      Optional<List<String>> jvmArguments();
86  
87      /**
88       * Shorthand for {@link Logger} to use.
89       */
90      default Logger logger() {
91          return parserRequest().logger();
92      }
93  
94      /**
95       * Shorthand for {@link MessageBuilderFactory}.
96       */
97      default MessageBuilderFactory messageBuilderFactory() {
98          return parserRequest().messageBuilderFactory();
99      }
100 
101     /**
102      * Shorthand for {@link Lookup}.
103      */
104     default Lookup lookup() {
105         return parserRequest().lookup();
106     }
107 
108     /**
109      * Returns a map of user-defined properties for the Maven execution.
110      * These properties can be set using the -D command-line option.
111      *
112      * @return an unmodifiable map of user properties
113      */
114     @Nonnull
115     Map<String, String> userProperties();
116 
117     /**
118      * Returns a map of system properties for the Maven execution.
119      * These include both Java system properties and Maven-specific system properties.
120      *
121      * @return an unmodifiable map of system properties
122      */
123     @Nonnull
124     Map<String, String> systemProperties();
125 
126     /**
127      * Returns the top-level directory of the Maven invocation.
128      * This is typically the directory containing the POM file being executed.
129      *
130      * @return the top-level directory path
131      */
132     @Nonnull
133     Path topDirectory();
134 
135     /**
136      * Returns the root directory of the Maven invocation, if found. This is determined by the presence of a
137      * {@code .mvn} directory or a POM with the root="true" property but is not always applicable (ie invocation
138      * from outside a checkout).
139      *
140      * @return the root directory path, if present
141      */
142     @Nonnull
143     Optional<Path> rootDirectory();
144 
145     /**
146      * Returns the input stream for the Maven execution, if running in embedded mode.
147      *
148      * @return an {@link Optional} containing the input stream, or empty if not applicable
149      */
150     @Nonnull
151     Optional<InputStream> in();
152 
153     /**
154      * Returns the output stream for the Maven execution, if running in embedded mode.
155      *
156      * @return an {@link Optional} containing the output stream, or empty if not applicable
157      */
158     @Nonnull
159     Optional<OutputStream> out();
160 
161     /**
162      * Returns the error stream for the Maven execution, if running in embedded mode.
163      *
164      * @return an {@link Optional} containing the error stream, or empty if not applicable
165      */
166     @Nonnull
167     Optional<OutputStream> err();
168 
169     /**
170      * Returns a list of core extensions, if configured in the .mvn/extensions.xml file.
171      *
172      * @return an {@link Optional} containing the list of core extensions, or empty if not configured
173      */
174     @Nonnull
175     Optional<List<CoreExtension>> coreExtensions();
176 
177     /**
178      * Returns the options associated with this invocation request.
179      *
180      * @return the options object
181      */
182     @Nonnull
183     Options options();
184 }