Stanislav Ochotnicky 61f66c0
From e1b80440159b03b397cba740a7949f8be412fef5 Mon Sep 17 00:00:00 2001
Stanislav Ochotnicky 1ae9fb1
From: Stanislav Ochotnicky <sochotnicky@redhat.com>
Stanislav Ochotnicky 61f66c0
Date: Tue, 30 Aug 2011 11:42:32 +0200
Stanislav Ochotnicky 61f66c0
Subject: [PATCH 2/4] Use custom resolver
Stanislav Ochotnicky 1ae9fb1
Stanislav Ochotnicky 680881b
WorkspaceReader is used to resolve main dependencies, but we had to
Stanislav Ochotnicky 680881b
add this resolve to ProjectModelResolver and DefaultModelResolver as
Stanislav Ochotnicky 680881b
well because these are instantiated early and used to build model of
Stanislav Ochotnicky 680881b
project when WorkspaceReader is not available yet.
Stanislav Ochotnicky 1ae9fb1
---
Stanislav Ochotnicky 680881b
 .../repository/internal/DefaultModelResolver.java  |    9 +++++++++
Stanislav Ochotnicky 680881b
 .../org/apache/maven/artifact/ArtifactUtils.java   |   10 ++++++++--
Stanislav Ochotnicky 680881b
 .../main/java/org/apache/maven/DefaultMaven.java   |    7 +++++++
Stanislav Ochotnicky 680881b
 .../apache/maven/plugin/MavenPluginValidator.java  |    5 ++++-
Stanislav Ochotnicky 680881b
 .../internal/DefaultPluginVersionResolver.java     |    9 +++++++++
Stanislav Ochotnicky 680881b
 .../apache/maven/project/ProjectModelResolver.java |    9 +++++++++
Stanislav Ochotnicky 0f96b05
 .../project/artifact/MavenMetadataSource.java      |    9 +++++++++
Stanislav Ochotnicky 680881b
 .../model/validation/DefaultModelValidator.java    |   16 +++++++++++++---
Stanislav Ochotnicky 9667d78
 8 files changed, 68 insertions(+), 6 deletions(-)
Stanislav Ochotnicky 1ae9fb1
Stanislav Ochotnicky 680881b
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
Stanislav Ochotnicky 9667d78
index 746f852..4232fd7 100644
Stanislav Ochotnicky 680881b
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
Stanislav Ochotnicky 680881b
+++ b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
Stanislav Ochotnicky 9667d78
@@ -40,6 +40,7 @@ import org.sonatype.aether.repository.RemoteRepository;
Stanislav Ochotnicky 680881b
 import org.sonatype.aether.resolution.ArtifactRequest;
Stanislav Ochotnicky 680881b
 import org.sonatype.aether.resolution.ArtifactResolutionException;
Stanislav Ochotnicky 680881b
 import org.sonatype.aether.util.artifact.DefaultArtifact;
Stanislav Ochotnicky 9667d78
+import org.apache.maven.artifact.resolver.JavadirWorkspaceReader;
Stanislav Ochotnicky 680881b
 
Stanislav Ochotnicky 680881b
 /**
Stanislav Ochotnicky 680881b
  * A model resolver to assist building of dependency POMs. This resolver gives priority to those repositories that have
Stanislav Ochotnicky 9667d78
@@ -114,6 +115,14 @@ class DefaultModelResolver
Stanislav Ochotnicky 680881b
         throws UnresolvableModelException
Stanislav Ochotnicky 680881b
     {
Stanislav Ochotnicky 680881b
         Artifact pomArtifact = new DefaultArtifact( groupId, artifactId, "", "pom", version );
Stanislav Ochotnicky 9667d78
+        if ( System.getProperty("maven.local.mode") != null) {
Stanislav Ochotnicky 9667d78
+            JavadirWorkspaceReader wReader = new JavadirWorkspaceReader();
Stanislav Ochotnicky 9667d78
+            File pomFile = wReader.findArtifact(pomArtifact);
Stanislav Ochotnicky 9667d78
+            // if pom file does not exist continue resolving using different
Stanislav Ochotnicky 9667d78
+            // resolvers (maybe they will have more luck)
Stanislav Ochotnicky 9667d78
+            if ( pomFile != null )
Stanislav Ochotnicky 9667d78
+                return new FileModelSource( pomFile );
Stanislav Ochotnicky 9667d78
+        }
Stanislav Ochotnicky 680881b
 
Stanislav Ochotnicky 680881b
         try
Stanislav Ochotnicky 680881b
         {
Stanislav Ochotnicky 1ae9fb1
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java b/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
Stanislav Ochotnicky 9667d78
index 1f37d4f..05b7df6 100644
Stanislav Ochotnicky 1ae9fb1
--- a/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
Stanislav Ochotnicky 1ae9fb1
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
Stanislav Ochotnicky 680881b
@@ -99,12 +99,18 @@ public final class ArtifactUtils
Stanislav Ochotnicky 1ae9fb1
         {
Stanislav Ochotnicky 1ae9fb1
             throw new NullPointerException( "artifactId is null" );
Stanislav Ochotnicky 1ae9fb1
         }
Stanislav Ochotnicky 1ae9fb1
-        if ( version == null )
Stanislav Ochotnicky 9667d78
+        // in local mode we ignore versions because these would only cause
Stanislav Ochotnicky 9667d78
+        // problems
Stanislav Ochotnicky 9667d78
+        if ( version == null && System.getProperty("maven.local.mode") == null )
Stanislav Ochotnicky 1ae9fb1
         {
Stanislav Ochotnicky 1ae9fb1
             throw new NullPointerException( "version is null" );
Stanislav Ochotnicky 1ae9fb1
         }
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 1ae9fb1
-        return groupId + ":" + artifactId + ":" + version;
Stanislav Ochotnicky 9667d78
+        if( System.getProperty("maven.local.mode") == null ) {
Stanislav Ochotnicky 9667d78
+            return groupId + ":" + artifactId + ":" + version;
Stanislav Ochotnicky 9667d78
+        } else {
Stanislav Ochotnicky 9667d78
+            return versionlessKey(groupId, artifactId);
Stanislav Ochotnicky 9667d78
+        }
Stanislav Ochotnicky 1ae9fb1
     }
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 1ae9fb1
     public static Map<String, Artifact> artifactMapByVersionlessId( Collection<Artifact> artifacts )
Stanislav Ochotnicky 1ae9fb1
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
Stanislav Ochotnicky 9667d78
index a7c1a2b..8fdb6ed 100644
Stanislav Ochotnicky 1ae9fb1
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
Stanislav Ochotnicky 1ae9fb1
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
Stanislav Ochotnicky 9667d78
@@ -56,6 +56,7 @@ import org.apache.maven.project.ProjectBuildingException;
Stanislav Ochotnicky 1ae9fb1
 import org.apache.maven.project.ProjectBuildingRequest;
Stanislav Ochotnicky 1ae9fb1
 import org.apache.maven.project.ProjectBuildingResult;
Stanislav Ochotnicky 1ae9fb1
 import org.apache.maven.project.ProjectSorter;
Stanislav Ochotnicky 9667d78
+import org.apache.maven.artifact.resolver.JavadirWorkspaceReader;
Stanislav Ochotnicky 1ae9fb1
 import org.apache.maven.repository.DelegatingLocalArtifactRepository;
Stanislav Ochotnicky 1ae9fb1
 import org.apache.maven.repository.LocalRepositoryNotAccessibleException;
Stanislav Ochotnicky 1ae9fb1
 import org.apache.maven.settings.Mirror;
Stanislav Ochotnicky 9667d78
@@ -363,6 +364,12 @@ public class DefaultMaven
Stanislav Ochotnicky 1ae9fb1
             session.setWorkspaceReader( workspaceRepository );
Stanislav Ochotnicky 1ae9fb1
         }
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 9667d78
+        // Set our own workspace reader to resolve from /usr/share/java
Stanislav Ochotnicky 9667d78
+        if ( System.getProperty("maven.local.mode") != null)
Stanislav Ochotnicky 9667d78
+        {
Stanislav Ochotnicky 9667d78
+            session.setWorkspaceReader(new JavadirWorkspaceReader());
Stanislav Ochotnicky 9667d78
+        }
Stanislav Ochotnicky 9667d78
+
Stanislav Ochotnicky 1ae9fb1
         DefaultSettingsDecryptionRequest decrypt = new DefaultSettingsDecryptionRequest();
Stanislav Ochotnicky 1ae9fb1
         decrypt.setProxies( request.getProxies() );
Stanislav Ochotnicky 1ae9fb1
         decrypt.setServers( request.getServers() );
Stanislav Ochotnicky 1ae9fb1
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java b/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
Stanislav Ochotnicky 9667d78
index 009635b..93b86d0 100644
Stanislav Ochotnicky 1ae9fb1
--- a/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
Stanislav Ochotnicky 1ae9fb1
+++ b/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
Stanislav Ochotnicky 680881b
@@ -60,7 +60,10 @@ public class MavenPluginValidator
Stanislav Ochotnicky 1ae9fb1
             errors.add( "Plugin's descriptor contains the wrong artifact ID: " + pluginDescriptor.getArtifactId() );
Stanislav Ochotnicky 1ae9fb1
         }
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 1ae9fb1
-        if ( !pluginArtifact.getBaseVersion().equals( pluginDescriptor.getVersion() ) )
Stanislav Ochotnicky 9667d78
+        // ignore incorrect version in local mode (we can have different
Stanislav Ochotnicky 9667d78
+        // versions in /usr/share/java
Stanislav Ochotnicky 9667d78
+        if ( !pluginArtifact.getBaseVersion().equals( pluginDescriptor.getVersion() )
Stanislav Ochotnicky 9667d78
+             && System.getProperty("maven.local.mode") == null)
Stanislav Ochotnicky 1ae9fb1
         {
Stanislav Ochotnicky 1ae9fb1
             errors.add( "Plugin's descriptor contains the wrong version: " + pluginDescriptor.getVersion() );
Stanislav Ochotnicky 1ae9fb1
         }
Stanislav Ochotnicky 1ae9fb1
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java b/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
Stanislav Ochotnicky 9667d78
index c5f5604..cac7fc8 100644
Stanislav Ochotnicky 1ae9fb1
--- a/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
Stanislav Ochotnicky 1ae9fb1
+++ b/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
Stanislav Ochotnicky 9667d78
@@ -89,6 +89,15 @@ public class DefaultPluginVersionResolver
Stanislav Ochotnicky 1ae9fb1
         throws PluginVersionResolutionException
Stanislav Ochotnicky 1ae9fb1
     {
Stanislav Ochotnicky 1ae9fb1
         logger.debug( "Resolving plugin version for " + request.getGroupId() + ":" + request.getArtifactId() );
Stanislav Ochotnicky 9667d78
+        if (System.getProperty("maven.local.mode") != null) {
Stanislav Ochotnicky 9667d78
+            // in local mode we always use "latest" as a resolved version
Stanislav Ochotnicky 9667d78
+            // (we ignore it anyway)
Stanislav Ochotnicky 9667d78
+            DefaultPluginVersionResult result = new DefaultPluginVersionResult("latest");
Stanislav Ochotnicky 9667d78
+            result.setRepository(request.getRepositorySession().getWorkspaceReader().getRepository());
Stanislav Ochotnicky 9667d78
+            logger.debug( "Resolved plugin version for " + request.getGroupId() + ":" + request.getArtifactId()
Stanislav Ochotnicky 9667d78
+                          + " to latest from repository " + result.getRepository());
Stanislav Ochotnicky 9667d78
+            return result;
Stanislav Ochotnicky 9667d78
+        }
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 1ae9fb1
         PluginVersionResult result = resolveFromProject( request );
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 680881b
diff --git a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java b/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
Stanislav Ochotnicky 9667d78
index e788cea..430960c 100644
Stanislav Ochotnicky 680881b
--- a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
Stanislav Ochotnicky 680881b
+++ b/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
Stanislav Ochotnicky 9667d78
@@ -42,6 +42,7 @@ import org.sonatype.aether.repository.RemoteRepository;
Stanislav Ochotnicky 680881b
 import org.sonatype.aether.resolution.ArtifactRequest;
Stanislav Ochotnicky 680881b
 import org.sonatype.aether.resolution.ArtifactResolutionException;
Stanislav Ochotnicky 680881b
 import org.sonatype.aether.util.artifact.DefaultArtifact;
Stanislav Ochotnicky 9667d78
+import org.apache.maven.artifact.resolver.JavadirWorkspaceReader;
Stanislav Ochotnicky 680881b
 
Stanislav Ochotnicky 680881b
 /**
Stanislav Ochotnicky 680881b
  * A model resolver to assist building of projects. This resolver gives priority to those repositories that have been
Stanislav Ochotnicky 9667d78
@@ -147,6 +148,14 @@ class ProjectModelResolver
Stanislav Ochotnicky 680881b
         if ( pomFile == null )
Stanislav Ochotnicky 680881b
         {
Stanislav Ochotnicky 680881b
             Artifact pomArtifact = new DefaultArtifact( groupId, artifactId, "", "pom", version );
Stanislav Ochotnicky 9667d78
+            if ( System.getProperty("maven.local.mode") != null) {
Stanislav Ochotnicky 9667d78
+                JavadirWorkspaceReader wReader = new JavadirWorkspaceReader();
Stanislav Ochotnicky 9667d78
+                pomFile = wReader.findArtifact(pomArtifact);
Stanislav Ochotnicky 9667d78
+                // if pom file does not exist continue resolving using different resolvers
Stanislav Ochotnicky 9667d78
+                // (maybe they will have more luck)
Stanislav Ochotnicky 9667d78
+                if ( pomFile != null)
Stanislav Ochotnicky 9667d78
+                    return new FileModelSource( pomFile );
Stanislav Ochotnicky 9667d78
+            }
Stanislav Ochotnicky 680881b
 
Stanislav Ochotnicky 680881b
             try
Stanislav Ochotnicky 680881b
             {
Stanislav Ochotnicky 0f96b05
diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
Stanislav Ochotnicky 9667d78
index 44a6879..7209b49 100644
Stanislav Ochotnicky 0f96b05
--- a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
Stanislav Ochotnicky 0f96b05
+++ b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
Stanislav Ochotnicky 9667d78
@@ -325,6 +325,15 @@ public class MavenMetadataSource
Stanislav Ochotnicky 0f96b05
             return null;
Stanislav Ochotnicky 0f96b05
         }
Stanislav Ochotnicky 0f96b05
 
Stanislav Ochotnicky 9667d78
+        // this is a workaround for 669034
Stanislav Ochotnicky 9667d78
+        // Seems like plexus-container-default has some quirks that
Stanislav Ochotnicky 9667d78
+        // cause it to lose version. Needs more looking into and fix it
Stanislav Ochotnicky 9667d78
+        // properly
Stanislav Ochotnicky 9667d78
+        if (dependency.getVersion() == null && System.getProperty("maven.local.mode") != null) 
Stanislav Ochotnicky 9667d78
+        {
Stanislav Ochotnicky 9667d78
+            System.out.println("FIXING NULL VERSION:" + dependency.getGroupId() + ":" + dependency.getArtifactId() + ":" + dependency.getVersion());
Stanislav Ochotnicky 9667d78
+            dependency.setVersion("1.0.0");
Stanislav Ochotnicky 9667d78
+        }
Stanislav Ochotnicky 0f96b05
         VersionRange versionRange = VersionRange.createFromVersionSpec( dependency.getVersion() );
Stanislav Ochotnicky 0f96b05
 
Stanislav Ochotnicky 0f96b05
         Artifact dependencyArtifact =
Stanislav Ochotnicky 1ae9fb1
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java b/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
Stanislav Ochotnicky 9667d78
index c97095f..ef0edc2 100644
Stanislav Ochotnicky 1ae9fb1
--- a/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
Stanislav Ochotnicky 1ae9fb1
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
Stanislav Ochotnicky 9667d78
@@ -434,7 +434,11 @@ public class DefaultModelValidator
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 1ae9fb1
                 if ( !management )
Stanislav Ochotnicky 1ae9fb1
                 {
Stanislav Ochotnicky 1ae9fb1
-                    validateVersion( prefix + "version", problems, errOn30, d.getVersion(), d.getManagementKey(), d );
Stanislav Ochotnicky 9667d78
+                    // in local mode set version to "latest" and validate 
Stanislav Ochotnicky 9667d78
+                    if(System.getProperty("maven.local.mode") != null && d.getVersion() == null)
Stanislav Ochotnicky 9667d78
+                        d.setVersion("latest");
Stanislav Ochotnicky 9667d78
+                    else
Stanislav Ochotnicky 9667d78
+                        validateVersion( prefix + "version", problems, errOn30, d.getVersion(), d.getManagementKey(), d );
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 1ae9fb1
                     /*
Stanislav Ochotnicky 1ae9fb1
                      * TODO: Extensions like Flex Mojos use custom scopes like "merged", "internal", "external", etc.
Stanislav Ochotnicky 9667d78
@@ -462,7 +466,11 @@ public class DefaultModelValidator
Stanislav Ochotnicky 1ae9fb1
             {
Stanislav Ochotnicky 1ae9fb1
                 validateEffectiveDependency( problems, d, false, prefix, request );
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 1ae9fb1
-                validateVersion( prefix + "version", problems, errOn30, d.getVersion(), d.getManagementKey(), d );
Stanislav Ochotnicky 9667d78
+                // in local mode set version to "latest" and validate 
Stanislav Ochotnicky 9667d78
+                if(System.getProperty("maven.local.mode") != null && d.getVersion() == null)
Stanislav Ochotnicky 9667d78
+                    d.setVersion("latest");
Stanislav Ochotnicky 9667d78
+                else
Stanislav Ochotnicky 9667d78
+                    validateVersion( prefix + "version", problems, errOn30, d.getVersion(), d.getManagementKey(), d );
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 1ae9fb1
                 validateEnum( prefix + "scope", problems, errOn30, d.getScope(), d.getManagementKey(), d, "compile",
Stanislav Ochotnicky 1ae9fb1
                               "runtime", "system" );
Stanislav Ochotnicky 9667d78
@@ -481,7 +489,9 @@ public class DefaultModelValidator
Stanislav Ochotnicky 1ae9fb1
         {
Stanislav Ochotnicky 1ae9fb1
             validateStringNotEmpty( prefix + "type", problems, Severity.ERROR, d.getType(), d.getManagementKey(), d );
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 1ae9fb1
-            validateStringNotEmpty( prefix + "version", problems, Severity.ERROR, d.getVersion(), d.getManagementKey(),
Stanislav Ochotnicky 9667d78
+            // in local mode ignore missing version completely
Stanislav Ochotnicky 9667d78
+            if(System.getProperty("maven.local.mode") == null)
Stanislav Ochotnicky 9667d78
+                validateStringNotEmpty( prefix + "version", problems, Severity.ERROR, d.getVersion(), d.getManagementKey(),
Stanislav Ochotnicky 1ae9fb1
                                     d );
Stanislav Ochotnicky 1ae9fb1
         }
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 1ae9fb1
-- 
Stanislav Ochotnicky 61f66c0
1.7.6
Stanislav Ochotnicky 1ae9fb1