Author: bentmann
Date: Sat Sep 12 20:01:59 2009
New Revision: 814226
URL: http://svn.apache.org/viewvc?rev=814226&view=rev
Log:
o Fixed handling of metadata for dependencies outside of reactor
Added:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0-tests.jar
(with props)
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.jar
(with props)
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
(with props)
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
(with props)
Modified:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/pom.xml
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/verify.bsh
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java
Modified:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/pom.xml
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/pom.xml?rev=814226&r1=814225&r2=814226&view=diff
==============================================================================
---
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/pom.xml
(original)
+++
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/pom.xml
Sat Sep 12 20:01:59 2009
@@ -50,6 +50,18 @@
<version>0.3-SNAPSHOT</version>
<type>pom</type>
</dependency>
+ <!-- two dependencies from the same g:a but with different versions -->
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>dep</artifactId>
+ <version>1.0</version>
+ <classifier>tests</classifier>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>dep</artifactId>
+ <version>2.0</version>
+ </dependency>
</dependencies>
<repositories>
Added:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0-tests.jar
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0-tests.jar?rev=814226&view=auto
==============================================================================
Binary file - no diff available.
Propchange:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0-tests.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom?rev=814226&view=auto
==============================================================================
---
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom
(added)
+++
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom
Sat Sep 12 20:01:59 2009
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>dep</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0</version>
+</project>
Added:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.jar
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.jar?rev=814226&view=auto
==============================================================================
Binary file - no diff available.
Propchange:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom?rev=814226&view=auto
==============================================================================
---
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom
(added)
+++
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom
Sat Sep 12 20:01:59 2009
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>dep</artifactId>
+ <packaging>jar</packaging>
+ <version>2.0</version>
+</project>
Added:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml?rev=814226&view=auto
==============================================================================
---
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
(added)
+++
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
Sat Sep 12 20:01:59 2009
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+ <groupId>org.apache.maven.its</groupId>
+ <artifactId>dep</artifactId>
+ <versioning>
+ <latest>2.0</latest>
+ <release>2.0</release>
+ <versions>
+ <version>1.0</version>
+ <version>2.0</version>
+ </versions>
+ <lastUpdated>20081020164906</lastUpdated>
+ </versioning>
+</metadata>
Propchange:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/repo/org/apache/maven/its/dep/maven-metadata.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified:
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/verify.bsh
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/verify.bsh?rev=814226&r1=814225&r2=814226&view=diff
==============================================================================
---
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/verify.bsh
(original)
+++
maven/plugins/trunk/maven-invoker-plugin/src/it/staging-dependencies/verify.bsh
Sat Sep 12 20:01:59 2009
@@ -2,6 +2,9 @@
import java.util.*;
import java.util.regex.*;
+import org.codehaus.plexus.util.*;
+import org.codehaus.plexus.util.xml.*;
+
try
{
File itRepoDir = new File( basedir, "target/it-repo" );
@@ -15,11 +18,25 @@
String[] files = {
"junit/junit/3.8.2/junit-3.8.2.pom",
"junit/junit/3.8.2/junit-3.8.2.jar",
+ "junit/junit/maven-metadata-local.xml",
"org/apache/maven/its/minvoker-70/1.0-SNAPSHOT/minvoker-70-1.0-SNAPSHOT.pom",
"org/apache/maven/its/minvoker-70/1.0-SNAPSHOT/minvoker-70-1.0-SNAPSHOT.jar",
+
"org/apache/maven/its/minvoker-70/1.0-SNAPSHOT/maven-metadata-local.xml",
+ "org/apache/maven/its/minvoker-70/maven-metadata-local.xml",
"org/apache/maven/its/parent-b/0.1-SNAPSHOT/parent-b-0.1-SNAPSHOT.pom",
+
"org/apache/maven/its/parent-b/0.1-SNAPSHOT/maven-metadata-local.xml",
+ "org/apache/maven/its/parent-b/maven-metadata-local.xml",
"org/apache/maven/its/parent-a/0.1-SNAPSHOT/parent-a-0.1-SNAPSHOT.pom",
+
"org/apache/maven/its/parent-a/0.1-SNAPSHOT/maven-metadata-local.xml",
+ "org/apache/maven/its/parent-a/maven-metadata-local.xml",
"org/apache/maven/its/pom/0.3-SNAPSHOT/pom-0.3-SNAPSHOT.pom",
+ "org/apache/maven/its/pom/0.3-SNAPSHOT/maven-metadata-local.xml",
+ "org/apache/maven/its/pom/maven-metadata-local.xml",
+ "org/apache/maven/its/dep/1.0/dep-1.0.pom",
+ "org/apache/maven/its/dep/1.0/dep-1.0-tests.jar",
+ "org/apache/maven/its/dep/2.0/dep-2.0.pom",
+ "org/apache/maven/its/dep/2.0/dep-2.0.jar",
+ "org/apache/maven/its/dep/maven-metadata-local.xml",
};
for ( String file : files )
{
@@ -30,6 +47,24 @@
throw new IllegalStateException( "Missing: " + stagedFile );
}
}
+
+ Reader reader = ReaderFactory.newXmlReader( new File( itRepoDir,
"org/apache/maven/its/dep/maven-metadata-local.xml" ) );
+ Xpp3Dom dom = Xpp3DomBuilder.build( reader );
+ IOUtil.close( reader );
+
+ if ( dom.getChild( "versioning" ).getChild( "versions" ).getChildCount()
!= 2 )
+ {
+ throw new IllegalStateException( "Invalid version number count in
metadata" );
+ }
+
+ List versions = new ArrayList();
+ versions.add( dom.getChild( "versioning" ).getChild( "versions"
).getChild( 0 ).getValue() );
+ versions.add( dom.getChild( "versioning" ).getChild( "versions"
).getChild( 1 ).getValue() );
+ Collections.sort( versions );
+ if ( !versions.equals( Arrays.asList( new String[] { "1.0", "2.0" } ) ) )
+ {
+ throw new IllegalStateException( "Invalid version numbers in metadata:
" + versions );
+ }
}
catch( Throwable t )
{
Modified:
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java?rev=814226&r1=814225&r2=814226&view=diff
==============================================================================
---
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java
(original)
+++
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java
Sat Sep 12 20:01:59 2009
@@ -31,7 +31,6 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.installer.ArtifactInstaller;
-import org.apache.maven.artifact.metadata.ArtifactMetadata;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
import org.apache.maven.model.Model;
@@ -271,11 +270,7 @@
copyFileIfDifferent( file, destination );
- for ( Iterator it = artifact.getMetadataList().iterator();
it.hasNext(); )
- {
- ArtifactMetadata metadata = (ArtifactMetadata) it.next();
- metadata.storeInLocalRepository( testRepository,
testRepository );
- }
+ MetadataUtils.createMetadata( destination, artifact );
}
else
{
@@ -467,7 +462,7 @@
if ( pomFile.isFile() )
{
- if ( !pomFile.equals( artifactFile ) )
+ if ( !pomArtifact.getId().equals( depArtifact.getId() ) )
{
copyArtifact( pomFile, pomArtifact, testRepository );
}
@@ -526,7 +521,7 @@
{
Artifact pomArtifact = artifactFactory.createProjectArtifact( groupId,
artifactId, version );
- if ( installedArtifacts.contains( pomArtifact.getId() ) )
+ if ( installedArtifacts.contains( pomArtifact.getId() ) ||
copiedArtifacts.contains( pomArtifact.getId() ) )
{
getLog().debug( "Not re-installing " + pomArtifact );
return;
Added:
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java?rev=814226&view=auto
==============================================================================
---
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
(added)
+++
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
Sat Sep 12 20:01:59 2009
@@ -0,0 +1,186 @@
+package org.apache.maven.plugin.invoker;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+import java.text.SimpleDateFormat;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.TimeZone;
+
+import org.apache.maven.artifact.Artifact;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.Xpp3DomUtils;
+import org.codehaus.plexus.util.xml.Xpp3DomWriter;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Provides utility methods for artifact metadata processing.
+ *
+ * @author Benjamin Bentmann
+ */
+class MetadataUtils
+{
+
+ /**
+ * Creates local metadata files for the specified artifact. The goal is to
simulate the installation of the artifact
+ * by a local build, thereby decoupling the forked builds from the
inderministic collection of remote repositories
+ * that are available to the main build and from which the artifact was
originally resolved.
+ *
+ * @param file The artifact's file in the local test repository, must not
be <code>null</code>.
+ * @param artifact The artifact to create metadata for, must not be
<code>null</code>.
+ * @throws IOException If the metadata could not be created.
+ */
+ public static void createMetadata( File file, Artifact artifact )
+ throws IOException
+ {
+ TimeZone tz = java.util.TimeZone.getTimeZone( "UTC" );
+ SimpleDateFormat fmt = new SimpleDateFormat( "yyyyMMddHHmmss" );
+ fmt.setTimeZone( tz );
+ String timestamp = fmt.format( new Date() );
+
+ if ( artifact.isSnapshot() )
+ {
+ File metadataFile = new File( file.getParentFile(),
"maven-metadata-local.xml" );
+
+ Xpp3Dom metadata = new Xpp3Dom( "metadata" );
+ addChild( metadata, "groupId", artifact.getGroupId() );
+ addChild( metadata, "artifactId", artifact.getArtifactId() );
+ addChild( metadata, "version", artifact.getBaseVersion() );
+ Xpp3Dom versioning = new Xpp3Dom( "versioning" );
+ versioning.addChild( addChild( new Xpp3Dom( "snapshot" ),
"localCopy", "true" ) );
+ addChild( versioning, "lastUpdated", timestamp );
+ metadata.addChild( versioning );
+
+ writeMetadata( metadataFile, metadata );
+ }
+
+ {
+ File metadataFile = new File(
file.getParentFile().getParentFile(), "maven-metadata-local.xml" );
+
+ Set allVersions = new LinkedHashSet();
+
+ Xpp3Dom metadata = readMetadata( metadataFile );
+
+ if ( metadata != null )
+ {
+ Xpp3Dom versioning = metadata.getChild( "versioning" );
+ if ( versioning != null )
+ {
+ Xpp3Dom versions = versioning.getChild( "versions" );
+ if ( versions != null )
+ {
+
+ Xpp3Dom[] children = versions.getChildren( "version" );
+ for ( int i = 0; i < children.length; i++ )
+ {
+ allVersions.add( children[i].getValue() );
+ }
+ }
+ }
+ }
+
+ allVersions.add( artifact.getBaseVersion() );
+
+ metadata = new Xpp3Dom( "metadata" );
+ addChild( metadata, "groupId", artifact.getGroupId() );
+ addChild( metadata, "artifactId", artifact.getArtifactId() );
+ Xpp3Dom versioning = new Xpp3Dom( "versioning" );
+ versioning.addChild( addChildren( new Xpp3Dom( "versions" ),
"version", allVersions ) );
+ addChild( versioning, "lastUpdated", timestamp );
+ metadata.addChild( versioning );
+
+ metadata = Xpp3DomUtils.mergeXpp3Dom( metadata, readMetadata(
metadataFile ) );
+
+ writeMetadata( metadataFile, metadata );
+ }
+ }
+
+ private static Xpp3Dom addChild( Xpp3Dom parent, String childName, String
childValue )
+ {
+ Xpp3Dom child = new Xpp3Dom( childName );
+ child.setValue( childValue );
+ parent.addChild( child );
+ return parent;
+ }
+
+ private static Xpp3Dom addChildren( Xpp3Dom parent, String childName,
Collection childValues )
+ {
+ for ( Iterator it = childValues.iterator(); it.hasNext(); )
+ {
+ String childValue = (String) it.next();
+ addChild( parent, childName, childValue );
+ }
+ return parent;
+ }
+
+ private static Xpp3Dom readMetadata( File metadataFile )
+ throws IOException
+ {
+ if ( !metadataFile.isFile() )
+ {
+ return null;
+ }
+
+ Reader reader = ReaderFactory.newXmlReader( metadataFile );
+ try
+ {
+ try
+ {
+ return Xpp3DomBuilder.build( reader );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw (IOException) new IOException( e.getMessage()
).initCause( e );
+ }
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ }
+ }
+
+ private static void writeMetadata( File metadataFile, Xpp3Dom metadata )
+ throws IOException
+ {
+ metadataFile.getParentFile().mkdirs();
+
+ Writer writer = WriterFactory.newXmlWriter( metadataFile );
+ try
+ {
+ Xpp3DomWriter.write( writer, metadata );
+ }
+ finally
+ {
+ IOUtil.close( writer );
+ }
+ }
+
+}
Propchange:
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/MetadataUtils.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision