View Javadoc
1   package org.apache.maven.shared.artifact.deploy.internal;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.util.Collection;
23  
24  import org.apache.maven.artifact.Artifact;
25  import org.apache.maven.artifact.repository.ArtifactRepository;
26  import org.apache.maven.project.ProjectBuildingRequest;
27  import org.apache.maven.shared.artifact.deploy.ArtifactDeployer;
28  import org.apache.maven.shared.artifact.deploy.ArtifactDeployerException;
29  import org.codehaus.plexus.PlexusConstants;
30  import org.codehaus.plexus.PlexusContainer;
31  import org.codehaus.plexus.component.annotations.Component;
32  import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
33  import org.codehaus.plexus.context.Context;
34  import org.codehaus.plexus.context.ContextException;
35  import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
36  
37  /**
38   * 
39   */
40  @Component( role = ArtifactDeployer.class )
41  public class DefaultArtifactDeployer
42      implements ArtifactDeployer, Contextualizable
43  {
44  
45      private PlexusContainer container;
46      
47      @Override
48      public void deploy( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
49          throws ArtifactDeployerException
50      {
51          try
52          {
53              String hint = isMaven31() ? "maven31" : "maven3";
54  
55              ArtifactDeployer effectiveArtifactDeployer = container.lookup( ArtifactDeployer.class, hint );
56  
57              effectiveArtifactDeployer.deploy( request, mavenArtifacts );
58          }
59          catch ( ComponentLookupException e )
60          {
61              throw new ArtifactDeployerException( e.getMessage(), e );
62          }
63      }
64  
65      @Override
66      public void deploy( ProjectBuildingRequest request, ArtifactRepository remoteRepository,
67                          Collection<Artifact> mavenArtifacts )
68                              throws ArtifactDeployerException
69      {
70          try
71          {
72              String hint = isMaven31() ? "maven31" : "maven3";
73  
74              ArtifactDeployer effectiveArtifactDeployer = container.lookup( ArtifactDeployer.class, hint );
75  
76              effectiveArtifactDeployer.deploy( request, remoteRepository, mavenArtifacts );
77          }
78          catch ( ComponentLookupException e )
79          {
80              throw new ArtifactDeployerException( e.getMessage(), e );
81          }
82      }
83      /**
84       * @return true if the current Maven version is Maven 3.1.
85       */
86      protected static boolean isMaven31()
87      {
88          return canFindCoreClass( "org.eclipse.aether.artifact.Artifact" ); // Maven 3.1 specific
89      }
90  
91      private static boolean canFindCoreClass( String className )
92      {
93          try
94          {
95              Thread.currentThread().getContextClassLoader().loadClass( className );
96  
97              return true;
98          }
99          catch ( ClassNotFoundException e )
100         {
101             return false;
102         }
103     }
104 
105     /**
106      * Injects the Plexus content.
107      *
108      * @param context   Plexus context to inject.
109      * @throws ContextException if the PlexusContainer could not be located.
110      */
111     public void contextualize( Context context )
112         throws ContextException
113     {
114         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
115     }
116 }