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.eventspy;
20
21 import java.util.Map;
22
23 /**
24 * A core extension to monitor Maven's execution. Typically, such an extension gets loaded into Maven by specifying the
25 * property {@code maven.ext.class.path} on the command line. As soon as dependency injection is set up, Maven
26 * looks up all implementers of this interface and calls their {@link #init(Context)} method. <em>Note:</em>
27 * Implementors are strongly advised to inherit from {@link AbstractEventSpy} instead of directly implementing this
28 * interface.
29 * @since 3.0.2
30 */
31 public interface EventSpy {
32 /**
33 * Context
34 */
35 interface Context {
36
37 /**
38 * Gets key-value pairs providing information about the Maven runtime.
39 *
40 * @return The key-value pairs, never {@code null}.
41 */
42 Map<String, Object> getData();
43 }
44
45 /**
46 * Initializes the spy.
47 *
48 * @param context The event spy context, never {@code null}.
49 */
50 void init(Context context) throws Exception;
51
52 /**
53 * Notifies the spy of some build event/operation.
54 *
55 * @param event The event, never {@code null}.
56 * @see org.apache.maven.settings.building.SettingsBuildingRequest
57 * @see org.apache.maven.settings.building.SettingsBuildingResult
58 * @see org.apache.maven.execution.MavenExecutionRequest
59 * @see org.apache.maven.execution.MavenExecutionResult
60 * @see org.apache.maven.project.DependencyResolutionRequest
61 * @see org.apache.maven.project.DependencyResolutionResult
62 * @see org.apache.maven.execution.ExecutionEvent
63 * @see org.eclipse.aether.RepositoryEvent
64 */
65 void onEvent(Object event) throws Exception;
66
67 /**
68 * Notifies the spy of Maven's termination, allowing it to free any resources allocated by it.
69 */
70 void close() throws Exception;
71 }