[maven] Fix #667625 #667614 and #667636

Stanislav Ochotnicky sochotni at fedoraproject.org
Wed Jan 12 10:14:08 UTC 2011


commit 680881b48dfcddcc527fcec754745f1d247df0ee
Author: Stanislav Ochotnicky <sochotnicky at redhat.com>
Date:   Tue Jan 11 16:40:20 2011 +0100

    Fix #667625 #667614 and #667636
    
    - Install maven metadata so they are not downloaded when mvn is run (667625)
    
      repo-metadata.tar.xz will have to be updated as additional plugins need new metadata
    
    - Make sure JavadirWorkspaceReader is used when building model (patch update)
    
      Needed because WorkspaceReader is not used early when building mvn project
      and this causes problems
    
    - JavadirWorkspaceReader doesn't pretend to resolve non-existent artifacts anymore
    
      Instead it returns null (artifact not found) so that reactor/local resolver can work as expected

 0001-Add-plexus-default-container-dep.patch |    4 +-
 0002-Use-custom-resolver.patch              |  112 ++++++++++++++++++++++-----
 JavadirWorkspaceReader.java                 |   11 +++-
 maven-script-local                          |   35 ++++++++-
 maven.spec                                  |   26 ++++++-
 repo-metadata.tar.xz                        |  Bin 0 -> 3028 bytes
 6 files changed, 161 insertions(+), 27 deletions(-)
---
diff --git a/0001-Add-plexus-default-container-dep.patch b/0001-Add-plexus-default-container-dep.patch
index 82810b0..7f2db81 100644
--- a/0001-Add-plexus-default-container-dep.patch
+++ b/0001-Add-plexus-default-container-dep.patch
@@ -1,7 +1,7 @@
 From 5a04c433c126ae0945bb4a18d708cfc7dc5df29e Mon Sep 17 00:00:00 2001
 From: Stanislav Ochotnicky <sochotnicky at redhat.com>
 Date: Tue, 12 Oct 2010 16:56:50 +0200
-Subject: [PATCH 1/3] Add plexus-default-container dep
+Subject: [PATCH 1/2] Add plexus-default-container dep
 
 ---
  maven-plugin-api/pom.xml |    4 ++++
@@ -23,5 +23,5 @@ index 2e99b7b..cffc6d2 100644
  
    <build>
 -- 
-1.7.3.2
+1.7.3.4
 
diff --git a/0002-Use-custom-resolver.patch b/0002-Use-custom-resolver.patch
index c07b671..41a4506 100644
--- a/0002-Use-custom-resolver.patch
+++ b/0002-Use-custom-resolver.patch
@@ -1,25 +1,60 @@
-From efb78912935d04507ce36951686608d33a3b3647 Mon Sep 17 00:00:00 2001
+From 731d9fb5b28edb2e966ef6d6bb93a70607d7d722 Mon Sep 17 00:00:00 2001
 From: Stanislav Ochotnicky <sochotnicky at redhat.com>
 Date: Tue, 2 Nov 2010 14:47:05 +0100
-Subject: [PATCH 3/3] Use custom resolver
+Subject: [PATCH 2/2] Use custom resolver
 
+WorkspaceReader is used to resolve main dependencies, but we had to
+add this resolve to ProjectModelResolver and DefaultModelResolver as
+well because these are instantiated early and used to build model of
+project when WorkspaceReader is not available yet.
 ---
- .../org/apache/maven/artifact/ArtifactUtils.java   |    8 ++++++--
- .../main/java/org/apache/maven/DefaultMaven.java   |    6 ++++++
- .../apache/maven/plugin/MavenPluginValidator.java  |    3 ++-
- .../internal/DefaultPluginVersionResolver.java     |    7 +++++++
- .../model/validation/DefaultModelValidator.java    |   13 ++++++++++---
- 5 files changed, 31 insertions(+), 6 deletions(-)
+ .../repository/internal/DefaultModelResolver.java  |    9 +++++++++
+ .../org/apache/maven/artifact/ArtifactUtils.java   |   10 ++++++++--
+ .../main/java/org/apache/maven/DefaultMaven.java   |    7 +++++++
+ .../apache/maven/plugin/MavenPluginValidator.java  |    5 ++++-
+ .../internal/DefaultPluginVersionResolver.java     |    9 +++++++++
+ .../apache/maven/project/ProjectModelResolver.java |    9 +++++++++
+ .../model/validation/DefaultModelValidator.java    |   16 +++++++++++++---
+ 7 files changed, 59 insertions(+), 6 deletions(-)
 
+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
+index cae3735..2d11d64 100644
+--- 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
+@@ -39,6 +39,7 @@ import org.sonatype.aether.repository.RemoteRepository;
+ import org.sonatype.aether.resolution.ArtifactRequest;
+ import org.sonatype.aether.resolution.ArtifactResolutionException;
+ import org.sonatype.aether.util.artifact.DefaultArtifact;
++import org.apache.maven.artifact.resolver.JavadirWorkspaceReader;
+ 
+ /**
+  * A model resolver to assist building of dependency POMs. This resolver gives priority to those repositories that have
+@@ -108,6 +109,14 @@ class DefaultModelResolver
+         throws UnresolvableModelException
+     {
+         Artifact pomArtifact = new DefaultArtifact( groupId, artifactId, "", "pom", version );
++        if ( System.getProperty("maven.jpp.mode") != null) {
++            JavadirWorkspaceReader wReader = new JavadirWorkspaceReader();
++            File pomFile = wReader.findArtifact(pomArtifact);
++            // if pom file does not exist continue resolving using different
++            // resolvers (maybe they will have more luck)
++            if ( pomFile != null )
++                return new FileModelSource( pomFile );
++        }
+ 
+         try
+         {
 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
-index 1f37d4f..04bc346 100644
+index 1f37d4f..d60dab8 100644
 --- a/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
 +++ b/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
-@@ -99,12 +99,16 @@ public final class ArtifactUtils
+@@ -99,12 +99,18 @@ public final class ArtifactUtils
          {
              throw new NullPointerException( "artifactId is null" );
          }
 -        if ( version == null )
++        // in jpp mode we ignore versions because these would only cause
++        // problems
 +        if ( version == null && System.getProperty("maven.jpp.mode") == null )
          {
              throw new NullPointerException( "version is null" );
@@ -35,7 +70,7 @@ index 1f37d4f..04bc346 100644
  
      public static Map<String, Artifact> artifactMapByVersionlessId( Collection<Artifact> artifacts )
 diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
-index e892ee9..b0bfea6 100644
+index e892ee9..0222b01 100644
 --- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
 +++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
 @@ -55,6 +55,7 @@ import org.apache.maven.project.ProjectBuildingException;
@@ -46,10 +81,11 @@ index e892ee9..b0bfea6 100644
  import org.apache.maven.repository.DelegatingLocalArtifactRepository;
  import org.apache.maven.repository.LocalRepositoryNotAccessibleException;
  import org.apache.maven.settings.Mirror;
-@@ -361,6 +362,11 @@ public class DefaultMaven
+@@ -361,6 +362,12 @@ public class DefaultMaven
              session.setWorkspaceReader( workspaceRepository );
          }
  
++        // Set our own workspace reader to resolve from /usr/share/java
 +        if ( System.getProperty("maven.jpp.mode") != null)
 +        {
 +            session.setWorkspaceReader(new JavadirWorkspaceReader());
@@ -59,28 +95,32 @@ index e892ee9..b0bfea6 100644
          decrypt.setProxies( request.getProxies() );
          decrypt.setServers( request.getServers() );
 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
-index 009635b..91ad68e 100644
+index 009635b..7d03748 100644
 --- a/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
 +++ b/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
-@@ -60,7 +60,8 @@ public class MavenPluginValidator
+@@ -60,7 +60,10 @@ public class MavenPluginValidator
              errors.add( "Plugin's descriptor contains the wrong artifact ID: " + pluginDescriptor.getArtifactId() );
          }
  
 -        if ( !pluginArtifact.getBaseVersion().equals( pluginDescriptor.getVersion() ) )
++        // ignore incorrect version in jpp mode (we can have different
++        // versions in /usr/share/java
 +        if ( !pluginArtifact.getBaseVersion().equals( pluginDescriptor.getVersion() )
 +             && System.getProperty("maven.jpp.mode") == null)
          {
              errors.add( "Plugin's descriptor contains the wrong version: " + pluginDescriptor.getVersion() );
          }
 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
-index fb074fb..9583d05 100644
+index fb074fb..bf2e703 100644
 --- 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
-@@ -75,6 +75,13 @@ public class DefaultPluginVersionResolver
+@@ -75,6 +75,15 @@ public class DefaultPluginVersionResolver
          throws PluginVersionResolutionException
      {
          logger.debug( "Resolving plugin version for " + request.getGroupId() + ":" + request.getArtifactId() );
 +        if (System.getProperty("maven.jpp.mode") != null) {
++            // in jpp mode we always use "latest" as a resolved version
++            // (we ignore it anyway)
 +            DefaultPluginVersionResult result = new DefaultPluginVersionResult("latest");
 +            result.setRepository(request.getRepositorySession().getWorkspaceReader().getRepository());
 +            logger.debug( "Resolved plugin version for " + request.getGroupId() + ":" + request.getArtifactId()
@@ -90,15 +130,43 @@ index fb074fb..9583d05 100644
  
          PluginVersionResult result = resolveFromProject( request );
  
+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
+index 403351a..2351620 100644
+--- a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
++++ b/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
+@@ -41,6 +41,7 @@ import org.sonatype.aether.repository.RepositoryPolicy;
+ import org.sonatype.aether.resolution.ArtifactRequest;
+ import org.sonatype.aether.resolution.ArtifactResolutionException;
+ import org.sonatype.aether.util.artifact.DefaultArtifact;
++import org.apache.maven.artifact.resolver.JavadirWorkspaceReader;
+ 
+ /**
+  * A model resolver to assist building of projects. This resolver gives priority to those repositories that have been
+@@ -172,6 +173,14 @@ class ProjectModelResolver
+         if ( pomFile == null )
+         {
+             Artifact pomArtifact = new DefaultArtifact( groupId, artifactId, "", "pom", version );
++            if ( System.getProperty("maven.jpp.mode") != null) {
++                JavadirWorkspaceReader wReader = new JavadirWorkspaceReader();
++                pomFile = wReader.findArtifact(pomArtifact);
++                // if pom file does not exist continue resolving using different resolvers
++                // (maybe they will have more luck)
++                if ( pomFile != null)
++                    return new FileModelSource( pomFile );
++            }
+ 
+             try
+             {
 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
-index 033211a..1c09272 100644
+index 033211a..eec6caf 100644
 --- 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
-@@ -405,7 +405,10 @@ public class DefaultModelValidator
+@@ -405,7 +405,11 @@ public class DefaultModelValidator
  
                  if ( !management )
                  {
 -                    validateVersion( prefix + "version", problems, errOn30, d.getVersion(), d.getManagementKey(), d );
++                    // in jpp mode set version to "latest" and validate 
 +                    if(System.getProperty("maven.jpp.mode") != null && d.getVersion() == null)
 +                        d.setVersion("latest");
 +                    else
@@ -106,11 +174,12 @@ index 033211a..1c09272 100644
  
                      /*
                       * TODO: Extensions like Flex Mojos use custom scopes like "merged", "internal", "external", etc.
-@@ -433,7 +436,10 @@ public class DefaultModelValidator
+@@ -433,7 +437,11 @@ public class DefaultModelValidator
              {
                  validateEffectiveDependency( problems, d, false, prefix, request );
  
 -                validateVersion( prefix + "version", problems, errOn30, d.getVersion(), d.getManagementKey(), d );
++                // in jpp mode set version to "latest" and validate 
 +                if(System.getProperty("maven.jpp.mode") != null && d.getVersion() == null)
 +                    d.setVersion("latest");
 +                else
@@ -118,16 +187,17 @@ index 033211a..1c09272 100644
  
                  validateEnum( prefix + "scope", problems, errOn30, d.getScope(), d.getManagementKey(), d, "compile",
                                "runtime", "system" );
-@@ -452,7 +458,8 @@ public class DefaultModelValidator
+@@ -452,7 +460,9 @@ public class DefaultModelValidator
          {
              validateStringNotEmpty( prefix + "type", problems, Severity.ERROR, d.getType(), d.getManagementKey(), d );
  
 -            validateStringNotEmpty( prefix + "version", problems, Severity.ERROR, d.getVersion(), d.getManagementKey(),
++            // in jpp mode ignore missing version completely
 +            if(System.getProperty("maven.jpp.mode") == null)
 +                validateStringNotEmpty( prefix + "version", problems, Severity.ERROR, d.getVersion(), d.getManagementKey(),
                                      d );
          }
  
 -- 
-1.7.3.2
+1.7.3.4
 
diff --git a/JavadirWorkspaceReader.java b/JavadirWorkspaceReader.java
index ba1c20b..81dc6b1 100644
--- a/JavadirWorkspaceReader.java
+++ b/JavadirWorkspaceReader.java
@@ -63,7 +63,16 @@ public class JavadirWorkspaceReader
         }
 
         MavenJPackageDepmap.debug("Returning " + path.toString());
-        return new File(path.toString());
+        File ret = new File(path.toString());
+        // if file doesn't exist return null to delegate to other
+        // resolvers (reactor/local repo)
+        if ( ret.isFile() ) {
+            MavenJPackageDepmap.debug("Returning " + path.toString());
+            return ret;
+        } else {
+            MavenJPackageDepmap.debug("Returning null for gid:aid" + groupId + ":" + artifactId);
+            return null;
+        }
     }
 
     public List<String> findVersions( Artifact artifact ) {
diff --git a/maven-script-local b/maven-script-local
index cb30777..7763429 100644
--- a/maven-script-local
+++ b/maven-script-local
@@ -5,6 +5,39 @@ if [ -f /usr/share/java-utils/java-functions ] ; then
   set_javacmd
 fi
 
+function install_metadata()
+{
+    mkdir -p "$1"
+    tar xf /usr/share/maven/repo-metadata.tar.xz -C "$1"
+}
+
+
+# add maven.repo.local if it's not defined already
+local_add="-Dmaven.repo.local=$(pwd)/.m2/"
+
+function process_args()
+{
+while [ $# != 0 ]; do
+        flag="$1"
+        case "$flag" in
+             *) ind=`expr match "$flag" -Dmaven.repo.local=`
+                if [[ $ind != 0 ]];then
+                    install_metadata "${flag/-Dmaven.repo.local=/}/"
+                    local_add=""
+                fi
+                ;;
+        esac
+        shift
+done
+}
+
+process_args "$@"
+
+if [ -n "$local_add" ];then
+    install_metadata "${local_add/-Dmaven.repo.local=/}/"
+fi
+
 export M2_HOME=/usr/share/maven
 echo $JAVA_HOME
-export JAVA_HOME; $M2_HOME/bin/mvn -Dmaven.jpp.mode "$@"
+export JAVA_HOME
+$M2_HOME/bin/mvn -o -Dmaven.jpp.mode ${local_add} "$@"
diff --git a/maven.spec b/maven.spec
index 90441e2..ece63bb 100644
--- a/maven.spec
+++ b/maven.spec
@@ -18,6 +18,9 @@ Source101:      MavenJPackageDepmap.java
 Source200:    %{name}-script
 Source201:    %{name}-script-local
 
+# Other included files
+Source250:    repo-metadata.tar.xz
+
 # Patch1XX could be upstreamed probably
 # Patch15X are already upstream
 Patch150:         0001-Add-plexus-default-container-dep.patch
@@ -97,8 +100,14 @@ Requires:       jpackage-utils
 %patch200 -p1
 
 # get custom resolver in place
-cp %{SOURCE100} maven-core/src/main/java/org/apache/maven/artifact/resolver
-cp %{SOURCE101} maven-core/src/main/java/org/apache/maven/artifact/repository
+mkdir -p maven-aether-provider/src/main/java/org/apache/maven/artifact/resolver \
+         maven-aether-provider/src/main/java/org/apache/maven/artifact/repository
+
+cp %{SOURCE100} maven-aether-provider/src/main/java/org/apache/maven/artifact/resolver
+cp %{SOURCE101} maven-aether-provider/src/main/java/org/apache/maven/artifact/repository
+
+# by adding our things this has become compile dep
+sed -i 's:<scope>runtime</scope>::' maven-core/pom.xml
 
 # not really used during build, but a precaution
 rm maven-ant-tasks-*.jar
@@ -153,6 +162,12 @@ mv $M2_HOME/bin/m2.conf $RPM_BUILD_ROOT%{_sysconfdir}/
 ###########
 install -dm 755 $RPM_BUILD_ROOT%{_datadir}/%{name}
 
+#################
+# Repo metadata #
+#################
+install -m 755 %{SOURCE250} $RPM_BUILD_ROOT%{_datadir}/%{name}/
+
+
 ###############
 # M2_HOME/bin #
 ###############
@@ -284,6 +299,7 @@ cp -pr target/site/apidocs/* $RPM_BUILD_ROOT%{_javadocdir}/%{name}
 %{_datadir}/%{name}/repository
 %config %{_mavendepmapfragdir}/%{name}
 %{_javadir}/%{name}
+%{_datadir}/%{name}/repo-metadata.tar.xz
 
 %files javadoc
 %defattr(-,root,root,-)
@@ -292,6 +308,12 @@ cp -pr target/site/apidocs/* $RPM_BUILD_ROOT%{_javadocdir}/%{name}
 
 
 %changelog
+* Tue Jan 11 2011 Stanislav Ochotnicky <sochotnicky at redhat.com> - 3.0-5
+- Fix bugs #667625 #667614 and #667636
+- Install maven metadata so they are not downloaded when mvn is run
+- Rename mvn3-local to mvn-local
+- Add more comments to resolver patch
+
 * Tue Dec 21 2010 Stanislav Ochotnicky <sochotnicky at redhat.com> - 3.0-4
 - Add fedora local resolver
 - Fix quoting of arguments to mvn scripts
diff --git a/repo-metadata.tar.xz b/repo-metadata.tar.xz
new file mode 100644
index 0000000..4c05023
Binary files /dev/null and b/repo-metadata.tar.xz differ


More information about the scm-commits mailing list