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.apache.maven.repository.legacy.LegacyRepositorySystem;
36  import org.codehaus.plexus.ContainerConfiguration;
37  import org.codehaus.plexus.PlexusConstants;
38  import org.codehaus.plexus.PlexusTestCase;
39  import org.eclipse.aether.DefaultRepositorySystemSession;
40  import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
41  import org.eclipse.aether.repository.LocalRepository;
42  
43  /**
44   * Tests {@link LegacyRepositorySystem}.
45   *
46   * @author Benjamin Bentmann
47   */
48  public class LegacyRepositorySystemTest
49      extends PlexusTestCase
50  {
51      private RepositorySystem repositorySystem;
52  
53      private ResolutionErrorHandler resolutionErrorHandler;
54  
55      @Override
56      protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration )
57      {
58          super.customizeContainerConfiguration( containerConfiguration );
59          containerConfiguration.setAutoWiring( true );
60          containerConfiguration.setClassPathScanning( PlexusConstants.SCANNING_INDEX );
61      }
62  
63      @Override
64      protected void setUp()
65          throws Exception
66      {
67          super.setUp();
68          repositorySystem = lookup( RepositorySystem.class, "default" );
69          resolutionErrorHandler = lookup( ResolutionErrorHandler.class );
70      }
71  
72      @Override
73      protected void tearDown()
74          throws Exception
75      {
76          repositorySystem = null;
77          resolutionErrorHandler = null;
78          super.tearDown();
79      }
80  
81      protected List<ArtifactRepository> getRemoteRepositories()
82          throws Exception
83      {
84          File repoDir = new File( getBasedir(), "src/test/remote-repo" ).getAbsoluteFile();
85  
86          RepositoryPolicy policy = new RepositoryPolicy();
87          policy.setEnabled( true );
88          policy.setChecksumPolicy( "ignore" );
89          policy.setUpdatePolicy( "always" );
90  
91          Repository repository = new Repository();
92          repository.setId( RepositorySystem.DEFAULT_REMOTE_REPO_ID );
93          repository.setUrl( "file://" + repoDir.toURI().getPath() );
94          repository.setReleases( policy );
95          repository.setSnapshots( policy );
96  
97          return Arrays.asList( repositorySystem.buildArtifactRepository( repository ) );
98      }
99  
100     protected ArtifactRepository getLocalRepository()
101         throws Exception
102     {
103         File repoDir = new File( getBasedir(), "target/local-repo" ).getAbsoluteFile();
104 
105         return repositorySystem.createLocalRepository( repoDir );
106     }
107 
108     public void testThatASystemScopedDependencyIsNotResolvedFromRepositories()
109         throws Exception
110     {
111         //
112         // We should get a whole slew of dependencies resolving this artifact transitively
113         //
114         Dependency d = new Dependency();
115         d.setGroupId( "org.apache.maven.its" );
116         d.setArtifactId( "b" );
117         d.setVersion( "0.1" );
118         d.setScope( Artifact.SCOPE_COMPILE );
119         Artifact artifact = repositorySystem.createDependencyArtifact( d );
120 
121         ArtifactResolutionRequest request = new ArtifactResolutionRequest()
122             .setArtifact( artifact )
123             .setResolveRoot( true )
124             .setResolveTransitively( true )
125             .setRemoteRepositories( getRemoteRepositories() )
126             .setLocalRepository( getLocalRepository() );
127 
128         DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
129         LocalRepository localRepo = new LocalRepository( request.getLocalRepository().getBasedir() );
130         session.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( session, localRepo ) );
131         LegacySupport legacySupport = lookup( LegacySupport.class );
132         legacySupport.setSession( new MavenSession( getContainer(), session, new DefaultMavenExecutionRequest(),
133                                                     new DefaultMavenExecutionResult() ) );
134 
135         ArtifactResolutionResult result = repositorySystem.resolve( request );
136         resolutionErrorHandler.throwErrors( request, result );
137         assertEquals( 2, result.getArtifacts().size() );
138 
139         //
140         // System scoped version which should
141         //
142         d.setScope( Artifact.SCOPE_SYSTEM );
143         File file = new File( getBasedir(), "src/test/repository-system/maven-core-2.1.0.jar" );
144         assertTrue( file.exists() );
145         d.setSystemPath( file.getCanonicalPath() );
146 
147         artifact = repositorySystem.createDependencyArtifact( d );
148 
149         //
150         // The request has not set any local or remote repositories as the system scoped dependency being resolved should only
151         // give us the dependency off the disk and nothing more.
152         //
153         request = new ArtifactResolutionRequest()
154             .setArtifact( artifact )
155             .setResolveRoot( true )
156             .setResolveTransitively( true );
157 
158         result = repositorySystem.resolve( request );
159         resolutionErrorHandler.throwErrors( request, result );
160         assertEquals( 1, result.getArtifacts().size() );
161 
162         //
163         // Put in a bogus file to make sure missing files cause the resolution to fail.
164         //
165         file = new File( getBasedir(), "src/test/repository-system/maven-monkey-2.1.0.jar" );
166         assertFalse( file.exists() );
167         d.setSystemPath( file.getCanonicalPath() );
168         artifact = repositorySystem.createDependencyArtifact( d );
169 
170         //
171         // The request has not set any local or remote repositories as the system scoped dependency being resolved should only
172         // give us the dependency off the disk and nothing more.
173         //
174         request = new ArtifactResolutionRequest()
175             .setArtifact( artifact )
176             .setResolveRoot( true )
177             .setResolveTransitively( true );
178 
179         try
180         {
181             result = repositorySystem.resolve( request );
182             resolutionErrorHandler.throwErrors( request, result );
183         }
184         catch( Exception e )
185         {
186             assertTrue( result.hasMissingArtifacts() );
187         }
188     }
189 
190     public void testLocalRepositoryBasedir()
191         throws Exception
192     {
193         File localRepoDir = new File( "" ).getAbsoluteFile();
194 
195         ArtifactRepository localRepo = repositorySystem.createLocalRepository( localRepoDir );
196 
197         String basedir = localRepo.getBasedir();
198 
199         assertFalse( basedir.endsWith( "/" ) );
200         assertFalse( basedir.endsWith( "\\" ) );
201 
202         assertEquals( localRepoDir, new File( basedir ) );
203 
204         assertEquals( localRepoDir.getPath(), basedir );
205     }
206 
207 }