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