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.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  }