You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by mi...@apache.org on 2004/05/16 17:58:10 UTC
cvs commit: maven-components/maven-project/src/main/java/org/apache/maven/artifact/downloader DefaultArtifactDownloader.java ArtifactDownloader.java
michal 2004/05/16 08:58:10
Modified: maven-project/src/main/resources/META-INF/plexus
components.xml
maven-project/src/test/java/org/apache/maven/project
AbstractProjectTestCase.java
maven-project/src/main/java/org/apache/maven/artifact/resolver
DefaultArtifactResolver.java
maven-project/src/main/java/org/apache/maven/artifact/snapshot
DefaultSnapshotResolver.java SnapshotResolver.java
SnapshotUtils.java
maven-project/src/test/java/org/apache/maven/artifact/downloader
DefaultArtifactDownloaderTest.java
maven-project/src/main/java/org/apache/maven/artifact/downloader
DefaultArtifactDownloader.java
ArtifactDownloader.java
Added: maven-project/src/test/resources/local-repo/snapshot-test/jars
maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version
maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
maven-snapshot-b-1.0-SNAPSHOT.jar
maven-snapshot-a-1.0-SNAPSHOT.jar
maven-snapshot-e-1.0-SNAPSHOT.jar
maven-project/src/test/resources/remote-repo-1/snapshot-test/jars
maven-snapshot-c-1.0-SNAPSHOT.jar
maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
maven-snapshot-b-1.0-SNAPSHOT.jar
maven-snapshot-c-1.0-SNAPSHOT.jar.snapshot-version
maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
maven-snapshot-a-1.0-SNAPSHOT.jar
maven-project/src/test/java/org/apache/maven/artifact/snapshot
DefaultSnapshotResolverTest.java
maven-project/src/test/resources/local-repo/snapshot-test/poms
maven-test-snapshot-resolving-1.0.pom
Log:
Further improvments in Dependecy Resolving Mechanisms
Revision Changes Path
1.1 maven-components/maven-project/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version
Index: maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version
===================================================================
20040101.101010
1.1 maven-components/maven-project/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
Index: maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
===================================================================
20040101.101010
1.1 maven-components/maven-project/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
Index: maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
===================================================================
20040101.101010
1.1 maven-components/maven-project/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar
Index: maven-snapshot-b-1.0-SNAPSHOT.jar
===================================================================
local
1.1 maven-components/maven-project/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar
Index: maven-snapshot-a-1.0-SNAPSHOT.jar
===================================================================
local
1.1 maven-components/maven-project/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar
Index: maven-snapshot-e-1.0-SNAPSHOT.jar
===================================================================
local
1.1 maven-components/maven-project/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar
Index: maven-snapshot-c-1.0-SNAPSHOT.jar
===================================================================
remote
1.1 maven-components/maven-project/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
Index: maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version
===================================================================
20030101.101010
1.1 maven-components/maven-project/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar
Index: maven-snapshot-b-1.0-SNAPSHOT.jar
===================================================================
local
1.1 maven-components/maven-project/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar.snapshot-version
Index: maven-snapshot-c-1.0-SNAPSHOT.jar.snapshot-version
===================================================================
20040101.101010
1.1 maven-components/maven-project/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
Index: maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version
===================================================================
20050101.101010
1.1 maven-components/maven-project/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar
Index: maven-snapshot-a-1.0-SNAPSHOT.jar
===================================================================
remote
1.11 +13 -1 maven-components/maven-project/src/main/resources/META-INF/plexus/components.xml
Index: components.xml
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/resources/META-INF/plexus/components.xml,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- components.xml 11 May 2004 19:21:10 -0000 1.10
+++ components.xml 16 May 2004 15:58:10 -0000 1.11
@@ -62,6 +62,18 @@
<role>org.apache.maven.project.ModelInheritanceAssembler</role>
<implementation>org.apache.maven.project.DefaultModelInheritanceAssembler</implementation>
</component>
-
+ <component>
+ <role>org.apache.maven.artifact.snapshot.SnapshotResolver</role>
+ <implementation>org.apache.maven.artifact.snapshot.DefaultSnapshotResolver</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.wagon.manager.WagonManager</role>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.artifact.downloader.ArtifactDownloader</role>
+ </requirement>
+ </requirements>
+ </component>
+
</components>
</component-set>
1.5 +66 -1 maven-components/maven-project/src/test/java/org/apache/maven/project/AbstractProjectTestCase.java
Index: AbstractProjectTestCase.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/project/AbstractProjectTestCase.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- AbstractProjectTestCase.java 10 May 2004 19:06:30 -0000 1.4
+++ AbstractProjectTestCase.java 16 May 2004 15:58:10 -0000 1.5
@@ -1,13 +1,16 @@
package org.apache.maven.project;
+import java.io.File;
+
import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
public class AbstractProjectTestCase
extends PlexusTestCase
{
protected MavenProjectBuilder projectBuilder;
- private String localRepository = System.getProperty( "basedir" ) + "/src/test/resources/local-repo";
+ private String localRepository = System.getProperty( "basedir" ) + "/target/test-classes/local-repo";
public AbstractProjectTestCase( String testName )
{
@@ -27,6 +30,68 @@
public String getLocalRepository()
{
return localRepository;
+ }
+
+ public void initLocalRepository()
+ {
+ File tempLocalRepository = new File( basedir, "target/temp-repo-local" );
+
+ // delete
+ try
+ {
+ FileUtils.deleteDirectory( tempLocalRepository );
+ }
+ catch( Exception e)
+ {
+ System.out.println( "Could not delete the remaining from previous tests!! Test will continue anyway ");
+
+ }
+
+ tempLocalRepository.mkdirs();
+
+ System.out.println( "Created temporary local repository: " + tempLocalRepository );
+
+ System.setProperty( "maven.repo.local", tempLocalRepository.getPath() );
+
+
+ }
+
+ /**
+ * @param f
+ * @return
+ */
+ protected MavenProject buildProject( File f )
+ {
+ MavenProject project = null;
+
+ try
+ {
+ project = projectBuilder.build( f );
+ }
+ catch( Exception e)
+ {
+ fail( "Could not build the project which was supposed to be used as provider of artifacts" );
+ }
+
+ assertNotNull( "Project is null", project );
+
+ return project;
+ }
+
+ /**
+ * @param project
+ */
+ protected void initRemoteRepositories( MavenProject project )
+ {
+ File repo_1 = new File( basedir, "target/test-classes/remote-repo-1" );
+
+ File repo_2 = new File( basedir, "target/test-classes/remote-repo-2" );
+
+ project.addRepository( "file://" + repo_1.getPath() );
+
+ project.addRepository( "file://" + repo_2.getPath() );
+
+ assertEquals( 2, project.getRepositories().size() );
}
1.5 +13 -2 maven-components/maven-project/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
Index: DefaultArtifactResolver.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DefaultArtifactResolver.java 11 May 2004 19:21:10 -0000 1.4
+++ DefaultArtifactResolver.java 16 May 2004 15:58:10 -0000 1.5
@@ -3,6 +3,7 @@
import org.apache.maven.artifact.MavenArtifact;
import org.apache.maven.artifact.downloader.ArtifactDownloader;
import org.apache.maven.artifact.factory.MavenArtifactFactory;
+import org.apache.maven.artifact.snapshot.SnapshotResolver;
import org.apache.maven.model.Dependency;
import org.apache.maven.project.MavenProject;
@@ -24,6 +25,11 @@
ArtifactDownloader artifactDownloader;
+ /**
+ * @requirement
+ */
+ SnapshotResolver snapshotResolver;
+
public MavenArtifact getArtifact( Dependency dependency, MavenProject project )
@@ -35,7 +41,12 @@
if ( retValue.isSnapshot() )
{
- // for snapshots artifact we always have to try to check if newer version exists
+ boolean snapshotResolved = snapshotResolver.resolveSnapshotArtifact( retValue, project.getRepositories() );
+
+ if ( !snapshotResolved )
+ {
+ retValue = null;
+ }
}
else if ( !retValue.exists() )
1.2 +147 -27 maven-components/maven-project/src/main/java/org/apache/maven/artifact/snapshot/DefaultSnapshotResolver.java
Index: DefaultSnapshotResolver.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/snapshot/DefaultSnapshotResolver.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultSnapshotResolver.java 11 May 2004 20:13:14 -0000 1.1
+++ DefaultSnapshotResolver.java 16 May 2004 15:58:10 -0000 1.2
@@ -6,6 +6,8 @@
import java.util.List;
import org.apache.maven.artifact.MavenArtifact;
+import org.apache.maven.artifact.downloader.ArtifactDownloader;
+import org.apache.maven.artifact.factory.MavenArtifactFactory;
import org.apache.maven.wagon.Wagon;
import org.apache.maven.wagon.manager.WagonManager;
import org.apache.maven.wagon.repository.Repository;
@@ -19,45 +21,153 @@
{
private WagonManager wagonManager;
-
- public void resolveSnapshotArtifact( MavenArtifact artifact,
- List repositories )
+
+ private ArtifactDownloader artifactDownloader;
+
+ private MavenArtifactFactory artifactFactory;
+
+
+ /**
+ * @todo (michal) I made the assumption (disussed with Jason) that only one
+ * repository should be ever used for deployment of snapshots. It means
+ * that we don't have to search for the latest version of given snapshot artifact
+ * in every visible repository. Simply once we find the snapshot artifact in
+ * the given remote repository we are sure that
+ * we are looking at the only place from where snapshot can be downloaded
+ *
+ */
+ public boolean resolveSnapshotArtifact( MavenArtifact artifact, List repositories )
{
+ boolean retValue = false;
+
Date localVersion = getLocalVersion( artifact );
+
+ System.out.println( "Local version: " + localVersion );
for ( Iterator iter = repositories.iterator(); iter.hasNext(); )
{
+
+
Repository repository = ( Repository ) iter.next();
- // need to think how to handle excepion here and what they actually mean
- //Date remoteVersion = getRemoteVersion( artifact, repository );
+ System.out.println( "Checking in repository: " + repository.getUrl() );
+
+ Wagon wagon = null;
+
+ try
+ {
+ wagon = wagonManager.getWagon( repository.getProtocol() );
+
+ wagon.connect( repository );
+
+ Date remoteVersion = getRemoteVersion( artifact, wagon );
+
+ System.out.println( "Remote version: " + remoteVersion );
+
+ if ( remoteVersion != null )
+ {
+ //if local version is unknown (null) it means that
+ //we don't have this file locally. so we will be happy
+ // to have any snapshot.
+ // we wil download in two cases:
+ // a) we don't have any snapot in local repo
+ // b) we have found newer version in remote repository
+ if ( localVersion == null || localVersion.before( remoteVersion ) )
+ {
+
+ // here we know that we have artifact like foo-1.2-SNAPSHOT.jar
+ // and the remote timestamp is something like 20010304.121212
+ // so we might as well fetch foo-1.2-20010304.121212.jar
+ // but we are just going to fetch foo-1.2-SNAPSHOT.jar.
+ // We can change the strategy which is used here later on
+
+
+ // @todo we will delete old file first.
+ //it is not really a right thing to do. Artifact Dowloader should
+ // fetch to temprary file and replace the old file with the new
+ // one once download was finished
+
+ artifact.getFile().delete();
+
+ artifactDownloader.getRemoteArtifact( artifact , wagon );
+
+ File snapshotVersionFile = artifact.getSnapshotVersionFile();
+
+ String timestamp = SnapshotUtils.getTimestamp( remoteVersion );
+
+ // delete old one
+ if ( snapshotVersionFile.exists() )
+ {
+ snapshotVersionFile.delete();
+ }
+
+ FileUtils.fileWrite( snapshotVersionFile.getPath(), timestamp );
+ }
+ }
+ }
+ catch ( Exception e )
+ {
+ continue;
+ }
+
+ finally
+ {
+ if ( wagon!= null )
+ {
+ try
+ {
+ wagon.disconnect();
+
+ wagonManager.releaseWagon( wagon );
+
+ }
+
+ catch( Exception e)
+ {
+ }
+ }
+
+ }
+
}
+
+ return retValue;
}
- private Date getRemoteVersion( MavenArtifact artifact, Repository repository )
+ private Date getRemoteVersion( MavenArtifact artifact, Wagon wagon )
throws Exception
{
- Date retValue = null;
-
- Wagon wagon = wagonManager.getWagon( repository.getProtocol() );
-
- wagon.connect( repository );
-
- // @todo - here I need to create temp file.
- //I would prefer to have input stream from wagon and do not need to create/
- //delete file and handle all error which may appear.
+
File file = null;
-
- wagon.get( artifact.getSnapshotVersionUrlPath(), file );
-
- String snapshotVersion = FileUtils.fileRead( file );
-
- retValue = SnapshotUtils.parseSnapshotVersion( snapshotVersion );
-
- return retValue;
+
+ Date retValue = null;
+
+ try
+ {
+
+ // @todo - here I need to create temporary file.
+ // I would really prefer to have input stream from wagon and do not need to
+ // create/delete file and handle all error which may appear.
+ file = File.createTempFile( "maven", "tmp" );
+
+ wagon.get( artifact.getSnapshotVersionUrlPath(), file );
+
+ String timestamp = FileUtils.fileRead( file );
+
+ retValue = SnapshotUtils.parseTimestamp( timestamp );
+
+ return retValue;
+ }
+ finally
+ {
+ if ( file != null )
+ {
+ file.delete();
+ }
+ }
}
@@ -74,9 +184,9 @@
if ( file.exists() )
{
- String snapshotVersion = FileUtils.fileRead( file );
+ String timestamp = FileUtils.fileRead( file );
- retValue = SnapshotUtils.parseSnapshotVersion( snapshotVersion );
+ retValue = SnapshotUtils.parseTimestamp( timestamp );
}
@@ -88,13 +198,23 @@
if ( retValue == null )
{
- //try "traditional method"
+ //try "traditional method" used in maven1 for obtaining snapshot version
File file = artifact.getFile();
if ( file.exists() )
{
retValue = new Date( file.lastModified() );
+
+ //@todo we should "normalize" the time.
+
+ /*TimeZone gmtTimeZone = TimeZone.getTimeZone( "GMT" );
+
+ TimeZone userTimeZone = TimeZone.getDefault();
+
+ long diff =
+ */
+
}
}
1.2 +14 -2 maven-components/maven-project/src/main/java/org/apache/maven/artifact/snapshot/SnapshotResolver.java
Index: SnapshotResolver.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/snapshot/SnapshotResolver.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SnapshotResolver.java 11 May 2004 20:13:14 -0000 1.1
+++ SnapshotResolver.java 16 May 2004 15:58:10 -0000 1.2
@@ -13,6 +13,18 @@
String ROLE = SnapshotResolver.class.getName();
- void resolveSnapshotArtifact( MavenArtifact artifact, List repositories );
+ /**
+ * Verifies if in any remote repository there is a newer version of snapshot arifact
+ * and download this verion is case when newer version was found.
+ *
+ * @param artifact Artifact to check
+ *
+ * @param repositories the list of repositories where resolver will be looking
+ * for snapshot artifact
+ *
+ * @return <code>true</code> in snapshot artifact was downloaded from remote repository,
+ * <code>false</code> otherwise
+ */
+ boolean resolveSnapshotArtifact( MavenArtifact artifact, List repositories );
}
1.2 +16 -4 maven-components/maven-project/src/main/java/org/apache/maven/artifact/snapshot/SnapshotUtils.java
Index: SnapshotUtils.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/snapshot/SnapshotUtils.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SnapshotUtils.java 11 May 2004 20:13:14 -0000 1.1
+++ SnapshotUtils.java 16 May 2004 15:58:10 -0000 1.2
@@ -18,7 +18,7 @@
formatter.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
}
- public static String createSnapshotVersion()
+ public static String getTimestamp()
{
Date now = new Date();
@@ -28,11 +28,23 @@
}
- public static Date parseSnapshotVersion( String snapshotVersion ) throws ParseException
+ public static Date parseTimestamp( String timestamp ) throws ParseException
{
- Date retValue = formatter.parse( snapshotVersion );
+ Date retValue = formatter.parse( timestamp );
return retValue;
+ }
+
+
+ /**
+ * @param remoteVersion
+ * @return
+ */
+ public static String getTimestamp( Date snapshotVersion )
+ {
+ String retValue = formatter.format( snapshotVersion );
+
+ return retValue;
}
}
1.1 maven-components/maven-project/src/test/java/org/apache/maven/artifact/snapshot/DefaultSnapshotResolverTest.java
Index: DefaultSnapshotResolverTest.java
===================================================================
package org.apache.maven.artifact.snapshot;
/*
* Copyright 2001-2004 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 java.io.File;
import java.util.List;
import org.apache.maven.artifact.MavenArtifact;
import org.apache.maven.project.AbstractProjectTestCase;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.FileUtils;
/**
* @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a>
* @version $Id: DefaultSnapshotResolverTest.java,v 1.1 2004/05/16 15:58:10 michal Exp $
*/
public class DefaultSnapshotResolverTest extends AbstractProjectTestCase
{
private SnapshotResolver snapshotResolver;
/**
* @param testName
*/
public DefaultSnapshotResolverTest( String testName )
{
super( testName );
}
public void setUp() throws Exception
{
super.setUp();
snapshotResolver = ( SnapshotResolver ) lookup( SnapshotResolver.ROLE );
assertNotNull( "Test SnapshotResolver snapshotResolver can't be null!",
snapshotResolver );
}
public void testSnapshotResolving()
{
try
{
File f = new File( getLocalRepository(),
"/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom" );
assertTrue( "Test file: '" + f.getAbsolutePath()
+ "' doesn't exist!", f.exists() );
System.setProperty( "maven.repo.local", getLocalRepository() );
MavenProject project = buildProject( f );
assertEquals( project.getLocalRepository(), getLocalRepository() );
List artifacts = project.getArtifacts();
assertEquals( 5, artifacts.size() );
initRemoteRepositories( project );
// 0 newer version of this snapshot is in remote repository
MavenArtifact a = ( MavenArtifact ) artifacts.get( 0 );
snapshotResolver.resolveSnapshotArtifact( a, project.getRepositories() );
assertEquals( "remote", getContent( a ) );
assertEquals( "20050101.101010", getVersion( a ) );
// 1 newer version of this snapshot is in local repository
MavenArtifact b = ( MavenArtifact ) artifacts.get( 1 );
snapshotResolver.resolveSnapshotArtifact( b, project.getRepositories() );
assertEquals( "local", getContent( b ) );
assertEquals( "20040101.101010", getVersion( b ) );
// 2 this snapshot is missing in local repository but can be found in remote repository
MavenArtifact c = ( MavenArtifact ) artifacts.get( 2 );
snapshotResolver.resolveSnapshotArtifact( c, project.getRepositories() );
assertEquals( "remote", getContent( c ) );
assertEquals( "20040101.101010", getVersion( c ) );
// 3 this snapshot is neither in local repository nor in any of remote repositories
MavenArtifact d = ( MavenArtifact ) artifacts.get( 3 );
snapshotResolver.resolveSnapshotArtifact( d, project.getRepositories() );
assertEquals( null, getContent( d ) );
assertEquals( null, getVersion( d ) );
// 4 this snapshot is in the local repository but it was removed from all remote repositories
MavenArtifact e = ( MavenArtifact ) artifacts.get( 4 );
snapshotResolver.resolveSnapshotArtifact( e, project.getRepositories() );
assertEquals( "local", getContent( e ) );
assertEquals( "20040101.101010", getVersion( e ) );
}
catch ( Exception e )
{
e.printStackTrace();
fail( e.getMessage() );
}
}
private String getContent( MavenArtifact a )
{
String retValue = null;
try
{
retValue = FileUtils.fileRead( a.getFile() );
}
catch ( Exception e )
{
}
return retValue;
}
private String getVersion( MavenArtifact a )
{
String retValue = null;
try
{
retValue = FileUtils.fileRead( a.getSnapshotVersionFile() );
}
catch ( Exception e )
{
}
return retValue;
}
}
1.3 +82 -115 maven-components/maven-project/src/test/java/org/apache/maven/artifact/downloader/DefaultArtifactDownloaderTest.java
Index: DefaultArtifactDownloaderTest.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/test/java/org/apache/maven/artifact/downloader/DefaultArtifactDownloaderTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DefaultArtifactDownloaderTest.java 11 May 2004 19:21:10 -0000 1.2
+++ DefaultArtifactDownloaderTest.java 16 May 2004 15:58:10 -0000 1.3
@@ -16,13 +16,12 @@
* limitations under the License.
*/
-
import org.apache.maven.artifact.MavenArtifact;
import org.apache.maven.artifact.downloader.ArtifactDownloader;
import org.apache.maven.artifact.factory.MavenArtifactFactory;
import org.apache.maven.project.AbstractProjectTestCase;
import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.util.FileUtils;
+
import java.io.File;
import java.util.List;
@@ -32,135 +31,103 @@
* @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a>
* @version $Id$
*/
-public class DefaultArtifactDownloaderTest
- extends AbstractProjectTestCase
+public class DefaultArtifactDownloaderTest extends AbstractProjectTestCase
{
-
+
private ArtifactDownloader artifactDownloader;
-
+
private MavenArtifactFactory artifactFactory;
-
-
+
public DefaultArtifactDownloaderTest( String testName )
{
super( testName );
}
-
-
-
+
public void setUp() throws Exception
{
super.setUp();
-
+
artifactDownloader = ( ArtifactDownloader ) lookup( ArtifactDownloader.ROLE );
-
- assertNotNull( "Test artifactDownloader can't be null!", artifactDownloader );
-
+
+ assertNotNull( "Test artifactDownloader can't be null!",
+ artifactDownloader );
+
artifactFactory = ( MavenArtifactFactory ) lookup( MavenArtifactFactory.ROLE );
-
+
}
-
-
- public void testArtifactDownloading( )
+ public void testArtifactDownloading()
{
-
-
- File f = new File( getLocalRepository(), "/maven-test/poms/maven-test-a-1.0.pom" );
- assertTrue( "Test file: '" + f.getAbsolutePath() + "' doesn't exist!", f.exists() );
+ File f = new File( getLocalRepository(),
+ "/maven-test/poms/maven-test-a-1.0.pom" );
- File tempLocalRepository = new File( basedir, "target/test-repo-local" );
-
- tempLocalRepository.mkdirs();
+ assertTrue( "Test file: '" + f.getAbsolutePath() + "' doesn't exist!",
+ f.exists() );
+
+ initLocalRepository();
- System.out.println( "Crated local repo: " + tempLocalRepository );
+ MavenProject project = buildProject( f );
+
+ assertTrue( "Local repsoitory could not be crated", f.exists() );
+
+ initRemoteRepositories( project );
+
+ List artifacts = project.getArtifacts();
+
+ assertEquals( 2, artifacts.size() );
+
+ /*we are using a POM which looks like follows:
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-b</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>maven-test</groupId>
+ <artifactId>maven-test-z</artifactId>
+ <version>1.0</version>
+ </dependency>
+ */
+
+ MavenArtifact artifactB = ( MavenArtifact ) artifacts.get( 0 );
+
+ MavenArtifact artifactZ = ( MavenArtifact ) artifacts.get( 1 );
+
+ assertFalse( artifactB.exists() );
+
+ assertFalse( artifactZ.exists() );
+
+ // this one is in repo-1
+ assertTrue( "B should have been downloaded", artifactDownloader
+ .getRemoteArtifact( artifactB, project.getRepositories() ) );
+
+ assertTrue( "B should have been downloaded", artifactB.exists() );
+
+ // this one is in repo-2
+ assertTrue( "Z should have been downloaded: " + artifactZ.getFile() , artifactDownloader
+ .getRemoteArtifact( artifactZ, project.getRepositories() ) );
- try
- {
-
- // that's the only was I can influence MavenProjectBuilder
- System.setProperty( "maven.repo.local", tempLocalRepository.getPath() );
-
- try
- {
- FileUtils.deleteDirectory( tempLocalRepository );
- }
- catch( Exception e)
- {
- }
-
- MavenProject project = projectBuilder.build( f );
-
- assertNotNull( "Project is null", project );
-
- assertTrue( "Local repsoitory could not be crated", f.exists() );
-
- File repo_1 = new File( basedir, "src/test/resources/remote-repo-1" );
-
- File repo_2 = new File( basedir, "src/test/resources/remote-repo-2" );
-
- project.addRepository( "file://" + repo_1.getPath() );
-
- project.addRepository( "file://" + repo_2.getPath() );
-
- assertEquals( 2, project.getRepositories().size() );
-
-
- List artifacts = project.getArtifacts();
-
- assertEquals( 2, artifacts.size() );
-
- /*we are using a POM which looks like follows:
- <dependency>
- <groupId>maven-test</groupId>
- <artifactId>maven-test-b</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>maven-test</groupId>
- <artifactId>maven-test-z</artifactId>
- <version>1.0</version>
- </dependency>
- */
-
- MavenArtifact artifactB = ( MavenArtifact ) artifacts.get( 0 );
-
- MavenArtifact artifactZ = ( MavenArtifact ) artifacts.get( 1 );
-
- assertFalse( artifactB.exists() );
-
- assertFalse( artifactZ.exists() );
-
- // this one is in repo-1
- assertTrue( "B should have been downloaded", artifactDownloader.getRemoteArtifact( artifactB, project.getRepositories() ) );
-
- assertTrue( "B should have been downloaded", artifactB.exists() );
-
- // this one is in repo-2
- assertTrue( "Z should have been downloaded", artifactDownloader.getRemoteArtifact( artifactZ, project.getRepositories() ) );
-
- assertTrue( "Z should have been downloaded", artifactZ.exists() );
-
- // A has accompanying md5 file
- assertTrue( "MD5 file for B should have been downloaded", artifactB.getChecksumFile().exists() );
-
- //Z does not have md5 file
- assertFalse( "MD5 file for Z does not exist in any repo and should not be downloaded. File : " + artifactZ.getChecksumFile() + " exists.", artifactZ.getChecksumFile().exists() );
-
- // try to crate bizzare artifact and download it. this should fail.
-
- artifactB.getDependency().setGroupId( "bizzare" );
-
- assertFalse( "Not existing artifact cannot be downloaded", artifactDownloader.getRemoteArtifact( artifactB, project.getRepositories() ) );
-
-
- }
- catch ( Exception e )
- {
- e.printStackTrace();
-
- fail( e.getMessage() );
- }
+
+ assertTrue( "Z should have been downloaded", artifactZ.exists() );
+
+ // A has accompanying md5 file
+ assertTrue( "MD5 file for B should have been downloaded", artifactB
+ .getChecksumFile().exists() );
+
+ //Z does not have md5 file
+ assertFalse(
+ "MD5 file for Z does not exist in any repo and should not be downloaded. File : "
+ + artifactZ.getChecksumFile() + " exists.", artifactZ
+ .getChecksumFile().exists() );
+
+ // try to crate bizzare artifact and download it. this should fail.
+
+ artifactB.getDependency().setGroupId( "bizzare" );
+
+ assertFalse( "Not existing artifact cannot be downloaded",
+ artifactDownloader.getRemoteArtifact( artifactB, project
+ .getRepositories() ) );
+
}
-}
+}
\ No newline at end of file
1.1 maven-components/maven-project/src/test/resources/local-repo/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom
Index: maven-test-snapshot-resolving-1.0.pom
===================================================================
<project>
<groupId>snapshot-test</groupId>
<artifactId>maven-test-snapshot-resolving</artifactId>
<currentVersion>1.0</currentVersion>
<dependencies>
<!-- newer version of this snapshot is in remote repository -->
<dependency>
<groupId>snapshot-test</groupId>
<artifactId>maven-snapshot-a</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- newer version of this snapshot is in local repository -->
<dependency>
<groupId>snapshot-test</groupId>
<artifactId>maven-snapshot-b</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- this snapshot is missing in local repository but can be found in remote repository -->
<dependency>
<groupId>snapshot-test</groupId>
<artifactId>maven-snapshot-c</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- this snapshot is neither in local repository nor in any of remote repositories -->
<dependency>
<groupId>snapshot-test</groupId>
<artifactId>maven-snapshot-d</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- this snapshot is in the local repository but it was removed from all remote repositories -->
<dependency>
<groupId>snapshot-test</groupId>
<artifactId>maven-snapshot-e</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
1.2 +6 -3 maven-components/maven-project/src/main/java/org/apache/maven/artifact/downloader/DefaultArtifactDownloader.java
Index: DefaultArtifactDownloader.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/downloader/DefaultArtifactDownloader.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultArtifactDownloader.java 11 May 2004 19:21:10 -0000 1.1
+++ DefaultArtifactDownloader.java 16 May 2004 15:58:10 -0000 1.2
@@ -79,7 +79,7 @@
wagon.connect( repository );
- return get( wagon, artifact );
+ return getRemoteArtifact( artifact, wagon );
}
catch ( Exception e )
@@ -110,7 +110,7 @@
* @param wagon
* @param artifact
*/
- private boolean get( Wagon wagon, MavenArtifact artifact )
+ public boolean getRemoteArtifact( MavenArtifact artifact, Wagon wagon )
{
getLogger().info( "Trying to download: " + artifact.getUrlPath() + " from " + wagon.getRepository().getUrl() );
@@ -156,6 +156,9 @@
return true;
}
+
+
+
1.2 +11 -4 maven-components/maven-project/src/main/java/org/apache/maven/artifact/downloader/ArtifactDownloader.java
Index: ArtifactDownloader.java
===================================================================
RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/downloader/ArtifactDownloader.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ArtifactDownloader.java 11 May 2004 19:21:10 -0000 1.1
+++ ArtifactDownloader.java 16 May 2004 15:58:10 -0000 1.2
@@ -3,6 +3,7 @@
import java.util.List;
import org.apache.maven.artifact.MavenArtifact;
+import org.apache.maven.wagon.Wagon;
import org.apache.maven.wagon.repository.Repository;
@@ -18,7 +19,7 @@
public interface ArtifactDownloader
{
/** Component role name*/
- public static final String ROLE = ArtifactDownloader.class.getName( );
+ String ROLE = ArtifactDownloader.class.getName( );
/**
* Downloads given <code>artifact</code> from the maven remote repositories
@@ -27,7 +28,7 @@
* @param artifact the artifact to retrieve from the repositories.
* @return true if the download is successful, <code>false</code> otherwise.
*/
- public boolean getRemoteArtifact( MavenArtifact artifact, Repository remoteRepository );
+ boolean getRemoteArtifact( MavenArtifact artifact, Repository remoteRepository );
/**
*
@@ -36,7 +37,13 @@
* @return <code>true</code> if the from any of the repositories were succesful, <code>false</code> otherwise
*/
- public boolean getRemoteArtifact( MavenArtifact artifact, List repositories );
+ boolean getRemoteArtifact( MavenArtifact artifact, List repositories );
+
+ /**
+ * @param artifact
+ * @param wagon
+ */
+ boolean getRemoteArtifact( MavenArtifact artifact, Wagon wagon );
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org
Re: cvs commit:
maven-components/maven-project/src/main/java/org/apache/maven/artifact/downloader
DefaultArtifactDownloader.java ArtifactDownloader.java
Posted by Jason van Zyl <jv...@maven.org>.
On Mon, 2004-05-17 at 14:52, Jerome Lacoste wrote:
>
> it seems like snapshotResolver doesn't get initialized...
It does indeed get initialized, the container does it. In our case
Plexus.
Also, if look at the tests you'll see that all the child components in
teh snapshot resolver are live and functioning.
--
jvz.
Jason van Zyl
jason@maven.org
http://maven.apache.org
happiness is like a butterfly: the more you chase it, the more it will
elude you, but if you turn your attention to other things, it will come
and sit softly on your shoulder ...
-- Thoreau
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org
Re: cvs commit:
maven-components/maven-project/src/main/java/org/apache/maven/artifact/downloader
DefaultArtifactDownloader.java ArtifactDownloader.java
Posted by Jerome Lacoste <je...@coffeebreaks.org>.
>
> 1.5 +13 -2 maven-components/maven-project/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
>
> Index: DefaultArtifactResolver.java
> ===================================================================
> RCS file: /home/cvs/maven-components/maven-project/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java,v
> retrieving revision 1.4
> retrieving revision 1.5
> diff -u -r1.4 -r1.5
> --- DefaultArtifactResolver.java 11 May 2004 19:21:10 -0000 1.4
> +++ DefaultArtifactResolver.java 16 May 2004 15:58:10 -0000 1.5
> @@ -3,6 +3,7 @@
> import org.apache.maven.artifact.MavenArtifact;
> import org.apache.maven.artifact.downloader.ArtifactDownloader;
> import org.apache.maven.artifact.factory.MavenArtifactFactory;
> +import org.apache.maven.artifact.snapshot.SnapshotResolver;
> import org.apache.maven.model.Dependency;
> import org.apache.maven.project.MavenProject;
>
> @@ -24,6 +25,11 @@
> ArtifactDownloader artifactDownloader;
>
>
> + /**
> + * @requirement
> + */
> + SnapshotResolver snapshotResolver;
> +
>
>
> public MavenArtifact getArtifact( Dependency dependency, MavenProject project )
> @@ -35,7 +41,12 @@
>
> if ( retValue.isSnapshot() )
> {
> - // for snapshots artifact we always have to try to check if newer version exists
> + boolean snapshotResolved = snapshotResolver.resolveSnapshotArtifact( retValue, project.getRepositories() );
> +
> + if ( !snapshotResolved )
> + {
> + retValue = null;
> + }
>
> }
> else if ( !retValue.exists() )
it seems like snapshotResolver doesn't get initialized...
lack a UT?
J
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org