001package org.apache.maven.repository; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license 005 * agreements. See the NOTICE file distributed with this work for additional information regarding 006 * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance with the License. You may obtain a 008 * copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software distributed under the License 013 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 014 * or implied. See the License for the specific language governing permissions and limitations under 015 * the License. 016 */ 017 018import java.io.File; 019import java.util.Arrays; 020import java.util.List; 021 022import org.apache.maven.artifact.Artifact; 023import org.apache.maven.artifact.repository.ArtifactRepository; 024import org.apache.maven.artifact.resolver.ArtifactResolutionRequest; 025import org.apache.maven.artifact.resolver.ArtifactResolutionResult; 026import org.apache.maven.artifact.resolver.ResolutionErrorHandler; 027import org.apache.maven.execution.DefaultMavenExecutionRequest; 028import org.apache.maven.execution.DefaultMavenExecutionResult; 029import org.apache.maven.execution.MavenSession; 030import org.apache.maven.model.Dependency; 031import org.apache.maven.model.Repository; 032import org.apache.maven.model.RepositoryPolicy; 033import org.apache.maven.plugin.LegacySupport; 034import org.apache.maven.repository.RepositorySystem; 035import org.codehaus.plexus.ContainerConfiguration; 036import org.codehaus.plexus.PlexusTestCase; 037import org.eclipse.aether.DefaultRepositorySystemSession; 038import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; 039import org.eclipse.aether.repository.LocalRepository; 040 041/** 042 * Tests {@link LegacyRepositorySystem}. 043 * 044 * @author Benjamin Bentmann 045 */ 046public class LegacyRepositorySystemTest 047 extends PlexusTestCase 048{ 049 private RepositorySystem repositorySystem; 050 051 private ResolutionErrorHandler resolutionErrorHandler; 052 053 @Override 054 protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration ) 055 { 056 super.customizeContainerConfiguration( containerConfiguration ); 057 containerConfiguration.setAutoWiring( true ); 058 } 059 060 @Override 061 protected void setUp() 062 throws Exception 063 { 064 super.setUp(); 065 repositorySystem = lookup( RepositorySystem.class, "default" ); 066 resolutionErrorHandler = lookup( ResolutionErrorHandler.class ); 067 } 068 069 @Override 070 protected void tearDown() 071 throws Exception 072 { 073 repositorySystem = null; 074 resolutionErrorHandler = null; 075 super.tearDown(); 076 } 077 078 protected List<ArtifactRepository> getRemoteRepositories() 079 throws Exception 080 { 081 File repoDir = new File( getBasedir(), "src/test/remote-repo" ).getAbsoluteFile(); 082 083 RepositoryPolicy policy = new RepositoryPolicy(); 084 policy.setEnabled( true ); 085 policy.setChecksumPolicy( "ignore" ); 086 policy.setUpdatePolicy( "always" ); 087 088 Repository repository = new Repository(); 089 repository.setId( RepositorySystem.DEFAULT_REMOTE_REPO_ID ); 090 repository.setUrl( "file://" + repoDir.toURI().getPath() ); 091 repository.setReleases( policy ); 092 repository.setSnapshots( policy ); 093 094 return Arrays.asList( repositorySystem.buildArtifactRepository( repository ) ); 095 } 096 097 protected ArtifactRepository getLocalRepository() 098 throws Exception 099 { 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}