[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