You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/05/09 20:33:08 UTC
svn commit: r773258 - in /maven/components/branches/MNG-2766:
maven-compat/src/main/java/org/apache/maven/artifact/resolver/
maven-core/src/main/java/org/apache/maven/project/artifact/
maven-core/src/test/java/org/apache/maven/project/ maven-core/src/t...
Author: bentmann
Date: Sat May 9 18:33:08 2009
New Revision: 773258
URL: http://svn.apache.org/viewvc?rev=773258&view=rev
Log:
o Fixed scope handling during transitive dependency resolution
Added:
maven/components/branches/MNG-2766/maven-core/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml (with props)
Modified:
maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
Modified: maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=773258&r1=773257&r2=773258&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (original)
+++ maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java Sat May 9 18:33:08 2009
@@ -382,7 +382,7 @@
}
catch ( ComponentLookupException e )
{
- // Won't happen
+ throw new IllegalStateException( "Failed to lookup metadata source implementation", e );
}
}
Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java?rev=773258&r1=773257&r2=773258&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java Sat May 9 18:33:08 2009
@@ -17,6 +17,7 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -30,10 +31,9 @@
import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.model.Dependency;
import org.apache.maven.project.DefaultProjectBuilderConfiguration;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
@@ -87,20 +87,22 @@
project = projectBuilder.buildFromRepository( pomArtifact, configuration );
if ( !artifact.getArtifactHandler().isIncludesDependencies() )
- {
- ArtifactFilter filter;
- if ( artifact.getScope() == null )
- {
- filter = null;
- }
- else
+ {
+ artifacts = new LinkedHashSet<Artifact>();
+
+ for ( Dependency d : project.getDependencies() )
{
- filter = new ScopeArtifactFilter( artifact.getScope() );
+ String effectiveScope = getEffectiveScope( d.getScope(), artifact.getScope() );
+
+ if ( effectiveScope != null )
+ {
+ Artifact dependencyArtifact =
+ repositorySystem.createArtifact( d.getGroupId(), d.getArtifactId(), d.getVersion(),
+ effectiveScope, d.getType() );
+
+ artifacts.add( dependencyArtifact );
+ }
}
-
- artifacts = project.createArtifacts( filter );
-
- project.setArtifacts( artifacts );
}
}
catch ( ProjectBuildingException e )
@@ -114,6 +116,47 @@
return new ResolutionGroup( pomArtifact, artifacts, remoteRepositories );
}
+ private String getEffectiveScope( String originalScope, String inheritedScope )
+ {
+ String effectiveScope = Artifact.SCOPE_RUNTIME;
+
+ if ( originalScope == null )
+ {
+ originalScope = Artifact.SCOPE_COMPILE;
+ }
+
+ if ( inheritedScope == null )
+ {
+ // direct dependency retains its scope
+ effectiveScope = originalScope;
+ }
+ else if ( Artifact.SCOPE_TEST.equals( originalScope ) || Artifact.SCOPE_PROVIDED.equals( originalScope ) )
+ {
+ // test and provided are not transitive, so exclude them
+ effectiveScope = null;
+ }
+ else if ( Artifact.SCOPE_SYSTEM.equals( originalScope ) )
+ {
+ // system scope come through unchanged...
+ effectiveScope = Artifact.SCOPE_SYSTEM;
+ }
+ else if ( Artifact.SCOPE_COMPILE.equals( originalScope ) && Artifact.SCOPE_COMPILE.equals( inheritedScope ) )
+ {
+ // added to retain compile scope. Remove if you want compile inherited as runtime
+ effectiveScope = Artifact.SCOPE_COMPILE;
+ }
+ else if ( Artifact.SCOPE_TEST.equals( inheritedScope ) )
+ {
+ effectiveScope = Artifact.SCOPE_TEST;
+ }
+ else if ( Artifact.SCOPE_PROVIDED.equals( inheritedScope ) )
+ {
+ effectiveScope = Artifact.SCOPE_PROVIDED;
+ }
+
+ return effectiveScope;
+ }
+
public List<ArtifactVersion> retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
throws ArtifactMetadataRetrievalException
{
@@ -166,4 +209,5 @@
return versions;
}
+
}
Modified: maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java?rev=773258&r1=773257&r2=773258&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java Sat May 9 18:33:08 2009
@@ -79,8 +79,8 @@
return markerFile.getAbsoluteFile().getParentFile();
}
- protected File getFileForClasspathResource( String resource )
- throws FileNotFoundException, URISyntaxException
+ protected static File getFileForClasspathResource( String resource )
+ throws FileNotFoundException
{
ClassLoader cloader = Thread.currentThread().getContextClassLoader();
@@ -91,7 +91,7 @@
throw new FileNotFoundException( "Unable to find: " + resource );
}
- return new File( new URI( resourceUrl.toString().replaceAll( " ", "%20" ) ) );
+ return new File( URI.create( resourceUrl.toString().replaceAll( " ", "%20" ) ) );
}
protected ArtifactRepository getLocalRepository()
Modified: maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/ProjectClasspathTest.java?rev=773258&r1=773257&r2=773258&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/ProjectClasspathTest.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/ProjectClasspathTest.java Sat May 9 18:33:08 2009
@@ -20,26 +20,39 @@
*/
import java.io.File;
+import java.io.FileNotFoundException;
import java.util.Iterator;
+import java.util.List;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.project.artifact.MavenMetadataSource;
public class ProjectClasspathTest
extends AbstractMavenProjectTestCase
{
- private String dir = "projects/scope/";
-
- public void setUp() throws Exception
- {
- super.setUp();
- projectBuilder = lookup(MavenProjectBuilder.class, "test");
- }
-
+ private static final String dir = "projects/scope/";
+
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+ projectBuilder = lookup( MavenProjectBuilder.class, "default" );
+ }
+
+ @Override
+ protected String getCustomConfigurationName()
+ {
+ return null;
+ }
+
public void testProjectClasspath()
throws Exception
{
File f = getFileForClasspathResource( dir + "project-with-scoped-dependencies.xml" );
-
+
MavenProject project = getProjectWithDependencies( f );
Artifact artifact;
@@ -59,8 +72,8 @@
assertNull( "Check no test dependencies are transitive", artifact );
artifact = getArtifact( project, "maven-test-test", "scope-compile" );
- assertNotNull(artifact);
-
+ assertNotNull( artifact );
+
System.out.println( "a = " + artifact );
System.out.println( "b = " + artifact.getScope() );
assertEquals( "Check scope", "test", artifact.getScope() );
@@ -107,23 +120,72 @@
{
String artifactId = "scope-" + scope;
Artifact artifact = getArtifact( project, "maven-test", artifactId );
+ assertNotNull( artifact );
assertEquals( "Check scope", scopeValue, artifact.getScope() );
}
private Artifact getArtifact( MavenProject project, String groupId, String artifactId )
- {
- System.out.println( "[ Looking for " + groupId + ":" + artifactId + " ]");
- for ( Iterator i = project.getArtifacts().iterator(); i.hasNext(); )
+ {
+ System.out.println( "[ Looking for " + groupId + ":" + artifactId + " ]" );
+ for ( Iterator<Artifact> i = project.getArtifacts().iterator(); i.hasNext(); )
{
- Artifact a = (Artifact) i.next();
- System.out.println(a.toString());
+ Artifact a = i.next();
+ System.out.println( a.toString() );
if ( artifactId.equals( a.getArtifactId() ) && a.getGroupId().equals( groupId ) )
{
- System.out.println("RETURN");
+ System.out.println( "RETURN" );
return a;
}
}
- System.out.println("Return null");
+ System.out.println( "Return null" );
return null;
}
+
+ public static class TestMavenProjectBuilder
+ extends DefaultMavenProjectBuilder
+ {
+
+ @Override
+ public MavenProject buildFromRepository( Artifact artifact, ProjectBuilderConfiguration configuration )
+ throws ProjectBuildingException
+ {
+ if ( "maven-test".equals( artifact.getGroupId() ) )
+ {
+ String scope = artifact.getArtifactId().substring( "scope-".length() );
+ try
+ {
+ artifact.setFile( getFileForClasspathResource( dir + "transitive-" + scope + "-dep.xml" ) );
+ }
+ catch ( FileNotFoundException e )
+ {
+ throw new IllegalStateException( "Missing test POM for " + artifact );
+ }
+ }
+ if ( artifact.getFile() == null )
+ {
+ return new MavenProject();
+ }
+ return build( artifact.getFile(), configuration );
+ }
+ }
+
+ public static class MetadataSource
+ extends MavenMetadataSource
+ {
+
+ @Override
+ public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories )
+ throws ArtifactMetadataRetrievalException
+ {
+ ResolutionGroup rg = super.retrieve( artifact, localRepository, remoteRepositories );
+ for ( Artifact a : rg.getArtifacts() )
+ {
+ a.setResolved( true );
+ }
+ return rg;
+ }
+
+ }
+
}
Added: maven/components/branches/MNG-2766/maven-core/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml?rev=773258&view=auto
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml (added)
+++ maven/components/branches/MNG-2766/maven-core/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml Sat May 9 18:33:08 2009
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plexus>
+ <components>
+ <component>
+ <role>org.apache.maven.project.MavenProjectBuilder</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.maven.project.ProjectClasspathTest$TestMavenProjectBuilder</implementation>
+ <isolated-realm>false</isolated-realm>
+ <requirements>
+ <requirement>
+ <role>org.codehaus.plexus.logging.Logger</role>
+ <role-hint>default</role-hint>
+ <field-name>logger</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.project.validation.ModelValidator</role>
+ <role-hint>default</role-hint>
+ <field-name>validator</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.lifecycle.LifecycleExecutor</role>
+ <role-hint>default</role-hint>
+ <field-name>lifecycle</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.repository.RepositorySystem</role>
+ <role-hint>default</role-hint>
+ <field-name>repositorySystem</field-name>
+ </requirement>
+ <requirement>
+ <role>java.util.List</role>
+ <field-name>listeners</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.model.interpolator.Interpolator</role>
+ <role-hint>default</role-hint>
+ <field-name>interpolator</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.artifact.resolver.ResolutionErrorHandler</role>
+ <role-hint>default</role-hint>
+ <field-name>resolutionErrorHandler</field-name>
+ </requirement>
+ </requirements>
+ </component>
+ <component>
+ <role>org.apache.maven.artifact.metadata.ArtifactMetadataSource</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.maven.project.ProjectClasspathTest$MetadataSource</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager</role>
+ <role-hint>default</role-hint>
+ <field-name>repositoryMetadataManager</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.repository.RepositorySystem</role>
+ <role-hint>default</role-hint>
+ <field-name>repositorySystem</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.project.MavenProjectBuilder</role>
+ <role-hint>default</role-hint>
+ <field-name>projectBuilder</field-name>
+ </requirement>
+ <requirement>
+ <role>org.codehaus.plexus.logging.Logger</role>
+ <role-hint>default</role-hint>
+ <field-name>logger</field-name>
+ </requirement>
+ </requirements>
+ </component>
+ <component>
+ <role>org.apache.maven.lifecycle.LifecycleExecutor</role>
+ <implementation>org.apache.maven.project.EmptyLifecycleExecutor</implementation>
+ </component>
+ </components>
+</plexus>
Propchange: maven/components/branches/MNG-2766/maven-core/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/branches/MNG-2766/maven-core/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision