diff options
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java')
-rw-r--r-- | framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java | 347 |
1 files changed, 347 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java new file mode 100644 index 00000000..66e147c2 --- /dev/null +++ b/framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java @@ -0,0 +1,347 @@ +package org.apache.maven.artifact.resolver; + +/* + * 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.util.Iterator; +import java.util.List; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy; + +/** + * Base class for artifact resolution exceptions. + * + * @author <a href="mailto:brett@apache.org">Brett Porter</a> + */ +public class AbstractArtifactResolutionException + extends Exception +{ + private String groupId; + + private String artifactId; + + private String version; + + private String type; + + private String classifier; + + private Artifact artifact; + + private List<ArtifactRepository> remoteRepositories; + + private final String originalMessage; + + private final String path; + + static final String LS = System.getProperty( "line.separator" ); + + @SuppressWarnings( "checkstyle:parameternumber" ) + protected AbstractArtifactResolutionException( String message, + String groupId, + String artifactId, + String version, + String type, + String classifier, + List<ArtifactRepository> remoteRepositories, + List<String> path ) + { + this( message, groupId, artifactId, version, type, classifier, remoteRepositories, path, null ); + } + + @SuppressWarnings( "checkstyle:parameternumber" ) + protected AbstractArtifactResolutionException( String message, + String groupId, + String artifactId, + String version, + String type, + String classifier, + List<ArtifactRepository> remoteRepositories, + List<String> path, + Throwable t ) + { + super( constructMessageBase( message, groupId, artifactId, version, type, remoteRepositories, path ), t ); + + this.originalMessage = message; + this.groupId = groupId; + this.artifactId = artifactId; + this.type = type; + this.classifier = classifier; + this.version = version; + this.remoteRepositories = remoteRepositories; + this.path = constructArtifactPath( path, "" ); + } + + protected AbstractArtifactResolutionException( String message, + Artifact artifact ) + { + this( message, artifact, null ); + } + + protected AbstractArtifactResolutionException( String message, + Artifact artifact, + List<ArtifactRepository> remoteRepositories ) + { + this( message, artifact, remoteRepositories, null ); + } + + protected AbstractArtifactResolutionException( String message, + Artifact artifact, + List<ArtifactRepository> remoteRepositories, + Throwable t ) + { + this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(), + artifact.getClassifier(), remoteRepositories, artifact.getDependencyTrail(), t ); + this.artifact = artifact; + } + + public Artifact getArtifact() + { + return artifact; + } + + public String getGroupId() + { + return groupId; + } + + public String getArtifactId() + { + return artifactId; + } + + public String getVersion() + { + return version; + } + + public String getType() + { + return type; + } + + /** @return the classifier */ + public String getClassifier() + { + return this.classifier; + } + + /** @return the path */ + public String getPath() + { + return this.path; + } + + public List<ArtifactRepository> getRemoteRepositories() + { + return remoteRepositories; + } + + public String getOriginalMessage() + { + return originalMessage; + } + + protected static String constructArtifactPath( List<String> path, + String indentation ) + { + StringBuilder sb = new StringBuilder(); + + if ( path != null ) + { + sb.append( LS ); + sb.append( indentation ); + sb.append( "Path to dependency: " ); + sb.append( LS ); + int num = 1; + for ( Iterator<String> i = path.iterator(); i.hasNext(); num++ ) + { + sb.append( indentation ); + sb.append( "\t" ); + sb.append( num ); + sb.append( ") " ); + sb.append( i.next() ); + sb.append( LS ); + } + } + + return sb.toString(); + } + + private static String constructMessageBase( String message, + String groupId, + String artifactId, + String version, + String type, + List<ArtifactRepository> remoteRepositories, + List<String> path ) + { + StringBuilder sb = new StringBuilder(); + + sb.append( message ); + + if ( message == null || !message.contains( "from the specified remote repositories:" ) ) + { + sb.append( LS ); + sb.append( " " ).append( groupId ).append( ":" ).append( artifactId ).append( ":" ).append( type ).append( + ":" ).append( version ); + sb.append( LS ); + if ( remoteRepositories != null ) + { + sb.append( LS ); + sb.append( "from the specified remote repositories:" ); + sb.append( LS ).append( " " ); + + if ( remoteRepositories.isEmpty() ) + { + sb.append( "(none)" ); + } + + for ( Iterator<ArtifactRepository> i = remoteRepositories.iterator(); i.hasNext(); ) + { + ArtifactRepository remoteRepository = i.next(); + + sb.append( remoteRepository.getId() ); + sb.append( " (" ); + sb.append( remoteRepository.getUrl() ); + + ArtifactRepositoryPolicy releases = remoteRepository.getReleases(); + if ( releases != null ) + { + sb.append( ", releases=" ).append( releases.isEnabled() ); + } + + ArtifactRepositoryPolicy snapshots = remoteRepository.getSnapshots(); + if ( snapshots != null ) + { + sb.append( ", snapshots=" ).append( snapshots.isEnabled() ); + } + + sb.append( ")" ); + if ( i.hasNext() ) + { + sb.append( "," ).append( LS ).append( " " ); + } + } + } + + sb.append( constructArtifactPath( path, "" ) ); + sb.append( LS ); + } + + return sb.toString(); + } + + @SuppressWarnings( "checkstyle:parameternumber" ) + protected static String constructMissingArtifactMessage( String message, + String indentation, + String groupId, + String artifactId, + String version, + String type, + String classifier, + String downloadUrl, + List<String> path ) + { + StringBuilder sb = new StringBuilder( message ); + + if ( !"pom".equals( type ) ) + { + if ( downloadUrl != null ) + { + sb.append( LS ); + sb.append( LS ); + sb.append( indentation ); + sb.append( "Try downloading the file manually from: " ); + sb.append( LS ); + sb.append( indentation ); + sb.append( " " ); + sb.append( downloadUrl ); + } + else + { + sb.append( LS ); + sb.append( LS ); + sb.append( indentation ); + sb.append( "Try downloading the file manually from the project website." ); + } + + sb.append( LS ); + sb.append( LS ); + sb.append( indentation ); + sb.append( "Then, install it using the command: " ); + sb.append( LS ); + sb.append( indentation ); + sb.append( " mvn install:install-file -DgroupId=" ); + sb.append( groupId ); + sb.append( " -DartifactId=" ); + sb.append( artifactId ); + sb.append( " -Dversion=" ); + sb.append( version ); + + //insert classifier only if it was used in the artifact + if ( classifier != null && !classifier.equals( "" ) ) + { + sb.append( " -Dclassifier=" ); + sb.append( classifier ); + } + sb.append( " -Dpackaging=" ); + sb.append( type ); + sb.append( " -Dfile=/path/to/file" ); + sb.append( LS ); + + // If people want to deploy it + sb.append( LS ); + sb.append( indentation ); + sb.append( "Alternatively, if you host your own repository you can deploy the file there: " ); + sb.append( LS ); + sb.append( indentation ); + sb.append( " mvn deploy:deploy-file -DgroupId=" ); + sb.append( groupId ); + sb.append( " -DartifactId=" ); + sb.append( artifactId ); + sb.append( " -Dversion=" ); + sb.append( version ); + + //insert classifier only if it was used in the artifact + if ( classifier != null && !classifier.equals( "" ) ) + { + sb.append( " -Dclassifier=" ); + sb.append( classifier ); + } + sb.append( " -Dpackaging=" ); + sb.append( type ); + sb.append( " -Dfile=/path/to/file" ); + sb.append( " -Durl=[url] -DrepositoryId=[id]" ); + sb.append( LS ); + } + + sb.append( constructArtifactPath( path, indentation ) ); + sb.append( LS ); + + return sb.toString(); + } + + public String getArtifactPath() + { + return path; + } +} |