View Javadoc

1   package com.aurea.maven.plugins.util;
2   
3   /*
4    * Sonatype Application Build Lifecycle
5    * Copyright (C) 2009 Sonatype, Inc.                                                                                                                          
6    * 
7    * This program is free software: you can redistribute it and/or modify
8    * it under the terms of the GNU General Public License as published by
9    * the Free Software Foundation, either version 3 of the License, or
10   * (at your option) any later version.
11   * 
12   * This program is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   * GNU General Public License for more details.
16   * 
17   * You should have received a copy of the GNU General Public License
18   * along with this program.  If not, see http://www.gnu.org/licenses/.
19   *
20   */
21  
22  import java.util.HashSet;
23  import java.util.Set;
24  
25  import org.apache.maven.artifact.Artifact;
26  import org.apache.maven.artifact.handler.ArtifactHandler;
27  import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
28  import org.apache.maven.execution.MavenSession;
29  import org.apache.maven.plugin.Mojo;
30  import org.apache.maven.plugin.MojoExecutionException;
31  import org.apache.maven.plugin.logging.Log;
32  import org.apache.maven.project.MavenProject;
33  
34  /**
35   * Injects an {@link ArtifactHandler} instance, loaded from build extensions, into the current project's
36   * {@link Artifact} instance. The new handler is loaded using the project's packaging. This mojo compensates for bugs in
37   * the build-extension handling of Maven versions prior to 2.2.1.
38   * 
39   * @goal inject-artifact-handler
40   * @phase initialize
41   */
42  public class InjectArtifactHandlerMojo implements Mojo {
43  
44  
45    /**
46     * The current project instance.
47     * 
48     * @parameter default-value="${project}"
49     * @required
50     * @readonly
51     */
52    private MavenProject           project;
53  
54    /**
55     * The {@link ArtifactHandlerManager} into which any extension {@link ArtifactHandler} instances should have been
56     * injected when the extensions were loaded.
57     * 
58     * @component
59     */
60    private ArtifactHandlerManager artifactHandlerManager;
61  
62    /**
63     * @parameter default-value="${session}"
64     * @required
65     * @readonly
66     */
67    private MavenSession           session;
68  
69  
70    private Log                    log;
71  
72    /**
73     * {@inheritDoc}
74     */
75  @SuppressWarnings("deprecation")
76  public void execute() throws MojoExecutionException {
77  
78        getLog().info("Injecting the Artifact Handlers anyway.");
79  //
80  //    Map<String, ?> handlerDescriptors = session.getContainer().getComponentDescriptorMap(ArtifactHandler.ROLE);
81  //    if (handlerDescriptors != null) {
82  //      getLog().info("Registering all unregistered ArtifactHandlers...");
83  //
84  //      if (artifactHandlerManager instanceof DefaultArtifactHandlerManager) {
85  //        Set<String> existingHints = ((DefaultArtifactHandlerManager) artifactHandlerManager).getHandlerTypes();
86  //        if (existingHints != null) {
87  //          for (String hint : existingHints) {
88  //        	  getLog().info("DEBUG - REMOVE : " + hint + " - ext: " + ((DefaultArtifactHandlerManager) artifactHandlerManager).getArtifactHandler(hint).getExtension());
89  //        	 
90  //            handlerDescriptors.remove(hint);
91  //          }
92  //        }
93  //      }
94  //
95  //      if (handlerDescriptors.isEmpty()) {
96  //        getLog().info("All ArtifactHandlers are registered. Continuing...");
97  //      } else {
98  //        Map<String, ArtifactHandler> unregisteredHandlers = new HashMap<String, ArtifactHandler>(handlerDescriptors
99  //            .size());
100 //
101 //        for (String hint : handlerDescriptors.keySet()) {
102 //          try {
103 //            unregisteredHandlers.put(hint, (ArtifactHandler) session.lookup(ArtifactHandler.ROLE, hint));
104 //            getLog().info("Adding ArtifactHandler for: " + hint);
105 //          } catch (ComponentLookupException e) {
106 //            getLog().warn("Failed to lookup ArtifactHandler with hint: " + hint + ". Reason: " + e.getMessage(), e);
107 //          }
108 //        }
109 //
110 //        artifactHandlerManager.addHandlers(unregisteredHandlers);
111 //      }
112 //    }
113 
114     getLog().info("Setting ArtifactHandler on project-artifact: " + project.getId() + "...");
115 
116     Set<Artifact> artifacts = new HashSet<Artifact>();
117     artifacts.add(project.getArtifact());
118 
119     Set<Artifact> dependencyArtifacts = project.getDependencyArtifacts();
120     if (dependencyArtifacts != null && !dependencyArtifacts.isEmpty()) {
121       artifacts.addAll(dependencyArtifacts);
122     }
123 
124     for (Artifact artifact : artifacts) {
125       String type = artifact.getType();
126       ArtifactHandler handler = artifactHandlerManager.getArtifactHandler(type);
127 
128       getLog().debug(
129           "Artifact: " + artifact.getId() + "\nType: " + type + "\nArtifactHandler extension: "
130               + handler.getExtension());
131 
132       artifact.setArtifactHandler(handler);
133     }
134 
135     getLog().info("...done.");
136   }
137 
138   /**
139    * {@inheritDoc}
140    */
141   public Log getLog() {
142 
143     return log;
144   }
145 
146   
147   /**
148    * {@inheritDoc}
149    */
150   public void setLog(final Log _log) {
151 
152     this.log = _log;
153   }
154 
155 }