You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by ji...@codehaus.org on 2003/09/03 04:04:10 UTC
[jira] Updated: (MAVEN-751) Getting remote artifact of type "distribution" doesn't fetch tar.gz, bin or zip type files
The following issue has been updated:
Updater: dion gillard (mailto:dion@apache.org)
Date: Tue, 2 Sep 2003 9:03 PM
Changes:
Fix Version changed to 1.1
---------------------------------------------------------------------
For a full history of the issue, see:
http://jira.codehaus.org/secure/ViewIssue.jspa?key=MAVEN-751&page=history
---------------------------------------------------------------------
View the issue:
http://jira.codehaus.org/secure/ViewIssue.jspa?key=MAVEN-751
Here is an overview of the issue:
---------------------------------------------------------------------
Key: MAVEN-751
Summary: Getting remote artifact of type "distribution" doesn't fetch tar.gz, bin or zip type files
Type: Improvement
Status: Unassigned
Priority: Minor
Time Spent: Unknown
Remaining: Unknown
Project: maven
Components:
component-fetch
Fix Fors:
1.1
Versions:
1.0-beta-10
Assignee:
Reporter:
Created: Wed, 27 Aug 2003 2:27 PM
Updated: Tue, 2 Sep 2003 9:03 PM
Environment: windows
Description:
When attempting to get dependencies of type "distribution", the current code assumes that you'll be fetching the dependency from the repository using the path [repo]/[artifactid]/distributions/[artifactid].distribution. Since a ".distribution" file is not typically what people need, rather they want .tar.gz, .zip or .bin files that contain the distribution, I'd suggest the following sort of change to org.apache.maven.verifier.DependencyVerifier.getRemoteArtifact(), I This implementation is a hack, but kept the changes localized for my purposes (if I had more time, I'd have moved some of the code into other classes).
/**
* DOCUMENT ME!
*
* @param artifact DOCUMENT ME!
* @param ext DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private static String getDistUrlPath(Artifact artifact, String ext) {
return "/" + artifact.getDependency().getArtifactDirectory() + "/" +
artifact.getDependency().getType() + "s" + "/" +
artifact.getDependency().getArtifactId() + "-" +
artifact.getDependency().getVersion() + "." + ext;
}
/**
* DOCUMENT ME!
*
* @param artifact DOCUMENT ME!
* @param ext DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private File getDistFile(Artifact artifact, String ext) {
return new File(getProject().getContext().getMavenRepoLocal() + ps +
artifact.getDependency().getArtifactDirectory() + ps +
artifact.getDependency().getType() + "s" + ps +
artifact.getDependency().getArtifactId() + "-" +
artifact.getDependency().getVersion() + "." + ext);
}
/**
* Retrieve a <code>remoteFile</code> from the maven remote repositories
* and store it at <code>localFile</code>
*
* @param artifact the artifact to retrieve from the repositories.
*
* @return true if the retrieval succeeds, false otherwise.
*/
private boolean getRemoteArtifact(Artifact artifact) {
boolean artifactFound = false;
for (Iterator i =
getProject().getContext().getMavenRepoRemote().iterator();
i.hasNext();) {
String remoteRepo = (String) i.next();
String url = null;
if (DISTRIBUTION_TYPE.equals(artifact.getDependency().getType())) {
Exception lastFailure = null;
for (int j = 0; j < DIST_TYPES.length; j++) {
try {
url = remoteRepo + "/" +
getDistUrlPath(artifact, DIST_TYPES[j]);
url = StringUtils.replace(url, "//", "/");
url = StringUtils.replace(url, "http:/", "http://");
HttpUtils.getFile(url,
getDistFile(artifact, DIST_TYPES[j]),
ignoreErrors, useTimestamp,
getProject().getContext()
.getProxyHost(),
getProject().getContext()
.getProxyPort(),
getProject().getContext()
.getProxyUserName(),
getProject().getContext()
.getProxyPassword(), true);
artifactFound = true;
} catch (FileNotFoundException fe) {
// ignore
//System.out.println("Fetch of [" + url + "] to [" +
// getDistFile(artifact, DIST_TYPES[j]) +
// "] failed");
} catch (Exception e) {
// lastFailure = e;
System.out.println("Error retrieving artifact from [" +
url + "]: " + lastFailure);
}
}
/*
if (!artifactFound &&
!(lastFailure instanceof FileNotFoundException) )
{
System.out.println("Error retrieving artifact from [" +
url + "]: " + lastFailure);
}
*/
} else {
// The username and password parameters are not being
// used here. Those are the "" parameters you see below.
url = remoteRepo + "/" + artifact.getUrlPath();
url = StringUtils.replace(url, "//", "/");
url = StringUtils.replace(url, "http:/", "http://");
// Attempt to retrieve the artifact and set the checksum if retrieval
// of the checksum file was successful.
try {
HttpUtils.getFile(url, artifact.getFile(), ignoreErrors,
useTimestamp,
getProject().getContext().getProxyHost(),
getProject().getContext().getProxyPort(),
getProject().getContext()
.getProxyUserName(),
getProject().getContext()
.getProxyPassword(), true);
// Artifact was found, continue checking additional remote repos (if any)
// in case there is a newer version (i.e. snapshots) in another repo
artifactFound = true;
} catch (FileNotFoundException e) {
// Multiple repositories may exist, and if the file is not found
// in just one of them, it's no problem.
// if it's not found at all, artifactFound will be false.
} catch (Exception e) {
// If there are additional remote repos, then ignore exception
// as artifact may be found in another remote repo. If there
// are no more remote repos to check and the artifact wasn't found in
// a previous remote repo, then artifactFound is false indicating
// that the artifact could not be found in any of the remote repos
//
// arguably, we need to give the user better control (another command-
// line switch perhaps) of what to do in this case? Maven already has
// a command-line switch to work in offline mode, but what about when
// one of two or more remote repos is unavailable? There may be multiple
// remote repos for redundancy, in which case you probably want the build
// to continue. There may however be multiple remote repos because some
// artifacts are on one, and some are on another. In this case, you may
// want the build to break.
//
// print a warning, in any case, so user catches on to mistyped
// hostnames, or other snafus
// FIXME: localize this message
System.out.println("Error retrieving artifact from [" +
url + "]: " + e);
}
}
}
return artifactFound;
}
---------------------------------------------------------------------
JIRA INFORMATION:
This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org