001 package org.apache.maven.plugin.plugin.metadata;
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
022 import org.apache.maven.artifact.Artifact;
023 import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
024 import org.apache.maven.artifact.repository.metadata.GroupRepositoryMetadata;
025 import org.apache.maven.artifact.repository.metadata.Versioning;
026 import org.apache.maven.plugin.AbstractMojo;
027 import org.apache.maven.plugin.MojoExecutionException;
028 import org.apache.maven.plugin.descriptor.PluginDescriptor;
029 import org.apache.maven.plugins.annotations.Component;
030 import org.apache.maven.plugins.annotations.LifecyclePhase;
031 import org.apache.maven.plugins.annotations.Mojo;
032 import org.apache.maven.plugins.annotations.Parameter;
033 import org.apache.maven.project.MavenProject;
034
035 /**
036 * Inject any plugin-specific
037 * <a href="/ref/current/maven-repository-metadata/repository-metadata.html">artifact metadata</a> to the project's
038 * artifact, for subsequent installation and deployment.
039 * It is used:
040 * <ol>
041 * <li>to add the <code>latest</code> metadata (which is plugin-specific) for shipping alongside the plugin's artifact</li>
042 * <li>to define plugin mapping in the group</li>
043 * </ol>
044 *
045 * @see ArtifactRepositoryMetadata
046 * @see GroupRepositoryMetadata
047 * @version $Id: AddPluginArtifactMetadataMojo.java 1345787 2012-06-03 21:58:22Z hboutemy $
048 * @since 2.0
049 */
050 @Mojo( name = "addPluginArtifactMetadata", defaultPhase = LifecyclePhase.PACKAGE, threadSafe = true )
051 public class AddPluginArtifactMetadataMojo
052 extends AbstractMojo
053 {
054 /**
055 * The project artifact, which should have the <code>latest</code> metadata added to it.
056 */
057 @Component
058 private MavenProject project;
059
060 /**
061 * The prefix for the plugin goal.
062 */
063 @Parameter
064 private String goalPrefix;
065
066 /**
067 * Set this to "true" to skip invoking any goals or reports of the plugin.
068 *
069 * @since 2.8
070 */
071 @Parameter( defaultValue = "false", property = "maven.plugin.skip" )
072 private boolean skip;
073
074 /** {@inheritDoc} */
075 public void execute()
076 throws MojoExecutionException
077 {
078 if ( skip )
079 {
080 getLog().warn( "Execution skipped" );
081 return;
082 }
083 Artifact projectArtifact = project.getArtifact();
084
085 Versioning versioning = new Versioning();
086 versioning.setLatest( projectArtifact.getVersion() );
087 versioning.updateTimestamp();
088 ArtifactRepositoryMetadata metadata = new ArtifactRepositoryMetadata( projectArtifact, versioning );
089 projectArtifact.addMetadata( metadata );
090
091 GroupRepositoryMetadata groupMetadata = new GroupRepositoryMetadata( project.getGroupId() );
092 groupMetadata.addPluginMapping( getGoalPrefix(), project.getArtifactId(), project.getName() );
093
094 projectArtifact.addMetadata( groupMetadata );
095 }
096
097 /**
098 * @return the goal prefix parameter or the goal prefix from the Plugin artifactId.
099 */
100 private String getGoalPrefix()
101 {
102 if ( goalPrefix == null )
103 {
104 goalPrefix = PluginDescriptor.getGoalPrefixFromArtifactId( project.getArtifactId() );
105 }
106
107 return goalPrefix;
108 }
109 }