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 }