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.plugin.eclipse; 20 21 import java.util.Map; 22 import java.util.StringTokenizer; 23 24 import org.apache.maven.model.Model; 25 import org.apache.maven.plugin.MojoExecutionException; 26 import org.apache.maven.plugin.MojoFailureException; 27 import org.apache.maven.plugin.eclipse.osgiplugin.EclipseOsgiPlugin; 28 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; 29 import org.codehaus.plexus.util.StringUtils; 30 31 /** 32 * Add eclipse artifacts from an eclipse installation to the local repo. This mojo automatically analize the eclipse 33 * directory, copy plugins jars to the local maven repo, and generates appropriate poms. Use 34 * <code>eclipse:to-maven</code> for the latest naming conventions in place, <code>groupId</code>. 35 * <code>artifactId</code>. 36 * 37 * @author Fabrizio Giustina 38 * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a> 39 * @version $Id: MakeArtifactsMojo.java 691404 2008-09-02 21:57:19Z aheritier $ 40 * @goal make-artifacts 41 * @requiresProject false 42 * @deprecated use {@link EclipseToMavenMojo} for the latest naming conventions 43 */ 44 public class MakeArtifactsMojo 45 extends EclipseToMavenMojo 46 implements Contextualizable 47 { 48 49 /** 50 * Strip qualifier (fourth token) from the plugin version. Qualifiers are for eclipse plugin the equivalent of 51 * timestamped snapshot versions for Maven, but the date is maintained also for released version (e.g. a jar for the 52 * release <code>3.2</code> can be named <code>org.eclipse.core.filesystem_1.0.0.v20060603.jar</code>. It's usually 53 * handy to not to include this qualifier when generating maven artifacts for major releases, while it's needed when 54 * working with eclipse integration/nightly builds. 55 * 56 * @parameter expression="${stripQualifier}" default-value="true" 57 */ 58 private boolean stripQualifier; 59 60 /** 61 * Default token to use as a qualifier. Tipically qualifiers for plugins in the same eclipse build are different. 62 * This parameter can be used to "align" qualifiers so that all the plugins coming from the same eclipse build can 63 * be easily identified. For example, setting this to "M3" will force the pluging versions to be "*.*.*.M3" 64 * 65 * @parameter expression="${forcedQualifier}" 66 */ 67 private String forcedQualifier; 68 69 /** 70 * Resolve version ranges in generated pom dependencies to versions of the other plugins being converted 71 * 72 * @parameter expression="${resolveVersionRanges}" default-value="false" 73 */ 74 private boolean resolveVersionRanges; 75 76 protected String osgiVersionToMavenVersion( String version ) 77 { 78 return osgiVersionToMavenVersion( version, forcedQualifier, stripQualifier ); 79 } 80 81 /** 82 * Get the group id as the three first tokens in artifacts Id e.g. <code>org.eclipse.jdt</code> -> 83 * <code>org.eclipse.jdt</code> 84 * 85 * @param bundleName bundle name 86 * @return group id 87 */ 88 protected String createGroupId( String bundleName ) 89 { 90 if ( StringUtils.countMatches( bundleName, "." ) > 1 ) 91 { 92 StringTokenizer st = new StringTokenizer( bundleName, "." ); 93 int i = 0; 94 String groupId = ""; 95 while ( st.hasMoreTokens() && ( i < 3 ) ) 96 { 97 groupId += "." + st.nextToken(); 98 i++; 99 } 100 return groupId.substring( 1 ); 101 } 102 return bundleName; 103 } 104 105 /** 106 * Get the artifact id equal to the bundleName e.g. <code>org.eclipse.jdt</code> -> <code>org.eclipse.jdt</code> 107 * 108 * @param bundleName bundle name 109 * @return artifact id 110 */ 111 protected String createArtifactId( String bundleName ) 112 { 113 return bundleName; 114 } 115 116 protected void resolveVersionRanges( Model model, Map models ) 117 throws MojoFailureException 118 { 119 if ( resolveVersionRanges ) 120 { 121 super.resolveVersionRanges( model, models ); 122 } 123 else 124 { 125 // do nothing 126 } 127 } 128 129 protected void processPlugin( EclipseOsgiPlugin plugin, Model model, Map plugins, Map models ) 130 throws MojoExecutionException, MojoFailureException 131 { 132 if ( this.resolveVersionRanges && plugins.containsKey( getKey( model ) ) ) 133 { 134 throw new MojoFailureException( "There are two versions of the same plugin, can not resolve versions: " 135 + getKey( model ) ); 136 } 137 138 super.processPlugin( plugin, model, plugins, models ); 139 } 140 141 }