| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| InjectArtifactHandlerMojo |
|
| 2.0;2 |
| 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 | 0 | 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 | 0 | 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 | 0 | getLog().info("Setting ArtifactHandler on project-artifact: " + project.getId() + "..."); |
| 115 | ||
| 116 | 0 | Set<Artifact> artifacts = new HashSet<Artifact>(); |
| 117 | 0 | artifacts.add(project.getArtifact()); |
| 118 | ||
| 119 | 0 | Set<Artifact> dependencyArtifacts = project.getDependencyArtifacts(); |
| 120 | 0 | if (dependencyArtifacts != null && !dependencyArtifacts.isEmpty()) { |
| 121 | 0 | artifacts.addAll(dependencyArtifacts); |
| 122 | } | |
| 123 | ||
| 124 | 0 | for (Artifact artifact : artifacts) { |
| 125 | 0 | String type = artifact.getType(); |
| 126 | 0 | ArtifactHandler handler = artifactHandlerManager.getArtifactHandler(type); |
| 127 | ||
| 128 | 0 | getLog().debug( |
| 129 | "Artifact: " + artifact.getId() + "\nType: " + type + "\nArtifactHandler extension: " | |
| 130 | + handler.getExtension()); | |
| 131 | ||
| 132 | 0 | artifact.setArtifactHandler(handler); |
| 133 | 0 | } |
| 134 | ||
| 135 | 0 | getLog().info("...done."); |
| 136 | 0 | } |
| 137 | ||
| 138 | /** | |
| 139 | * {@inheritDoc} | |
| 140 | */ | |
| 141 | public Log getLog() { | |
| 142 | ||
| 143 | 0 | return log; |
| 144 | } | |
| 145 | ||
| 146 | ||
| 147 | /** | |
| 148 | * {@inheritDoc} | |
| 149 | */ | |
| 150 | public void setLog(final Log _log) { | |
| 151 | ||
| 152 | 0 | this.log = _log; |
| 153 | 0 | } |
| 154 | ||
| 155 | } |