You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by jd...@apache.org on 2005/08/31 09:39:10 UTC

svn commit: r264960 - in /maven/components/trunk: maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/ maven-artifact/src/main/java/org/apache/maven/artifact/ maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ m...

Author: jdcasey
Date: Wed Aug 31 00:39:01 2005
New Revision: 264960

URL: http://svn.apache.org/viewcvs?rev=264960&view=rev
Log:
Adding system scope...uses scope == 'system' and systemPath in dependency. SystemPath was chosen over mappings inside the setings.xml for scalability, heritability, and injectability (via managed deps).


Added:
    maven/components/trunk/maven-core-it/it0063/
    maven/components/trunk/maven-core-it/it0063/expected-results.txt   (with props)
    maven/components/trunk/maven-core-it/it0063/goals.txt   (with props)
    maven/components/trunk/maven-core-it/it0063/pom.xml   (with props)
    maven/components/trunk/maven-core-it/it0063/src/
    maven/components/trunk/maven-core-it/it0063/src/main/
    maven/components/trunk/maven-core-it/it0063/src/main/java/
    maven/components/trunk/maven-core-it/it0063/src/main/java/org/
    maven/components/trunk/maven-core-it/it0063/src/main/java/org/apache/
    maven/components/trunk/maven-core-it/it0063/src/main/java/org/apache/maven/
    maven/components/trunk/maven-core-it/it0063/src/main/java/org/apache/maven/it0001/
    maven/components/trunk/maven-core-it/it0063/src/main/java/org/apache/maven/it0001/Person.java   (with props)
    maven/components/trunk/maven-core-it/it0063/src/main/resources/
    maven/components/trunk/maven-core-it/it0063/src/main/resources/it0001.properties   (with props)
    maven/components/trunk/maven-core-it/it0063/src/test/
    maven/components/trunk/maven-core-it/it0063/src/test/java/
    maven/components/trunk/maven-core-it/it0063/src/test/java/org/
    maven/components/trunk/maven-core-it/it0063/src/test/java/org/apache/
    maven/components/trunk/maven-core-it/it0063/src/test/java/org/apache/maven/
    maven/components/trunk/maven-core-it/it0063/src/test/java/org/apache/maven/it0001/
    maven/components/trunk/maven-core-it/it0063/src/test/java/org/apache/maven/it0001/PersonTest.java   (with props)
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/artifact/
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java   (with props)
Modified:
    maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
    maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java
    maven/components/trunk/maven-core-it/README.txt
    maven/components/trunk/maven-core-it/integration-tests.txt
    maven/components/trunk/maven-core-it/it0042/goals.txt
    maven/components/trunk/maven-model/maven.mdo
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultModelDefaultsInjector.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java (original)
+++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java Wed Aug 31 00:39:01 2005
@@ -73,74 +73,91 @@
                           boolean force )
         throws ArtifactResolutionException
     {
-        // skip artifacts with a file - they are already resolved
-        if ( artifact != null && artifact.getFile() == null )
+        if ( artifact != null )
         {
-            // ----------------------------------------------------------------------
-            // Check for the existence of the artifact in the specified local
-            // ArtifactRepository. If it is present then simply return as the
-            // request for resolution has been satisfied.
-            // ----------------------------------------------------------------------
-
-            String localPath = localRepository.pathOf( artifact );
-
-            artifact.setFile( new File( localRepository.getBasedir(), localPath ) );
-
-            try
+            if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
             {
-                transformationManager.transformForResolve( artifact, remoteRepositories, localRepository );
+                File systemFile = artifact.getFile();
+
+                if ( !systemFile.exists() )
+                {
+                    throw new ArtifactResolutionException( "System artifact: " + artifact.getId()
+                        + " not found in path: " + systemFile, artifact );
+                }
+                else
+                {
+                    artifact.setResolved( true );
+                }
             }
-            catch ( ArtifactMetadataRetrievalException e )
+            // skip artifacts with a file - they are already resolved
+            else if ( artifact.getFile() == null )
             {
-                throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
-            }
+                // ----------------------------------------------------------------------
+                // Check for the existence of the artifact in the specified local
+                // ArtifactRepository. If it is present then simply return as the
+                // request for resolution has been satisfied.
+                // ----------------------------------------------------------------------
+
+                String localPath = localRepository.pathOf( artifact );
+
+                artifact.setFile( new File( localRepository.getBasedir(), localPath ) );
 
-            File destination = artifact.getFile();
-            if ( !destination.exists() || force )
-            {
                 try
                 {
-                    if ( artifact.getRepository() != null )
+                    transformationManager.transformForResolve( artifact, remoteRepositories, localRepository );
+                }
+                catch ( ArtifactMetadataRetrievalException e )
+                {
+                    throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
+                }
+
+                File destination = artifact.getFile();
+                if ( !destination.exists() || force )
+                {
+                    try
                     {
-                        // the transformations discovered the artifact - so use it exclusively
-                        wagonManager.getArtifact( artifact, artifact.getRepository() );
+                        if ( artifact.getRepository() != null )
+                        {
+                            // the transformations discovered the artifact - so use it exclusively
+                            wagonManager.getArtifact( artifact, artifact.getRepository() );
+                        }
+                        else
+                        {
+                            wagonManager.getArtifact( artifact, remoteRepositories );
+                        }
+
+                        if ( !artifact.isResolved() )
+                        {
+                            throw new ArtifactResolutionException(
+                                                                   "Failed to resolve artifact, possibly due to a repository list that is not appropriately equipped for this artifact's metadata.",
+                                                                   artifact, remoteRepositories );
+                        }
+
+                        // must be after the artifact is downloaded
+                        for ( Iterator i = artifact.getMetadataList().iterator(); i.hasNext(); )
+                        {
+                            ArtifactMetadata metadata = (ArtifactMetadata) i.next();
+                            metadata.storeInLocalRepository( localRepository );
+                        }
                     }
-                    else
+                    catch ( ResourceDoesNotExistException e )
                     {
-                        wagonManager.getArtifact( artifact, remoteRepositories );
+                        throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
                     }
-
-                    if ( !artifact.isResolved() )
+                    catch ( TransferFailedException e )
                     {
-                        throw new ArtifactResolutionException(
-                            "Failed to resolve artifact, possibly due to a repository list that is not appropriately equipped for this artifact's metadata.",
-                            artifact, remoteRepositories );
+                        throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
                     }
-
-                    // must be after the artifact is downloaded
-                    for ( Iterator i = artifact.getMetadataList().iterator(); i.hasNext(); )
+                    catch ( ArtifactMetadataRetrievalException e )
                     {
-                        ArtifactMetadata metadata = (ArtifactMetadata) i.next();
-                        metadata.storeInLocalRepository( localRepository );
+                        throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
                     }
                 }
-                catch ( ResourceDoesNotExistException e )
+                else if ( destination.exists() )
                 {
-                    throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
+                    // locally resolved...no need to hit the remote repo.
+                    artifact.setResolved( true );
                 }
-                catch ( TransferFailedException e )
-                {
-                    throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
-                }
-                catch ( ArtifactMetadataRetrievalException e )
-                {
-                    throw new ArtifactResolutionException( e.getMessage(), artifact, remoteRepositories, e );
-                }
-            }
-            else if ( destination.exists() )
-            {
-                // locally resolved...no need to hit the remote repo.
-                artifact.setResolved( true );
             }
         }
     }

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java Wed Aug 31 00:39:01 2005
@@ -49,6 +49,8 @@
     String SCOPE_RUNTIME = "runtime";
 
     String SCOPE_PROVIDED = "provided";
+    
+    String SCOPE_SYSTEM = "system";
 
     String getGroupId();
 

Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java Wed Aug 31 00:39:01 2005
@@ -35,11 +35,14 @@
     private final boolean testScope;
 
     private final boolean providedScope;
+    
+    private final boolean systemScope;
 
     public ScopeArtifactFilter( String scope )
     {
         if ( DefaultArtifact.SCOPE_COMPILE.equals( scope ) )
         {
+            systemScope = true;
             providedScope = true;
             compileScope = true;
             runtimeScope = false;
@@ -47,6 +50,7 @@
         }
         else if ( DefaultArtifact.SCOPE_RUNTIME.equals( scope ) )
         {
+            systemScope = false;
             providedScope = false;
             compileScope = true;
             runtimeScope = true;
@@ -54,6 +58,7 @@
         }
         else if ( DefaultArtifact.SCOPE_TEST.equals( scope ) )
         {
+            systemScope = true;
             providedScope = true;
             compileScope = true;
             runtimeScope = true;
@@ -61,6 +66,7 @@
         }
         else
         {
+            systemScope = false;
             providedScope = false;
             compileScope = false;
             runtimeScope = false;
@@ -70,21 +76,25 @@
 
     public boolean include( Artifact artifact )
     {
-        if ( DefaultArtifact.SCOPE_COMPILE.equals( artifact.getScope() ) )
+        if ( Artifact.SCOPE_COMPILE.equals( artifact.getScope() ) )
         {
             return compileScope;
         }
-        else if ( DefaultArtifact.SCOPE_RUNTIME.equals( artifact.getScope() ) )
+        else if ( Artifact.SCOPE_RUNTIME.equals( artifact.getScope() ) )
         {
             return runtimeScope;
         }
-        else if ( DefaultArtifact.SCOPE_TEST.equals( artifact.getScope() ) )
+        else if ( Artifact.SCOPE_TEST.equals( artifact.getScope() ) )
         {
             return testScope;
         }
-        else if ( DefaultArtifact.SCOPE_PROVIDED.equals( artifact.getScope() ) )
+        else if ( Artifact.SCOPE_PROVIDED.equals( artifact.getScope() ) )
         {
             return providedScope;
+        }
+        else if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
+        {
+            return systemScope;
         }
         else
         {

Modified: maven/components/trunk/maven-core-it/README.txt
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/README.txt?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-core-it/README.txt (original)
+++ maven/components/trunk/maven-core-it/README.txt Wed Aug 31 00:39:01 2005
@@ -178,6 +178,8 @@
 it0062: Test that a deployment of a snapshot falls back to a non-snapshot repository if no snapshot repository is
         specified.
 
+it0063: Test the use of a system scoped dependency to tools.jar.
+
 -------------------------------------------------------------------------------
 
 - generated sources

Modified: maven/components/trunk/maven-core-it/integration-tests.txt
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/integration-tests.txt?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-core-it/integration-tests.txt (original)
+++ maven/components/trunk/maven-core-it/integration-tests.txt Wed Aug 31 00:39:01 2005
@@ -1,3 +1,4 @@
+it0063
 it0062
 it0061
 it0060

Modified: maven/components/trunk/maven-core-it/it0042/goals.txt
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0042/goals.txt?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-core-it/it0042/goals.txt (original)
+++ maven/components/trunk/maven-core-it/it0042/goals.txt Wed Aug 31 00:39:01 2005
@@ -1,2 +1 @@
-compile
 package

Added: maven/components/trunk/maven-core-it/it0063/expected-results.txt
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0063/expected-results.txt?rev=264960&view=auto
==============================================================================
--- maven/components/trunk/maven-core-it/it0063/expected-results.txt (added)
+++ maven/components/trunk/maven-core-it/it0063/expected-results.txt Wed Aug 31 00:39:01 2005
@@ -0,0 +1,4 @@
+target/classes/org/apache/maven/it0001/Person.class
+target/test-classes/org/apache/maven/it0001/PersonTest.class
+target/maven-core-it0063-1.0.jar
+target/maven-core-it0063-1.0.jar!/it0001.properties

Propchange: maven/components/trunk/maven-core-it/it0063/expected-results.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core-it/it0063/expected-results.txt
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-core-it/it0063/goals.txt
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0063/goals.txt?rev=264960&view=auto
==============================================================================
--- maven/components/trunk/maven-core-it/it0063/goals.txt (added)
+++ maven/components/trunk/maven-core-it/it0063/goals.txt Wed Aug 31 00:39:01 2005
@@ -0,0 +1 @@
+package

Propchange: maven/components/trunk/maven-core-it/it0063/goals.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core-it/it0063/goals.txt
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-core-it/it0063/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0063/pom.xml?rev=264960&view=auto
==============================================================================
--- maven/components/trunk/maven-core-it/it0063/pom.xml (added)
+++ maven/components/trunk/maven-core-it/it0063/pom.xml Wed Aug 31 00:39:01 2005
@@ -0,0 +1,22 @@
+<model>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.it</groupId>
+  <artifactId>maven-core-it0063</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+  <dependencies>
+    <dependency>
+      <groupId>jdk-tools</groupId>
+      <artifactId>jdk-tools</artifactId>
+      <version>1.4.2</version>
+      <scope>system</scope>
+      <systemPath>${java.home}/../lib/tools.jar</systemPath>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</model>

Propchange: maven/components/trunk/maven-core-it/it0063/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core-it/it0063/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-core-it/it0063/src/main/java/org/apache/maven/it0001/Person.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0063/src/main/java/org/apache/maven/it0001/Person.java?rev=264960&view=auto
==============================================================================
--- maven/components/trunk/maven-core-it/it0063/src/main/java/org/apache/maven/it0001/Person.java (added)
+++ maven/components/trunk/maven-core-it/it0063/src/main/java/org/apache/maven/it0001/Person.java Wed Aug 31 00:39:01 2005
@@ -0,0 +1,18 @@
+package org.apache.maven.it0001;
+
+import com.sun.tools.javac.Main;
+
+public class Person
+{
+    private String name;
+    
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+    
+    public String getName()
+    {
+        return name;
+    }
+}

Propchange: maven/components/trunk/maven-core-it/it0063/src/main/java/org/apache/maven/it0001/Person.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core-it/it0063/src/main/java/org/apache/maven/it0001/Person.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-core-it/it0063/src/main/resources/it0001.properties
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0063/src/main/resources/it0001.properties?rev=264960&view=auto
==============================================================================
--- maven/components/trunk/maven-core-it/it0063/src/main/resources/it0001.properties (added)
+++ maven/components/trunk/maven-core-it/it0063/src/main/resources/it0001.properties Wed Aug 31 00:39:01 2005
@@ -0,0 +1 @@
+name = jason

Propchange: maven/components/trunk/maven-core-it/it0063/src/main/resources/it0001.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core-it/it0063/src/main/resources/it0001.properties
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-core-it/it0063/src/test/java/org/apache/maven/it0001/PersonTest.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0063/src/test/java/org/apache/maven/it0001/PersonTest.java?rev=264960&view=auto
==============================================================================
--- maven/components/trunk/maven-core-it/it0063/src/test/java/org/apache/maven/it0001/PersonTest.java (added)
+++ maven/components/trunk/maven-core-it/it0063/src/test/java/org/apache/maven/it0001/PersonTest.java Wed Aug 31 00:39:01 2005
@@ -0,0 +1,16 @@
+package org.apache.maven.it0001;
+
+import junit.framework.TestCase;
+
+public class PersonTest
+    extends TestCase
+{
+    public void testPerson()
+    {
+        Person person = new Person();
+        
+        person.setName( "foo" );
+        
+        assertEquals( "foo", person.getName() );
+    }
+}

Propchange: maven/components/trunk/maven-core-it/it0063/src/test/java/org/apache/maven/it0001/PersonTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core-it/it0063/src/test/java/org/apache/maven/it0001/PersonTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/maven-model/maven.mdo
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-model/maven.mdo?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-model/maven.mdo (original)
+++ maven/components/trunk/maven-model/maven.mdo Wed Aug 31 00:39:01 2005
@@ -1254,6 +1254,12 @@
           <!-- defaultValue>compile</defaultValue -->
         </field>
         <field>
+          <name>systemPath</name>
+          <version>4.0.0</version>
+          <description>FOR SYSTEM SCOPE ONLY. This specifies the path on the filesystem for this dependency.</description>
+          <type>String</type>
+        </field>
+        <field>
           <name>exclusions</name>
           <version>4.0.0</version>
           <description>

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Wed Aug 31 00:39:01 2005
@@ -579,7 +579,9 @@
         // TODO: Clean this up...we're using this to 'jump' the interpolation step for model properties not expressed in XML.
         //  [BP] - Can this above comment be explained?
         // We don't need all the project methods that are added over those in the model, but we do need basedir
-        Map context = Collections.singletonMap( "basedir", project.getBasedir() );
+        Map context = new HashMap( System.getProperties() );
+        context.put( "basedir", project.getBasedir() );
+        
         model = modelInterpolator.interpolate( model, context );
 
         // interpolation is before injection, because interpolation is off-limits in the injected variables

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java Wed Aug 31 00:39:01 2005
@@ -347,7 +347,8 @@
             if ( isAddedToClasspath( a ) )
             {
                 // TODO: let the scope handler deal with this
-                if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() ) )
+                if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
+                    || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
                 {
                     String refId = getProjectReferenceId( a.getGroupId(), a.getArtifactId() );
                     MavenProject project = (MavenProject) projectReferences.get( refId );
@@ -382,7 +383,8 @@
             if ( isAddedToClasspath( a ) )
             {
                 // TODO: let the scope handler deal with this
-                if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() ) )
+                if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
+                    || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
                 {
                     list.add( a );
                 }
@@ -407,7 +409,8 @@
             Artifact a = (Artifact) i.next();
 
             // TODO: let the scope handler deal with this
-            if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() ) )
+            if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
+                || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
             {
                 Dependency dependency = new Dependency();
 

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java Wed Aug 31 00:39:01 2005
@@ -38,6 +38,7 @@
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.StringUtils;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -72,7 +73,7 @@
     public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories )
         throws ArtifactMetadataRetrievalException
     {
-        MavenProject project;
+        MavenProject project = null;
 
         Artifact pomArtifact;
         boolean done = false;
@@ -82,65 +83,76 @@
             pomArtifact = artifactFactory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(),
                                                                  artifact.getVersion(), artifact.getScope() );
 
-            try
+            if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
             {
-                project = mavenProjectBuilder.buildFromRepository( pomArtifact, remoteRepositories, localRepository );
-            }
-            catch ( InvalidModelException e )
-            {
-                getLogger().warn( "POM for: \'" + pomArtifact.getId() + "\' does not appear to be valid. Its will be ignored for artifact resolution." );
-                
-                project = null;
-            }
-            catch ( ProjectBuildingException e )
-            {
-                throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file", e );
+                done = true;
             }
-
-            if ( project != null )
+            else
             {
-                Relocation relocation = null;
+                try
+                {
+                    project = mavenProjectBuilder
+                        .buildFromRepository( pomArtifact, remoteRepositories, localRepository );
+                }
+                catch ( InvalidModelException e )
+                {
+                    getLogger()
+                        .warn(
+                               "POM for: \'" + pomArtifact.getId()
+                                   + "\' does not appear to be valid. Its will be ignored for artifact resolution." );
 
-                DistributionManagement distMgmt = project.getDistributionManagement();
-                if ( distMgmt != null )
+                    project = null;
+                }
+                catch ( ProjectBuildingException e )
                 {
-                    relocation = distMgmt.getRelocation();
+                    throw new ArtifactMetadataRetrievalException( "Unable to read the metadata file", e );
                 }
 
-                if ( relocation != null )
+                if ( project != null )
                 {
-                    if ( relocation.getGroupId() != null )
-                    {
-                        artifact.setGroupId( relocation.getGroupId() );
-                    }
-                    if ( relocation.getArtifactId() != null )
-                    {
-                        artifact.setArtifactId( relocation.getArtifactId() );
-                    }
-                    if ( relocation.getVersion() != null )
+                    Relocation relocation = null;
+
+                    DistributionManagement distMgmt = project.getDistributionManagement();
+                    if ( distMgmt != null )
                     {
-                        artifact.setVersion( relocation.getVersion() );
+                        relocation = distMgmt.getRelocation();
                     }
 
-                    String message = "\n  This artifact has been relocated to " + artifact.getGroupId() + ":"
-                        + artifact.getArtifactId() + ":" + artifact.getVersion() + ".\n";
+                    if ( relocation != null )
+                    {
+                        if ( relocation.getGroupId() != null )
+                        {
+                            artifact.setGroupId( relocation.getGroupId() );
+                        }
+                        if ( relocation.getArtifactId() != null )
+                        {
+                            artifact.setArtifactId( relocation.getArtifactId() );
+                        }
+                        if ( relocation.getVersion() != null )
+                        {
+                            artifact.setVersion( relocation.getVersion() );
+                        }
+
+                        String message = "\n  This artifact has been relocated to " + artifact.getGroupId() + ":"
+                            + artifact.getArtifactId() + ":" + artifact.getVersion() + ".\n";
+
+                        if ( relocation.getMessage() != null )
+                        {
+                            message += "  " + relocation.getMessage() + "\n";
+                        }
 
-                    if ( relocation.getMessage() != null )
+                        getLogger().warn( message + "\n" );
+                    }
+                    else
                     {
-                        message += "  " + relocation.getMessage() + "\n";
+                        done = true;
                     }
-
-                    getLogger().warn( message + "\n" );
                 }
                 else
                 {
                     done = true;
                 }
             }
-            else
-            {
-                done = true;
-            }
         }
         while ( !done );
 
@@ -250,6 +262,11 @@
             Artifact artifact = artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(),
                                                                           versionRange, d.getType(), d.getClassifier(),
                                                                           scope, inheritedScope );
+            
+            if ( Artifact.SCOPE_SYSTEM.equals( scope ) )
+            {
+                artifact.setFile( new File( d.getSystemPath() ) );
+            }
 
             if ( artifact != null && ( dependencyFilter == null || dependencyFilter.include( artifact ) ) )
             {

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultModelDefaultsInjector.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultModelDefaultsInjector.java?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultModelDefaultsInjector.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultModelDefaultsInjector.java Wed Aug 31 00:39:01 2005
@@ -83,6 +83,7 @@
         if ( dep.getScope() == null && def.getScope() != null )
         {
             dep.setScope( def.getScope() );
+            dep.setSystemPath( def.getSystemPath() );
         }
 
         if ( dep.getVersion() == null && def.getVersion() != null )

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java?rev=264960&r1=264959&r2=264960&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java Wed Aug 31 00:39:01 2005
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
@@ -23,6 +24,7 @@
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.model.Reporting;
+import org.codehaus.plexus.util.StringUtils;
 
 import java.util.Iterator;
 import java.util.List;
@@ -62,6 +64,15 @@
             validateSubElementStringNotEmpty( d, "dependencies.dependency.type", result, d.getType() );
 
             validateSubElementStringNotEmpty( d, "dependencies.dependency.version", result, d.getVersion() );
+            
+            if ( Artifact.SCOPE_SYSTEM.equals( d.getScope() ) && StringUtils.isEmpty( d.getSystemPath() ) )
+            {
+                result.addMessage( "For dependency " + d + ": system-scoped dependency must specify systemPath." );
+            }
+            else if ( !Artifact.SCOPE_SYSTEM.equals( d.getScope() ) && StringUtils.isNotEmpty( d.getSystemPath() ) )
+            {
+                result.addMessage( "For dependency " + d + ": only dependency with system scope can specify systemPath." );
+            }
         }
 
         DependencyManagement mgmt = model.getDependencyManagement();
@@ -76,6 +87,15 @@
 
                 validateSubElementStringNotEmpty( d, "dependencyManagement.dependencies.dependency.groupId", result,
                                         d.getGroupId() );
+                
+                if ( Artifact.SCOPE_SYSTEM.equals( d.getScope() ) && StringUtils.isEmpty( d.getSystemPath() ) )
+                {
+                    result.addMessage( "For managed dependency " + d + ": system-scoped dependency must specify systemPath." );
+                }
+                else if ( !Artifact.SCOPE_SYSTEM.equals( d.getScope() ) && StringUtils.isNotEmpty( d.getSystemPath() ) )
+                {
+                    result.addMessage( "For managed dependency " + d + ": only dependency with system scope can specify systemPath." );
+                }
             }
         }
 

Added: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java?rev=264960&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java (added)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java Wed Aug 31 00:39:01 2005
@@ -0,0 +1,108 @@
+package org.apache.maven.project.artifact;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Model;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.injection.ModelDefaultsInjector;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.util.Map;
+
+public class MavenMetadataSourceTest
+    extends PlexusTestCase
+{
+    
+    public void testShouldUseCompileScopeIfDependencyScopeEmpty() throws Exception
+    {
+        String groupId = "org.apache.maven";
+        String artifactId = "maven-model";
+        
+        Dependency dep = new Dependency();
+        
+        dep.setGroupId(groupId);
+        dep.setArtifactId(artifactId);
+        dep.setVersion("2.0-alpha-3");
+        
+        Model model = new Model();
+        
+        model.addDependency(dep);
+        
+        MavenProject project = new MavenProject( model );
+        
+        ArtifactFactory factory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+        
+        project.setArtifacts( project.createArtifacts(factory, null, null) );
+        
+        String key = ArtifactUtils.versionlessKey(groupId, artifactId );
+        
+        Map artifactMap = project.getArtifactMap();
+        
+        assertNotNull( "artifact-map should not be null.", artifactMap );
+        assertEquals( "artifact-map should contain 1 element.", 1, artifactMap.size() );
+        
+        Artifact artifact = (Artifact) artifactMap.get( key );
+        
+        assertNotNull( "dependency artifact not found in map.", artifact );
+        assertEquals( "dependency artifact has wrong scope.", Artifact.SCOPE_COMPILE, artifact.getScope() );
+        
+        //check for back-propagation of default scope.
+        assertEquals( "default scope NOT back-propagated to dependency.", Artifact.SCOPE_COMPILE, dep.getScope() );
+    }
+
+    public void testShouldUseInjectedTestScopeFromDependencyManagement() throws Exception
+    {
+        String groupId = "org.apache.maven";
+        String artifactId = "maven-model";
+        
+        Dependency dep = new Dependency();
+        
+        dep.setGroupId(groupId);
+        dep.setArtifactId(artifactId);
+        dep.setVersion("2.0-alpha-3");
+        
+        Model model = new Model();
+        
+        model.addDependency(dep);
+        
+        Dependency mgd = new Dependency();
+        mgd.setGroupId( groupId);
+        mgd.setArtifactId( artifactId );
+        mgd.setScope( Artifact.SCOPE_TEST);
+        
+        DependencyManagement depMgmt = new DependencyManagement();
+        
+        depMgmt.addDependency(mgd);
+        
+        model.setDependencyManagement(depMgmt);
+        
+        MavenProject project = new MavenProject( model );
+        
+        ModelDefaultsInjector injector = (ModelDefaultsInjector) lookup( ModelDefaultsInjector.ROLE );
+        
+        injector.injectDefaults( model );
+        
+        ArtifactFactory factory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+        
+        project.setArtifacts( project.createArtifacts(factory, null, null) );
+        
+        String key = ArtifactUtils.versionlessKey(groupId, artifactId );
+        
+        Map artifactMap = project.getArtifactMap();
+        
+        assertNotNull( "artifact-map should not be null.", artifactMap );
+        assertEquals( "artifact-map should contain 1 element.", 1, artifactMap.size() );
+        
+        Artifact artifact = (Artifact) artifactMap.get( key );
+        
+        assertNotNull( "dependency artifact not found in map.", artifact );
+        assertEquals( "dependency artifact has wrong scope.", Artifact.SCOPE_TEST, artifact.getScope() );
+        
+        //check for back-propagation of default scope.
+        assertEquals( "default scope NOT back-propagated to dependency.", Artifact.SCOPE_TEST, dep.getScope() );
+    }
+
+}

Propchange: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org