You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by br...@apache.org on 2005/09/08 10:28:21 UTC
svn commit: r279535 - in /maven/components/trunk:
maven-artifact/src/main/java/org/apache/maven/artifact/metadata/
maven-mboot2/src/main/java/ maven-mboot2/src/main/java/download/
Author: brett
Date: Thu Sep 8 01:28:06 2005
New Revision: 279535
URL: http://svn.apache.org/viewcvs?rev=279535&view=rev
Log:
PR: MNG-613
use new metadata in bootstrap
Added:
maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java (with props)
Modified:
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java
maven/components/trunk/maven-mboot2/src/main/java/MBoot.java
maven/components/trunk/maven-mboot2/src/main/java/download/ArtifactDownloader.java
Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java?rev=279535&r1=279534&r2=279535&view=diff
==============================================================================
--- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java (original)
+++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java Thu Sep 8 01:28:06 2005
@@ -26,7 +26,6 @@
* @todo merge with artifactmetadatasource
* @todo retrieval exception not appropriate for store
* @todo not happy about the store/retrieve methods - they use "this"
- * @todo separate specific interfaces
*/
public interface ArtifactMetadata
{
Modified: maven/components/trunk/maven-mboot2/src/main/java/MBoot.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-mboot2/src/main/java/MBoot.java?rev=279535&r1=279534&r2=279535&view=diff
==============================================================================
--- maven/components/trunk/maven-mboot2/src/main/java/MBoot.java (original)
+++ maven/components/trunk/maven-mboot2/src/main/java/MBoot.java Thu Sep 8 01:28:06 2005
@@ -1,6 +1,7 @@
import compile.CompilerConfiguration;
import compile.JavacCompiler;
import download.ArtifactDownloader;
+import download.RepositoryMetadata;
import jar.JarMojo;
import model.Dependency;
import model.ModelReader;
@@ -11,17 +12,14 @@
import util.AbstractReader;
import util.Commandline;
import util.FileUtils;
-import util.IOUtil;
import util.IsolatedClassLoader;
import util.Os;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
-import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
-import java.io.StringReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -815,22 +813,12 @@
System.out.println( "Installing: " + file );
- if ( version.indexOf( "SNAPSHOT" ) >= 0 )
- {
- // TODO: replace
- File metadata = localRepository.getMetadataFile( groupId, artifactId, version, type,
- finalName + ".version.txt" );
-
- metadata.getParentFile().mkdirs();
-
- IOUtil.copy( new StringReader( version ), new FileWriter( metadata ) );
- }
-
FileUtils.copyFile( new File( basedir, BUILD_DIR + "/" + finalName + ".jar" ), file );
- // TODO: replace
+ RepositoryMetadata metadata = new RepositoryMetadata();
+ metadata.setReleaseVersion( version );
file = localRepository.getMetadataFile( groupId, artifactId, null, type, artifactId + "-RELEASE.version.txt" );
- IOUtil.copy( new StringReader( version ), new FileWriter( file ) );
+ metadata.write( file );
}
private void runTests( String basedir, String classes, String testClasses, ModelReader reader,
Modified: maven/components/trunk/maven-mboot2/src/main/java/download/ArtifactDownloader.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-mboot2/src/main/java/download/ArtifactDownloader.java?rev=279535&r1=279534&r2=279535&view=diff
==============================================================================
--- maven/components/trunk/maven-mboot2/src/main/java/download/ArtifactDownloader.java (original)
+++ maven/components/trunk/maven-mboot2/src/main/java/download/ArtifactDownloader.java Thu Sep 8 01:28:06 2005
@@ -136,48 +136,114 @@
String version = dep.getVersion();
if ( snapshot )
{
- // TODO: augment with maven-metadata
- String filename = getSnapshotMetadataFile( destinationFile.getName(), "SNAPSHOT.version.txt" );
- File file = localRepository.getMetadataFile( dep.getGroupId(), dep.getArtifactId(),
- dep.getVersion(), dep.getType(), filename );
+ String filename = "maven-metadata-" + remoteRepo.getId() + ".xml";
+ File localFile = localRepository.getMetadataFile( dep.getGroupId(), dep.getArtifactId(),
+ dep.getVersion(), dep.getType(),
+ "maven-metadata-local.xml" );
+ File remoteFile = localRepository.getMetadataFile( dep.getGroupId(), dep.getArtifactId(),
+ dep.getVersion(), dep.getType(), filename );
String metadataPath = remoteRepo.getMetadataPath( dep.getGroupId(), dep.getArtifactId(),
dep.getVersion(), dep.getType(), filename );
String metaUrl = remoteRepo.getBasedir() + "/" + metadataPath;
log( "Downloading " + metaUrl );
try
{
- HttpUtils.getFile( metaUrl, file, ignoreErrors, true, proxyHost, proxyPort, proxyUserName,
+ HttpUtils.getFile( metaUrl, remoteFile, ignoreErrors, true, proxyHost, proxyPort, proxyUserName,
proxyPassword, false );
}
catch ( IOException e )
{
- log( "WARNING: remote SNAPSHOT version not found, using local: " + e.getMessage() );
+ log( "WARNING: remote metadata version not found, using local: " + e.getMessage() );
}
+ File file = localFile;
+ if ( remoteFile.exists() )
+ {
+ if ( !localFile.exists() || localFile.lastModified() < remoteFile.lastModified() )
+ {
+ file = remoteFile;
+ }
+ }
+
+ boolean found = false;
if ( file.exists() )
{
- version = FileUtils.fileRead( file );
- log( "Resolved version: " + version );
- dep.setResolvedVersion( version );
- if ( !version.endsWith( "SNAPSHOT" ) )
- {
- String ver = version.substring(
- version.lastIndexOf( "-", version.lastIndexOf( "-" ) - 1 ) + 1 );
- String extension = url.substring( url.length() - 4 );
- url = getSnapshotMetadataFile( url, ver + extension );
+ log( "Using metadata: " + file );
+
+ RepositoryMetadata metadata = RepositoryMetadata.read( file );
+
+ if ( version.equals( metadata.getVersion() ) )
+ {
+ found = true;
+ version = metadata.constructVersion( version );
+ log( "Resolved version: " + version );
+ dep.setResolvedVersion( version );
+ if ( !version.endsWith( "SNAPSHOT" ) )
+ {
+ String ver = version.substring(
+ version.lastIndexOf( "-", version.lastIndexOf( "-" ) - 1 ) + 1 );
+ String extension = url.substring( url.length() - 4 );
+ url = getSnapshotMetadataFile( url, ver + extension );
+ }
+ else if ( destinationFile.exists() )
+ {
+ // It's already there
+ return true;
+ }
}
- else if ( destinationFile.exists() )
+ else
{
- // It's already there
- return true;
+ log( "WARNING: versions did not match, not using metadata (" + version + " vs " +
+ metadata.getVersion() + ")" );
}
}
- else
+
+ if ( !found )
{
- log( "WARNING: local SNAPSHOT version not found, using default" );
+ log( "WARNING: attempting to use legacy metadata" );
+
+ filename = getSnapshotMetadataFile( destinationFile.getName(), "SNAPSHOT.version.txt" );
+ file = localRepository.getMetadataFile( dep.getGroupId(), dep.getArtifactId(), dep.getVersion(),
+ dep.getType(), filename );
+ metadataPath = remoteRepo.getMetadataPath( dep.getGroupId(), dep.getArtifactId(),
+ dep.getVersion(), dep.getType(), filename );
+ metaUrl = remoteRepo.getBasedir() + "/" + metadataPath;
+ log( "Downloading " + metaUrl );
+ try
+ {
+ HttpUtils.getFile( metaUrl, file, ignoreErrors, true, proxyHost, proxyPort, proxyUserName,
+ proxyPassword, false );
+ }
+ catch ( IOException e )
+ {
+ log( "WARNING: remote SNAPSHOT version not found, using local: " + e.getMessage() );
+ }
+
+ if ( file.exists() )
+ {
+ version = FileUtils.fileRead( file );
+ log( "Resolved version: " + version );
+ dep.setResolvedVersion( version );
+ if ( !version.endsWith( "SNAPSHOT" ) )
+ {
+ String ver = version.substring(
+ version.lastIndexOf( "-", version.lastIndexOf( "-" ) - 1 ) + 1 );
+ String extension = url.substring( url.length() - 4 );
+ url = getSnapshotMetadataFile( url, ver + extension );
+ }
+ else if ( destinationFile.exists() )
+ {
+ // It's already there
+ return true;
+ }
+ }
+ else
+ {
+ log( "WARNING: local SNAPSHOT version not found, using default" );
+ }
}
}
- if ( !dep.getType().equals( "pom" ) )
+ if ( !"pom".equals( dep.getType() ) )
{
String name = dep.getArtifactId() + "-" + dep.getResolvedVersion() + ".pom";
File file = localRepository.getMetadataFile( dep.getGroupId(), dep.getArtifactId(),
Added: maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java?rev=279535&view=auto
==============================================================================
--- maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java (added)
+++ maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java Thu Sep 8 01:28:06 2005
@@ -0,0 +1,331 @@
+package download;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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 org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import util.AbstractReader;
+import util.StringUtils;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * TODO: describe
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public class RepositoryMetadata
+{
+ private String snapshotTimestamp;
+
+ private int snapshotBuildNumber;
+
+ private String releaseVersion;
+
+ private String groupId;
+
+ private String artifactId;
+
+ private String version;
+
+ private List versions = new ArrayList();
+
+ private String latestVersion;
+
+ public String getSnapshotTimestamp()
+ {
+ return snapshotTimestamp;
+ }
+
+ public void setSnapshotTimestamp( String snapshotTimestamp )
+ {
+ this.snapshotTimestamp = snapshotTimestamp;
+ }
+
+ public int getSnapshotBuildNumber()
+ {
+ return snapshotBuildNumber;
+ }
+
+ public void setSnapshotBuildNumber( int snapshotBuildNumber )
+ {
+ this.snapshotBuildNumber = snapshotBuildNumber;
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ public List getVersions()
+ {
+ return versions;
+ }
+
+ public void setVersions( List versions )
+ {
+ this.versions = versions;
+ }
+
+ public String getReleaseVersion()
+ {
+ return releaseVersion;
+ }
+
+ public void setReleaseVersion( String releaseVersion )
+ {
+ this.releaseVersion = releaseVersion;
+ }
+
+ public String getLatestVersion()
+ {
+ return latestVersion;
+ }
+
+ public void setLatestVersion( String latestVersion )
+ {
+ this.latestVersion = latestVersion;
+ }
+
+ public void addVersion( String version )
+ {
+ versions.add( version );
+ }
+
+ public static RepositoryMetadata read( File file )
+ throws IOException, ParserConfigurationException, SAXException
+ {
+ RepositoryMetadata metadata = new RepositoryMetadata();
+ new Reader( metadata ).parse( file );
+ return metadata;
+ }
+
+ public void write( File file )
+ throws IOException
+ {
+ new Writer( this ).write( file );
+ }
+
+ public String constructVersion( String baseVersion )
+ {
+ if ( snapshotTimestamp != null )
+ {
+ baseVersion = StringUtils.replace( baseVersion, "SNAPSHOT", snapshotTimestamp + "-" + snapshotBuildNumber );
+ }
+ return baseVersion;
+ }
+
+ static class Reader
+ extends AbstractReader
+ {
+ private boolean insideVersioning;
+
+ private StringBuffer bodyText = new StringBuffer();
+
+ private boolean insideSnapshot;
+
+ private final RepositoryMetadata metadata;
+
+ private boolean insideVersions;
+
+ public Reader( RepositoryMetadata metadata )
+ {
+ this.metadata = metadata;
+ }
+
+ public void startElement( String uri, String localName, String rawName, Attributes attributes )
+ {
+ if ( insideVersioning )
+ {
+ if ( insideSnapshot )
+ {
+ if ( "buildNumber".equals( rawName ) )
+ {
+ metadata.setSnapshotBuildNumber( Integer.valueOf( getBodyText() ).intValue() );
+ }
+ else if ( "timestamp".equals( rawName ) )
+ {
+ metadata.setSnapshotTimestamp( getBodyText() );
+ }
+ }
+ else if ( insideVersions )
+ {
+ if ( "version".equals( rawName ) )
+ {
+ metadata.addVersion( getBodyText() );
+ }
+ }
+ else
+ {
+ if ( "snapshot".equals( rawName ) )
+ {
+ insideSnapshot = true;
+ }
+ else if ( "versions".equals( rawName ) )
+ {
+ insideVersions = true;
+ }
+ else if ( "latest".equals( rawName ) )
+ {
+ metadata.setLatestVersion( getBodyText() );
+ }
+ else if ( "release".equals( rawName ) )
+ {
+ metadata.setReleaseVersion( getBodyText() );
+ }
+ }
+ }
+ else
+ {
+ // root element
+ if ( "versioning".equals( rawName ) )
+ {
+ insideVersioning = true;
+ }
+ else if ( "groupId".equals( rawName ) )
+ {
+ metadata.setGroupId( getBodyText() );
+ }
+ else if ( "artifactId".equals( rawName ) )
+ {
+ metadata.setArtifactId( getBodyText() );
+ }
+ else if ( "version".equals( rawName ) )
+ {
+ metadata.setVersion( getBodyText() );
+ }
+ }
+ }
+
+ public void characters( char buffer[], int start, int length )
+ {
+ bodyText.append( buffer, start, length );
+ }
+
+ private String getBodyText()
+ {
+ return bodyText.toString().trim();
+ }
+
+ public void endElement( String uri, String localName, String rawName )
+ throws SAXException
+ {
+ if ( insideVersioning )
+ {
+ if ( "versioning".equals( rawName ) )
+ {
+ insideVersioning = false;
+ }
+ if ( "snapshot".equals( rawName ) )
+ {
+ insideSnapshot = false;
+ }
+ if ( "versions".equals( rawName ) )
+ {
+ insideVersions = false;
+ }
+ }
+ bodyText = new StringBuffer();
+ }
+
+ }
+
+ static class Writer
+ {
+ private final RepositoryMetadata metadata;
+
+ public Writer( RepositoryMetadata metadata )
+ {
+ this.metadata = metadata;
+ }
+
+ public void write( File file )
+ throws IOException
+ {
+ PrintWriter w = new PrintWriter( new FileWriter( file ) );
+
+ try
+ {
+ w.println( "<metadata>" );
+ writeLine( w, " ", "groupId", metadata.getGroupId() );
+ writeLine( w, " ", "artifactId", metadata.getArtifactId() );
+ writeLine( w, " ", "version", metadata.getVersion() );
+ w.println( " <versioning>" );
+ writeLine( w, " ", "latest", metadata.getLatestVersion() );
+ writeLine( w, " ", "release", metadata.getReleaseVersion() );
+ w.println( " <snapshot>" );
+ writeLine( w, " ", "buildNumber", String.valueOf( metadata.getSnapshotBuildNumber() ) );
+ writeLine( w, " ", "timestamp", metadata.getSnapshotTimestamp() );
+ w.println( " </snapshot>" );
+ w.println( " <versions>" );
+ for ( Iterator i = metadata.getVersions().iterator(); i.hasNext(); )
+ {
+ writeLine( w, " ", "version", (String) i.next() );
+ }
+ w.println( " </versions>" );
+ w.println( " </versioning>" );
+ w.println( "</metadata>" );
+ }
+ finally
+ {
+ w.close();
+ }
+ }
+
+ private void writeLine( PrintWriter w, String indent, String tag, String content )
+ {
+ if ( content != null )
+ {
+ w.println( indent + ( "<" + tag + ">" + content + "</" + tag + ">" ) );
+ }
+ }
+
+ }
+}
Propchange: maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-mboot2/src/main/java/download/RepositoryMetadata.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org