churchyard / rpms / maven

Forked from rpms/maven 5 years ago
Clone
Stanislav Ochotnicky 680881b
From 731d9fb5b28edb2e966ef6d6bb93a70607d7d722 Mon Sep 17 00:00:00 2001
Stanislav Ochotnicky 1ae9fb1
From: Stanislav Ochotnicky <sochotnicky@redhat.com>
Stanislav Ochotnicky 1ae9fb1
Date: Tue, 2 Nov 2010 14:47:05 +0100
Stanislav Ochotnicky 680881b
Subject: [PATCH 2/2] 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 680881b
 .../model/validation/DefaultModelValidator.java    |   16 +++++++++++++---
Stanislav Ochotnicky 680881b
 7 files changed, 59 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 680881b
index cae3735..2d11d64 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 680881b
@@ -39,6 +39,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 680881b
+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 680881b
@@ -108,6 +109,14 @@ class DefaultModelResolver
Stanislav Ochotnicky 680881b
         throws UnresolvableModelException
Stanislav Ochotnicky 680881b
     {
Stanislav Ochotnicky 680881b
         Artifact pomArtifact = new DefaultArtifact( groupId, artifactId, "", "pom", version );
Stanislav Ochotnicky 680881b
+        if ( System.getProperty("maven.jpp.mode") != null) {
Stanislav Ochotnicky 680881b
+            JavadirWorkspaceReader wReader = new JavadirWorkspaceReader();
Stanislav Ochotnicky 680881b
+            File pomFile = wReader.findArtifact(pomArtifact);
Stanislav Ochotnicky 680881b
+            // if pom file does not exist continue resolving using different
Stanislav Ochotnicky 680881b
+            // resolvers (maybe they will have more luck)
Stanislav Ochotnicky 680881b
+            if ( pomFile != null )
Stanislav Ochotnicky 680881b
+                return new FileModelSource( pomFile );
Stanislav Ochotnicky 680881b
+        }
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 680881b
index 1f37d4f..d60dab8 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 680881b
+        // in jpp mode we ignore versions because these would only cause
Stanislav Ochotnicky 680881b
+        // problems
Stanislav Ochotnicky 1ae9fb1
+        if ( version == null && System.getProperty("maven.jpp.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 1ae9fb1
+        if( System.getProperty("maven.jpp.mode") == null ) {
Stanislav Ochotnicky 1ae9fb1
+            return groupId + ":" + artifactId + ":" + version;
Stanislav Ochotnicky 1ae9fb1
+        } else {
Stanislav Ochotnicky 1ae9fb1
+            return versionlessKey(groupId, artifactId);
Stanislav Ochotnicky 1ae9fb1
+        }
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 680881b
index e892ee9..0222b01 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 1ae9fb1
@@ -55,6 +55,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 1ae9fb1
+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 680881b
@@ -361,6 +362,12 @@ public class DefaultMaven
Stanislav Ochotnicky 1ae9fb1
             session.setWorkspaceReader( workspaceRepository );
Stanislav Ochotnicky 1ae9fb1
         }
Stanislav Ochotnicky 1ae9fb1
 
Stanislav Ochotnicky 680881b
+        // Set our own workspace reader to resolve from /usr/share/java
Stanislav Ochotnicky 1ae9fb1
+        if ( System.getProperty("maven.jpp.mode") != null)
Stanislav Ochotnicky 1ae9fb1
+        {
Stanislav Ochotnicky 1ae9fb1
+            session.setWorkspaceReader(new JavadirWorkspaceReader());
Stanislav Ochotnicky 1ae9fb1
+        }
Stanislav Ochotnicky 1ae9fb1
+
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 680881b
index 009635b..7d03748 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 680881b
+        // ignore incorrect version in jpp mode (we can have different
Stanislav Ochotnicky 680881b
+        // versions in /usr/share/java
Stanislav Ochotnicky 1ae9fb1
+        if ( !pluginArtifact.getBaseVersion().equals( pluginDescriptor.getVersion() )
Stanislav Ochotnicky 1ae9fb1
+             && System.getProperty("maven.jpp.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 680881b
index fb074fb..bf2e703 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 680881b
@@ -75,6 +75,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 1ae9fb1
+        if (System.getProperty("maven.jpp.mode") != null) {
Stanislav Ochotnicky 680881b
+            // in jpp mode we always use "latest" as a resolved version
Stanislav Ochotnicky 680881b
+            // (we ignore it anyway)
Stanislav Ochotnicky 1ae9fb1
+            DefaultPluginVersionResult result = new DefaultPluginVersionResult("latest");
Stanislav Ochotnicky 1ae9fb1
+            result.setRepository(request.getRepositorySession().getWorkspaceReader().getRepository());
Stanislav Ochotnicky 1ae9fb1
+            logger.debug( "Resolved plugin version for " + request.getGroupId() + ":" + request.getArtifactId()
Stanislav Ochotnicky 1ae9fb1
+                          + " to latest from repository " + result.getRepository());
Stanislav Ochotnicky 1ae9fb1
+            return result;
Stanislav Ochotnicky 1ae9fb1
+        }
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 680881b
index 403351a..2351620 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 680881b
@@ -41,6 +41,7 @@ import org.sonatype.aether.repository.RepositoryPolicy;
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 680881b
+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 680881b
@@ -172,6 +173,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 680881b
+            if ( System.getProperty("maven.jpp.mode") != null) {
Stanislav Ochotnicky 680881b
+                JavadirWorkspaceReader wReader = new JavadirWorkspaceReader();
Stanislav Ochotnicky 680881b
+                pomFile = wReader.findArtifact(pomArtifact);
Stanislav Ochotnicky 680881b
+                // if pom file does not exist continue resolving using different resolvers
Stanislav Ochotnicky 680881b
+                // (maybe they will have more luck)
Stanislav Ochotnicky 680881b
+                if ( pomFile != null)
Stanislav Ochotnicky 680881b
+                    return new FileModelSource( pomFile );
Stanislav Ochotnicky 680881b
+            }
Stanislav Ochotnicky 680881b
 
Stanislav Ochotnicky 680881b
             try
Stanislav Ochotnicky 680881b
             {
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 680881b
index 033211a..eec6caf 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 680881b
@@ -405,7 +405,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 680881b
+                    // in jpp mode set version to "latest" and validate 
Stanislav Ochotnicky 1ae9fb1
+                    if(System.getProperty("maven.jpp.mode") != null && d.getVersion() == null)
Stanislav Ochotnicky 1ae9fb1
+                        d.setVersion("latest");
Stanislav Ochotnicky 1ae9fb1
+                    else
Stanislav Ochotnicky 1ae9fb1
+                        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 680881b
@@ -433,7 +437,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 680881b
+                // in jpp mode set version to "latest" and validate 
Stanislav Ochotnicky 1ae9fb1
+                if(System.getProperty("maven.jpp.mode") != null && d.getVersion() == null)
Stanislav Ochotnicky 1ae9fb1
+                    d.setVersion("latest");
Stanislav Ochotnicky 1ae9fb1
+                else
Stanislav Ochotnicky 1ae9fb1
+                    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 680881b
@@ -452,7 +460,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 680881b
+            // in jpp mode ignore missing version completely
Stanislav Ochotnicky 1ae9fb1
+            if(System.getProperty("maven.jpp.mode") == null)
Stanislav Ochotnicky 1ae9fb1
+                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 680881b
1.7.3.4
Stanislav Ochotnicky 1ae9fb1