mizdebsk / rpms / maven

Forked from rpms/maven 5 years ago
Clone
Stanislav Ochotnicky cbb4efd
From 46e6dbc205065a670fa3b6e7c41e02e30b2fdb7a Mon Sep 17 00:00:00 2001
Stanislav Ochotnicky 1ae9fb1
From: Stanislav Ochotnicky <sochotnicky@redhat.com>
Stanislav Ochotnicky cbb4efd
Date: Tue, 18 Jan 2011 11:09:32 +0100
Stanislav Ochotnicky 7dbeeb5
Subject: [PATCH 2/6] 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 cbb4efd
index 96b9fc3..f30bf94 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 cbb4efd
 import org.sonatype.aether.resolution.ArtifactRequest;
Stanislav Ochotnicky cbb4efd
 import org.sonatype.aether.resolution.ArtifactResolutionException;
Stanislav Ochotnicky cbb4efd
 import org.sonatype.aether.util.artifact.DefaultArtifact;
Stanislav Ochotnicky 9667d78
+import org.apache.maven.artifact.resolver.JavadirWorkspaceReader;
Stanislav Ochotnicky cbb4efd
 
Stanislav Ochotnicky cbb4efd
 /**
Stanislav Ochotnicky cbb4efd
  * 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 cbb4efd
         throws UnresolvableModelException
Stanislav Ochotnicky cbb4efd
     {
Stanislav Ochotnicky cbb4efd
         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 cbb4efd
 
Stanislav Ochotnicky cbb4efd
         try
Stanislav Ochotnicky cbb4efd
         {
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 cbb4efd
index 8efc45c..df7d4e9 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 cbb4efd
         {
Stanislav Ochotnicky cbb4efd
             throw new NullPointerException( "artifactId is null" );
Stanislav Ochotnicky cbb4efd
         }
Stanislav Ochotnicky cbb4efd
-        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 cbb4efd
         {
Stanislav Ochotnicky cbb4efd
             throw new NullPointerException( "version is null" );
Stanislav Ochotnicky cbb4efd
         }
Stanislav Ochotnicky cbb4efd
 
Stanislav Ochotnicky cbb4efd
-        return groupId + ":" + artifactId + ":" + version;
Krzysztof Daniel 544b33b
+        if( System.getProperty("maven.local.mode") == null || version != null) {
Stanislav Ochotnicky 9667d78
+            return groupId + ":" + artifactId + ":" + version;
Stanislav Ochotnicky 9667d78
+        } else {
Stanislav Ochotnicky 9667d78
+            return versionlessKey(groupId, artifactId);
Stanislav Ochotnicky 9667d78
+        }
Stanislav Ochotnicky cbb4efd
     }
Stanislav Ochotnicky cbb4efd
 
Stanislav Ochotnicky cbb4efd
     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 cbb4efd
index cd944a8..7bff4a0 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 cbb4efd
 import org.apache.maven.project.ProjectBuildingRequest;
Stanislav Ochotnicky cbb4efd
 import org.apache.maven.project.ProjectBuildingResult;
Stanislav Ochotnicky cbb4efd
 import org.apache.maven.project.ProjectSorter;
Stanislav Ochotnicky 9667d78
+import org.apache.maven.artifact.resolver.JavadirWorkspaceReader;
Stanislav Ochotnicky cbb4efd
 import org.apache.maven.repository.DelegatingLocalArtifactRepository;
Stanislav Ochotnicky cbb4efd
 import org.apache.maven.repository.LocalRepositoryNotAccessibleException;
Stanislav Ochotnicky cbb4efd
 import org.apache.maven.settings.Mirror;
Stanislav Ochotnicky cbb4efd
@@ -375,6 +376,12 @@ public class DefaultMaven
Stanislav Ochotnicky cbb4efd
             session.setWorkspaceReader( workspaceRepository );
Stanislav Ochotnicky cbb4efd
         }
Stanislav Ochotnicky cbb4efd
 
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 cbb4efd
         DefaultSettingsDecryptionRequest decrypt = new DefaultSettingsDecryptionRequest();
Stanislav Ochotnicky cbb4efd
         decrypt.setProxies( request.getProxies() );
Stanislav Ochotnicky cbb4efd
         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 cbb4efd
index 2eb2738..28fcdd9 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 cbb4efd
             errors.add( "Plugin's descriptor contains the wrong artifact ID: " + pluginDescriptor.getArtifactId() );
Stanislav Ochotnicky cbb4efd
         }
Stanislav Ochotnicky cbb4efd
 
Stanislav Ochotnicky cbb4efd
-        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 cbb4efd
         {
Stanislav Ochotnicky cbb4efd
             errors.add( "Plugin's descriptor contains the wrong version: " + pluginDescriptor.getVersion() );
Stanislav Ochotnicky cbb4efd
         }
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 cbb4efd
index a215d28..754406a 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 cbb4efd
         throws PluginVersionResolutionException
Stanislav Ochotnicky cbb4efd
     {
Stanislav Ochotnicky cbb4efd
         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 cbb4efd
 
Stanislav Ochotnicky cbb4efd
         PluginVersionResult result = resolveFromProject( request );
Stanislav Ochotnicky cbb4efd
 
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 cbb4efd
index e6cc411..bab7885 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 cbb4efd
 import org.sonatype.aether.resolution.ArtifactRequest;
Stanislav Ochotnicky cbb4efd
 import org.sonatype.aether.resolution.ArtifactResolutionException;
Stanislav Ochotnicky cbb4efd
 import org.sonatype.aether.util.artifact.DefaultArtifact;
Stanislav Ochotnicky 9667d78
+import org.apache.maven.artifact.resolver.JavadirWorkspaceReader;
Stanislav Ochotnicky cbb4efd
 
Stanislav Ochotnicky cbb4efd
 /**
Stanislav Ochotnicky cbb4efd
  * 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 cbb4efd
         if ( pomFile == null )
Stanislav Ochotnicky cbb4efd
         {
Stanislav Ochotnicky cbb4efd
             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 cbb4efd
 
Stanislav Ochotnicky cbb4efd
             try
Stanislav Ochotnicky cbb4efd
             {
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 cbb4efd
index 919f0ee..68a509d 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 cbb4efd
             return null;
Stanislav Ochotnicky cbb4efd
         }
Stanislav Ochotnicky cbb4efd
 
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 cbb4efd
         VersionRange versionRange = VersionRange.createFromVersionSpec( dependency.getVersion() );
Stanislav Ochotnicky cbb4efd
 
Stanislav Ochotnicky cbb4efd
         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 cbb4efd
index d7a6ac9..6c76173 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 cbb4efd
@@ -433,7 +433,11 @@ public class DefaultModelValidator
Stanislav Ochotnicky cbb4efd
 
Stanislav Ochotnicky cbb4efd
                 if ( !management )
Stanislav Ochotnicky cbb4efd
                 {
Stanislav Ochotnicky cbb4efd
-                    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 cbb4efd
 
Stanislav Ochotnicky cbb4efd
                     /*
Stanislav Ochotnicky cbb4efd
                      * TODO: Extensions like Flex Mojos use custom scopes like "merged", "internal", "external", etc.
Stanislav Ochotnicky cbb4efd
@@ -461,7 +465,11 @@ public class DefaultModelValidator
Stanislav Ochotnicky cbb4efd
             {
Stanislav Ochotnicky cbb4efd
                 validateEffectiveDependency( problems, d, false, prefix, request );
Stanislav Ochotnicky cbb4efd
 
Stanislav Ochotnicky cbb4efd
-                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 cbb4efd
 
Stanislav Ochotnicky cbb4efd
                 validateEnum( prefix + "scope", problems, errOn30, d.getScope(), d.getManagementKey(), d, "compile",
Stanislav Ochotnicky cbb4efd
                               "runtime", "system" );
Stanislav Ochotnicky cbb4efd
@@ -480,7 +488,9 @@ public class DefaultModelValidator
Stanislav Ochotnicky cbb4efd
         {
Stanislav Ochotnicky cbb4efd
             validateStringNotEmpty( prefix + "type", problems, Severity.ERROR, d.getType(), d.getManagementKey(), d );
Stanislav Ochotnicky cbb4efd
 
Stanislav Ochotnicky cbb4efd
-            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 cbb4efd
                                     d );
Stanislav Ochotnicky cbb4efd
         }
Stanislav Ochotnicky cbb4efd
 
Stanislav Ochotnicky 1ae9fb1
-- 
Stanislav Ochotnicky cbb4efd
1.7.7.6
Stanislav Ochotnicky 1ae9fb1