View Javadoc
1   package org.apache.maven.repository;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
5    * agreements. See the NOTICE file distributed with this work for additional information regarding
6    * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance with the License. You may obtain a
8    * 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, software distributed under the License
13   * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14   * or implied. See the License for the specific language governing permissions and limitations under
15   * the License.
16   */
17  
18  import java.io.File;
19  import java.util.Arrays;
20  import java.util.List;
21  
22  import org.apache.maven.artifact.Artifact;
23  import org.apache.maven.artifact.repository.ArtifactRepository;
24  import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
25  import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
26  import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
27  import org.apache.maven.execution.DefaultMavenExecutionRequest;
28  import org.apache.maven.execution.DefaultMavenExecutionResult;
29  import org.apache.maven.execution.MavenSession;
30  import org.apache.maven.model.Dependency;
31  import org.apache.maven.model.Repository;
32  import org.apache.maven.model.RepositoryPolicy;
33  import org.apache.maven.plugin.LegacySupport;
34  import org.apache.maven.repository.RepositorySystem;
35  import org.codehaus.plexus.ContainerConfiguration;
36  import org.codehaus.plexus.PlexusTestCase;
37  import org.eclipse.aether.DefaultRepositorySystemSession;
38  import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
39  import org.eclipse.aether.repository.LocalRepository;
40  
41  /**
42   * Tests {@link LegacyRepositorySystem}.
43   * 
44   * @author Benjamin Bentmann
45   */
46  public class LegacyRepositorySystemTest
47      extends PlexusTestCase
48  {
49      private RepositorySystem repositorySystem;
50  
51      private ResolutionErrorHandler resolutionErrorHandler;
52  
53      @Override
54      protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
55      {
56          super.customizeContainerConfiguration( containerConfiguration );
57          containerConfiguration.setAutoWiring( true );
58      }
59  
60      @Override
61      protected void setUp()
62          throws Exception
63      {
64          super.setUp();
65          repositorySystem = lookup( RepositorySystem.class, "default" );
66          resolutionErrorHandler = lookup( ResolutionErrorHandler.class );
67      }
68  
69      @Override
70      protected void tearDown()
71          throws Exception
72      {
73          repositorySystem = null;
74          resolutionErrorHandler = null;
75          super.tearDown();
76      }
77      
78      protected List<ArtifactRepository> getRemoteRepositories()
79          throws Exception
80      {
81          File repoDir = new File( getBasedir(), "src/test/remote-repo" ).getAbsoluteFile();
82  
83          RepositoryPolicy policy = new RepositoryPolicy();
84          policy.setEnabled( true );
85          policy.setChecksumPolicy( "ignore" );
86          policy.setUpdatePolicy( "always" );
87  
88          Repository repository = new Repository();
89          repository.setId( RepositorySystem.DEFAULT_REMOTE_REPO_ID );
90          repository.setUrl( "file://" + repoDir.toURI().getPath() );
91          repository.setReleases( policy );
92          repository.setSnapshots( policy );
93  
94          return Arrays.asList( repositorySystem.buildArtifactRepository( repository ) );
95      }
96  
97      protected ArtifactRepository getLocalRepository()
98          throws Exception
99      {
100         File repoDir = new File( getBasedir(), "target/local-repo" ).getAbsoluteFile();
101 
102         return repositorySystem.createLocalRepository( repoDir );
103     }
104 
105     public void testThatASystemScopedDependencyIsNotResolvedFromRepositories()
106         throws Exception
107     {
108         //
109         // We should get a whole slew of dependencies resolving this artifact transitively
110         //
111         Dependency d = new Dependency();
112         d.setGroupId( "org.apache.maven.its" );
113         d.setArtifactId( "b" );
114         d.setVersion( "0.1" );
115         d.setScope( Artifact.SCOPE_COMPILE );
116         Artifact artifact = repositorySystem.createDependencyArtifact( d );
117         
118         ArtifactResolutionRequest request = new ArtifactResolutionRequest()
119             .setArtifact( artifact )
120             .setResolveRoot( true )
121             .setResolveTransitively( true )
122             .setRemoteRepositories( getRemoteRepositories() )
123             .setLocalRepository( getLocalRepository() );            
124                             
125         DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
126         LocalRepository localRepo = new LocalRepository( request.getLocalRepository().getBasedir() );
127         session.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( session, localRepo ) );
128         LegacySupport legacySupport = lookup( LegacySupport.class );
129         legacySupport.setSession( new MavenSession( getContainer(), session, new DefaultMavenExecutionRequest(),
130                                                     new DefaultMavenExecutionResult() ) );
131 
132         ArtifactResolutionResult result = repositorySystem.resolve( request );
133         resolutionErrorHandler.throwErrors( request, result );        
134         assertEquals( 2, result.getArtifacts().size() );
135         
136         //
137         // System scoped version which should 
138         //        
139         d.setScope( Artifact.SCOPE_SYSTEM );
140         File file = new File( getBasedir(), "src/test/repository-system/maven-core-2.1.0.jar" );
141         assertTrue( file.exists() );
142         d.setSystemPath( file.getCanonicalPath() );
143         
144         artifact = repositorySystem.createDependencyArtifact( d );
145         
146         //
147         // The request has not set any local or remote repositories as the system scoped dependency being resolved should only
148         // give us the dependency off the disk and nothing more.
149         //
150         request = new ArtifactResolutionRequest()
151             .setArtifact( artifact )
152             .setResolveRoot( true )
153             .setResolveTransitively( true );
154                             
155         result = repositorySystem.resolve( request );
156         resolutionErrorHandler.throwErrors( request, result );        
157         assertEquals( 1, result.getArtifacts().size() );       
158 
159         //
160         // Put in a bogus file to make sure missing files cause the resolution to fail.
161         //        
162         file = new File( getBasedir(), "src/test/repository-system/maven-monkey-2.1.0.jar" );
163         assertFalse( file.exists() );
164         d.setSystemPath( file.getCanonicalPath() );
165         artifact = repositorySystem.createDependencyArtifact( d );
166         
167         //
168         // The request has not set any local or remote repositories as the system scoped dependency being resolved should only
169         // give us the dependency off the disk and nothing more.
170         //
171         request = new ArtifactResolutionRequest()
172             .setArtifact( artifact )
173             .setResolveRoot( true )
174             .setResolveTransitively( true );
175                      
176         try
177         {
178             result = repositorySystem.resolve( request );
179             resolutionErrorHandler.throwErrors( request, result );
180         }
181         catch( Exception e )
182         {
183             assertTrue( result.hasMissingArtifacts() );
184         }
185     }
186 
187     public void testLocalRepositoryBasedir()
188         throws Exception
189     {
190         File localRepoDir = new File( "" ).getAbsoluteFile();
191 
192         ArtifactRepository localRepo = repositorySystem.createLocalRepository( localRepoDir );
193 
194         String basedir = localRepo.getBasedir();
195 
196         assertFalse( basedir.endsWith( "/" ) );
197         assertFalse( basedir.endsWith( "\\" ) );
198 
199         assertEquals( localRepoDir, new File( basedir ) );
200 
201         assertEquals( localRepoDir.getPath(), basedir );
202     }
203 
204 }