View Javadoc

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 }