001package org.apache.maven.execution;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *  http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import java.io.File;
023import java.util.Date;
024import java.util.List;
025import java.util.Properties;
026
027import org.apache.maven.artifact.repository.ArtifactRepository;
028import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
029import org.apache.maven.model.Profile;
030import org.apache.maven.project.ProjectBuildingRequest;
031import org.apache.maven.settings.Mirror;
032import org.apache.maven.settings.Proxy;
033import org.apache.maven.settings.Server;
034import org.codehaus.plexus.logging.Logger;
035import org.eclipse.aether.RepositoryCache;
036import org.eclipse.aether.repository.WorkspaceReader;
037import org.eclipse.aether.transfer.TransferListener;
038
039/**
040 * @author Jason van Zyl
041 */
042public interface MavenExecutionRequest
043{
044    // ----------------------------------------------------------------------
045    // Logging
046    // ----------------------------------------------------------------------
047
048    int LOGGING_LEVEL_DEBUG = Logger.LEVEL_DEBUG;
049
050    int LOGGING_LEVEL_INFO = Logger.LEVEL_INFO;
051
052    int LOGGING_LEVEL_WARN = Logger.LEVEL_WARN;
053
054    int LOGGING_LEVEL_ERROR = Logger.LEVEL_ERROR;
055
056    int LOGGING_LEVEL_FATAL = Logger.LEVEL_FATAL;
057
058    int LOGGING_LEVEL_DISABLED = Logger.LEVEL_DISABLED;
059
060    // ----------------------------------------------------------------------
061    // Reactor Failure Mode
062    // ----------------------------------------------------------------------
063
064    String REACTOR_FAIL_FAST = "FAIL_FAST";
065
066    String REACTOR_FAIL_AT_END = "FAIL_AT_END";
067
068    String REACTOR_FAIL_NEVER = "FAIL_NEVER";
069
070    // ----------------------------------------------------------------------
071    // Reactor Make Mode
072    // ----------------------------------------------------------------------
073
074    String REACTOR_MAKE_UPSTREAM = "make-upstream";
075
076    String REACTOR_MAKE_DOWNSTREAM = "make-downstream";
077
078    String REACTOR_MAKE_BOTH = "make-both";
079
080    // ----------------------------------------------------------------------
081    // Artifact repository policies
082    // ----------------------------------------------------------------------
083
084    String CHECKSUM_POLICY_FAIL = ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL;
085
086    String CHECKSUM_POLICY_WARN = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
087
088    // ----------------------------------------------------------------------
089    //
090    // ----------------------------------------------------------------------
091
092    // Base directory
093    MavenExecutionRequest setBaseDirectory( File basedir );
094    String getBaseDirectory();
095
096    // Timing (remove this)
097    MavenExecutionRequest setStartTime( Date start );
098    Date getStartTime();
099
100    // Goals
101    MavenExecutionRequest setGoals( List<String> goals );
102    List<String> getGoals();
103
104    // Properties
105
106    /**
107     * Sets the system properties to use for interpolation and profile activation. The system properties are collected
108     * from the runtime environment like {@link System#getProperties()} and environment variables.
109     *
110     * @param systemProperties The system properties, may be {@code null}.
111     * @return This request, never {@code null}.
112     */
113    MavenExecutionRequest setSystemProperties( Properties systemProperties );
114
115    /**
116     * Gets the system properties to use for interpolation and profile activation. The system properties are collected
117     * from the runtime environment like {@link System#getProperties()} and environment variables.
118     *
119     * @return The system properties, never {@code null}.
120     */
121    Properties getSystemProperties();
122
123    /**
124     * Sets the user properties to use for interpolation and profile activation. The user properties have been
125     * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
126     * line.
127     *
128     * @param userProperties The user properties, may be {@code null}.
129     * @return This request, never {@code null}.
130     */
131    MavenExecutionRequest setUserProperties( Properties userProperties );
132
133    /**
134     * Gets the user properties to use for interpolation and profile activation. The user properties have been
135     * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
136     * line.
137     *
138     * @return The user properties, never {@code null}.
139     */
140    Properties getUserProperties();
141
142    // Reactor
143    MavenExecutionRequest setReactorFailureBehavior( String failureBehavior );
144    String getReactorFailureBehavior();
145
146    MavenExecutionRequest setSelectedProjects( List<String> projects );
147    List<String> getSelectedProjects();
148
149    MavenExecutionRequest setResumeFrom( String project );
150    String getResumeFrom();
151
152    MavenExecutionRequest setMakeBehavior( String makeBehavior );
153    String getMakeBehavior();
154
155    void setThreadCount( String threadCount );
156    String getThreadCount();
157    boolean isThreadConfigurationPresent();
158    void setPerCoreThreadCount( boolean perCoreThreadCount );
159    boolean isPerCoreThreadCount();
160
161    // Recursive (really to just process the top-level POM)
162    MavenExecutionRequest setRecursive( boolean recursive );
163    boolean isRecursive();
164
165    MavenExecutionRequest setPom( File pom );
166    File getPom();
167
168    // Errors
169    MavenExecutionRequest setShowErrors( boolean showErrors );
170    boolean isShowErrors();
171
172    // Transfer listeners
173    MavenExecutionRequest setTransferListener( TransferListener transferListener );
174    TransferListener getTransferListener();
175
176    // Logging
177    MavenExecutionRequest setLoggingLevel( int loggingLevel );
178    int getLoggingLevel();
179
180    // Update snapshots
181    MavenExecutionRequest setUpdateSnapshots( boolean updateSnapshots );
182    boolean isUpdateSnapshots();
183
184    MavenExecutionRequest setNoSnapshotUpdates( boolean noSnapshotUpdates );
185    boolean isNoSnapshotUpdates();
186
187    // Checksum policy
188    MavenExecutionRequest setGlobalChecksumPolicy( String globalChecksumPolicy );
189    String getGlobalChecksumPolicy();
190
191    // Local repository
192    MavenExecutionRequest setLocalRepositoryPath( String localRepository );
193    MavenExecutionRequest setLocalRepositoryPath( File localRepository );
194    File getLocalRepositoryPath();
195    MavenExecutionRequest setLocalRepository( ArtifactRepository repository );
196    ArtifactRepository getLocalRepository();
197
198    // Interactive
199    MavenExecutionRequest setInteractiveMode( boolean interactive );
200    boolean isInteractiveMode();
201
202    // Offline
203    MavenExecutionRequest setOffline( boolean offline );
204    boolean isOffline();
205
206    boolean isCacheTransferError();
207    MavenExecutionRequest setCacheTransferError( boolean cacheTransferError );
208
209    boolean isCacheNotFound();
210    MavenExecutionRequest setCacheNotFound( boolean cacheNotFound );
211
212    // Profiles
213    List<Profile> getProfiles();
214    MavenExecutionRequest addProfile( Profile profile );
215    MavenExecutionRequest setProfiles( List<Profile> profiles );
216    MavenExecutionRequest addActiveProfile( String profile );
217    MavenExecutionRequest addActiveProfiles( List<String> profiles );
218    MavenExecutionRequest setActiveProfiles( List<String> profiles );
219    List<String> getActiveProfiles();
220    MavenExecutionRequest addInactiveProfile( String profile );
221    MavenExecutionRequest addInactiveProfiles( List<String> profiles );
222    MavenExecutionRequest setInactiveProfiles( List<String> profiles );
223    List<String> getInactiveProfiles();
224
225    // Proxies
226    List<Proxy> getProxies();
227    MavenExecutionRequest setProxies( List<Proxy> proxies );
228    MavenExecutionRequest addProxy( Proxy proxy );
229
230    // Servers
231    List<Server> getServers();
232    MavenExecutionRequest setServers( List<Server> servers );
233    MavenExecutionRequest addServer( Server server );
234
235    // Mirrors
236    List<Mirror> getMirrors();
237    MavenExecutionRequest setMirrors( List<Mirror> mirrors );
238    MavenExecutionRequest addMirror( Mirror mirror );
239
240    // Plugin groups
241    List<String> getPluginGroups();
242    MavenExecutionRequest setPluginGroups( List<String> pluginGroups );
243    MavenExecutionRequest addPluginGroup( String pluginGroup );
244    MavenExecutionRequest addPluginGroups( List<String> pluginGroups );
245
246    boolean isProjectPresent();
247    MavenExecutionRequest setProjectPresent( boolean isProjectPresent );
248
249    File getUserSettingsFile();
250    MavenExecutionRequest setUserSettingsFile( File userSettingsFile );
251
252    File getGlobalSettingsFile();
253    MavenExecutionRequest setGlobalSettingsFile( File globalSettingsFile );
254
255    MavenExecutionRequest addRemoteRepository( ArtifactRepository repository );
256    MavenExecutionRequest addPluginArtifactRepository( ArtifactRepository repository );
257
258    /**
259     * Set a new list of remote repositories to use the execution request. This is necessary if you perform
260     * transformations on the remote repositories being used. For example if you replace existing repositories with
261     * mirrors then it's easier to just replace the whole list with a new list of transformed repositories.
262     *
263     * @param repositories
264     * @return This request, never {@code null}.
265     */
266    MavenExecutionRequest setRemoteRepositories( List<ArtifactRepository> repositories );
267    List<ArtifactRepository> getRemoteRepositories();
268
269    MavenExecutionRequest setPluginArtifactRepositories( List<ArtifactRepository> repositories );
270    List<ArtifactRepository> getPluginArtifactRepositories();
271
272    MavenExecutionRequest setRepositoryCache( RepositoryCache repositoryCache );
273    RepositoryCache getRepositoryCache();
274
275    WorkspaceReader getWorkspaceReader();
276    MavenExecutionRequest setWorkspaceReader( WorkspaceReader workspaceReader );
277
278    File getUserToolchainsFile();
279    MavenExecutionRequest setUserToolchainsFile( File userToolchainsFile );
280
281    ExecutionListener getExecutionListener();
282    MavenExecutionRequest setExecutionListener( ExecutionListener executionListener );
283
284    ProjectBuildingRequest getProjectBuildingRequest();
285
286    /**
287     * @since 3.1
288     */
289    boolean isUseLegacyLocalRepository();
290
291    /**
292     * @since 3.1
293     */
294    MavenExecutionRequest setUseLegacyLocalRepository( boolean useLegacyLocalRepository );
295
296}