/*
* Copyright 2013 Harald Wellmann
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.ops4j.pax.url.mvn;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.io.File;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.collection.CollectRequest;
import org.eclipse.aether.collection.DependencyCollectionException;
import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyNode;
import org.eclipse.aether.impl.DefaultServiceLocator;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.DependencyRequest;
import org.eclipse.aether.resolution.DependencyResolutionException;
import org.eclipse.aether.resolution.VersionRangeRequest;
import org.eclipse.aether.resolution.VersionRangeResolutionException;
import org.eclipse.aether.resolution.VersionRangeResult;
import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
import org.eclipse.aether.spi.connector.transport.TransporterFactory;
import org.eclipse.aether.transport.wagon.WagonProvider;
import org.eclipse.aether.transport.wagon.WagonTransporterFactory;
import org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator;
import org.eclipse.aether.version.Version;
import org.junit.Before;
import org.junit.Test;
import org.ops4j.pax.url.mvn.internal.HttpClients;
import org.ops4j.pax.url.mvn.internal.ManualWagonProvider;
/**
* Tests Eclipse Aether as is, demonstrating how to embed it into Pax URL.
*
* @author Harald Wellmann
*
*/
public class DirectAetherTest {
private RepositorySystem system;
private DefaultRepositorySystemSession session;
private RemoteRepository central;
@Before
public void before() {
DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
locator
.addService( RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class );
locator.setServices( WagonProvider.class, new ManualWagonProvider( HttpClients.createClient(null, null), 10000 ) );
locator.addService( TransporterFactory.class, WagonTransporterFactory.class );
system = locator.getService( RepositorySystem.class );
session = MavenRepositorySystemUtils.newSession();
LocalRepository localRepo = new LocalRepository( "target/local-repo" );
session.setLocalRepositoryManager( system.newLocalRepositoryManager( session, localRepo ) );
central = new RemoteRepository.Builder( "central", "default",
"http://repo1.maven.org/maven2/" ).build();
}
@Test
public void resolveVersionRange() throws DependencyCollectionException,
DependencyResolutionException, VersionRangeResolutionException {
DefaultArtifact artifact = new DefaultArtifact("org.ops4j.base:ops4j-base-lang:[1.2.0,1.2.5)");
VersionRangeRequest versionRangeRequest = new VersionRangeRequest();
versionRangeRequest.setArtifact( artifact );
versionRangeRequest.addRepository( central );
VersionRangeResult versionRangeResult = system.resolveVersionRange( session, versionRangeRequest );
Version version = versionRangeResult.getHighestVersion();
assertThat(version.toString(), is("1.2.4"));
}
@Test
public void resolveArtifact() throws DependencyCollectionException,
DependencyResolutionException {
Dependency dependency = new Dependency( new DefaultArtifact(
"org.apache.maven:maven-profile:2.2.1" ), "compile" );
CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot( dependency );
collectRequest.addRepository( central );
DependencyNode node = system.collectDependencies( session, collectRequest ).getRoot();
DependencyRequest dependencyRequest = new DependencyRequest();
dependencyRequest.setRoot( node );
system.resolveDependencies( session, dependencyRequest );
PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
node.accept( nlg );
String[] jars = { "maven-profile-2.2.1.jar", //
"maven-model-2.2.1.jar", //
"plexus-utils-1.5.15.jar", //
"plexus-interpolation-1.11.jar", //
"plexus-container-default-1.0-alpha-9-stable-1.jar", //
"junit-3.8.1.jar", //
"classworlds-1.1.jar" //
};
assertThat( nlg.getFiles().size(), is( jars.length ) );
int i = 0;
for( File file : nlg.getFiles() ) {
assertThat( file.getName(), is( jars[i++] ) );
}
}
}