View Javadoc
1   package org.apache.maven.shared.transfer.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.transfer.artifact.deploy.ArtifactDeployer;
28  import org.apache.maven.shared.transfer.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  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          validateParameters( request, mavenArtifacts );
52  
53          try
54          {
55              String hint = isMaven31() ? "maven31" : "maven3";
56  
57              ArtifactDeployer effectiveArtifactDeployer = container.lookup( ArtifactDeployer.class, hint );
58  
59              effectiveArtifactDeployer.deploy( request, mavenArtifacts );
60          }
61          catch ( ComponentLookupException e )
62          {
63              throw new ArtifactDeployerException( e.getMessage(), e );
64          }
65      }
66  
67      @Override
68      public void deploy( ProjectBuildingRequest request, ArtifactRepository remoteRepository,
69                          Collection<Artifact> mavenArtifacts )
70          throws ArtifactDeployerException
71      {
72          validateParameters( request, mavenArtifacts );
73          try
74          {
75              String hint = isMaven31() ? "maven31" : "maven3";
76  
77              ArtifactDeployer effectiveArtifactDeployer = container.lookup( ArtifactDeployer.class, hint );
78  
79              effectiveArtifactDeployer.deploy( request, remoteRepository, mavenArtifacts );
80          }
81          catch ( ComponentLookupException e )
82          {
83              throw new ArtifactDeployerException( e.getMessage(), e );
84          }
85      }
86  
87      private void validateParameters( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
88      {
89          if ( request == null )
90          {
91              throw new IllegalArgumentException( "The parameter request is not allowed to be null." );
92          }
93          if ( mavenArtifacts == null )
94          {
95              throw new IllegalArgumentException( "The parameter mavenArtifacts is not allowed to be null." );
96          }
97          if ( mavenArtifacts.isEmpty() )
98          {
99              throw new IllegalArgumentException( "The collection mavenArtifacts is not allowed to be empty." );
100         }
101     }
102 
103     /**
104      * @return true if the current Maven version is Maven 3.1.
105      */
106     protected static boolean isMaven31()
107     {
108         return canFindCoreClass( "org.eclipse.aether.artifact.Artifact" ); // Maven 3.1 specific
109     }
110 
111     private static boolean canFindCoreClass( String className )
112     {
113         try
114         {
115             Thread.currentThread().getContextClassLoader().loadClass( className );
116 
117             return true;
118         }
119         catch ( ClassNotFoundException e )
120         {
121             return false;
122         }
123     }
124 
125     /**
126      * Injects the Plexus content.
127      *
128      * @param context Plexus context to inject.
129      * @throws ContextException if the PlexusContainer could not be located.
130      */
131     public void contextualize( Context context )
132         throws ContextException
133     {
134         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
135     }
136 }