diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java index a9bab2d708..9cfe05fc37 100644 --- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java +++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java @@ -42,6 +42,7 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; +import org.apache.maven.repository.DelegatingLocalArtifactRepository; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; @@ -68,9 +69,6 @@ public class DefaultMaven @Requirement protected RuntimeInformation runtimeInformation; - @Requirement - List localArtifactRepositories; - public List getLifecyclePhases() { return lifecycleExecutor.getLifecyclePhases(); @@ -89,12 +87,6 @@ public MavenExecutionResult execute( MavenExecutionRequest request ) MavenExecutionResult result = new DefaultMavenExecutionResult(); DelegatingLocalArtifactRepository delegatingLocalArtifactRepository = new DelegatingLocalArtifactRepository( request.getLocalRepository() ); - delegatingLocalArtifactRepository.addToEndOfSearchOrder( new UserLocalArtifactRepository( request.getLocalRepository() ) ); - - if ( localArtifactRepositories != null && localArtifactRepositories.size() > 0 ) - { - delegatingLocalArtifactRepository.addToBeginningOfSearchOrder( localArtifactRepositories.get( 0 ) ); - } request.setLocalRepository( delegatingLocalArtifactRepository ); @@ -148,7 +140,7 @@ public MavenExecutionResult execute( MavenExecutionRequest request ) // Workspace // User Local Repository - delegatingLocalArtifactRepository.addToBeginningOfSearchOrder( new ReactorArtifactRepository( projects ) ); + delegatingLocalArtifactRepository.setBuildReactor( new ReactorArtifactRepository( projects ) ); if ( result.hasExceptions() ) { diff --git a/maven-core/src/main/java/org/apache/maven/DelegatingLocalArtifactRepository.java b/maven-core/src/main/java/org/apache/maven/DelegatingLocalArtifactRepository.java deleted file mode 100644 index 4a3af235b3..0000000000 --- a/maven-core/src/main/java/org/apache/maven/DelegatingLocalArtifactRepository.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.apache.maven; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.metadata.ArtifactMetadata; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.DefaultArtifactRepository; - -public class DelegatingLocalArtifactRepository - extends DefaultArtifactRepository -{ - private List localRepositories; - - private ArtifactRepository userLocalArtifactRepository; - - public DelegatingLocalArtifactRepository( ArtifactRepository artifactRepository ) - { - this.userLocalArtifactRepository = artifactRepository; - } - - public void addToEndOfSearchOrder( LocalArtifactRepository localRepository ) - { - if ( localRepositories == null ) - { - localRepositories = new ArrayList(); - } - - localRepositories.add( localRepository ); - } - - public void addToBeginningOfSearchOrder( LocalArtifactRepository localRepository ) - { - if ( localRepositories == null ) - { - localRepositories = new ArrayList(); - } - - localRepositories.add( 0, localRepository ); - } - - @Override - public Artifact find( Artifact artifact ) - { - for( LocalArtifactRepository repository : localRepositories ) - { - artifact = repository.find( artifact ); - - if ( artifact.isResolved() ) - { - return artifact; - } - } - - return artifact; - } - - public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository ) - { - for( LocalArtifactRepository localRepository : localRepositories ) - { - if ( localRepository.hasLocalMetadata() ) - { - return localRepository.pathOfLocalRepositoryMetadata( metadata, localRepository ); - } - } - - return null; - } - - // This ID is necessary of the metadata lookup doesn't work correctly. - public String getId() - { - return "delegating"; - } - - @Override - public String pathOf( Artifact artifact ) - { - for( LocalArtifactRepository localRepository : localRepositories ) - { - if( localRepository.hasLocalMetadata() ) - { - String path = localRepository.pathOf( artifact ); - - return path; - } - } - - return null; - } - - @Override - public String getBasedir() - { - return userLocalArtifactRepository.getBasedir(); - } -} diff --git a/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java b/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java index 9c768331c6..80dccf340b 100644 --- a/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java +++ b/maven-core/src/main/java/org/apache/maven/ReactorArtifactRepository.java @@ -7,6 +7,7 @@ import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.artifact.repository.DefaultArtifactRepository; import org.apache.maven.project.MavenProject; +import org.apache.maven.repository.LocalArtifactRepository; /** * An implementation of a repository that knows how to search the Maven reactor for artifacts. diff --git a/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java b/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java index dc245b0535..a3ffb36dfe 100644 --- a/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java +++ b/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java @@ -216,4 +216,32 @@ private void validateSettings( Settings settings, throw new IOException( "Failed to validate Settings file at " + location + "\n" + validationResult.render( "\n" ) ); } } + + public SettingsValidationResult validateSettings( File settingsFile ) + { + SettingsValidationResult result = new SettingsValidationResult(); + if ( settingsFile != null && !settingsFile.canRead() ) + { + try + { + Settings settings = readSettings( settingsFile ); + + return validator.validate( settings ); + } + catch ( IOException e ) + { + result.addMessage( e.getMessage() ); + } + catch ( XmlPullParserException e ) + { + result.addMessage( e.getMessage() ); + } + } + else + { + // TODO do we have anything to say? + } + + return result; + } } diff --git a/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java b/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java index 14204b1916..896d9b3382 100644 --- a/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java +++ b/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java @@ -19,9 +19,11 @@ * under the License. */ +import java.io.File; import java.io.IOException; import org.apache.maven.execution.MavenExecutionRequest; +import org.apache.maven.settings.validation.SettingsValidationResult; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; /** @@ -34,4 +36,6 @@ public interface MavenSettingsBuilder Settings buildSettings( MavenExecutionRequest request ) throws IOException, XmlPullParserException; + + SettingsValidationResult validateSettings( File settingsFile ); } diff --git a/maven-repository/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java b/maven-repository/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java new file mode 100644 index 0000000000..97bf22d3a9 --- /dev/null +++ b/maven-repository/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java @@ -0,0 +1,84 @@ +package org.apache.maven.repository; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.metadata.ArtifactMetadata; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.repository.DefaultArtifactRepository; + +/** + * Delegating local artifact repository chains the reactor, IDE workspace + * and user local repository. + */ +public class DelegatingLocalArtifactRepository + extends DefaultArtifactRepository +{ + private LocalArtifactRepository buildReactor; + + private LocalArtifactRepository ideWorkspace; + + private ArtifactRepository userLocalArtifactRepository; + + public DelegatingLocalArtifactRepository( ArtifactRepository artifactRepository ) + { + this.userLocalArtifactRepository = artifactRepository; + } + + public void setBuildReactor( LocalArtifactRepository localRepository ) + { + this.buildReactor = localRepository; + } + + public void setIdeWorkspace( LocalArtifactRepository localRepository ) + { + this.ideWorkspace = localRepository; + } + + public LocalArtifactRepository getIdeWorspace() + { + return ideWorkspace; + } + + @Override + public Artifact find( Artifact artifact ) + { + if ( !artifact.isRelease() && buildReactor != null ) + { + artifact = buildReactor.find( artifact ); + } + + if ( !artifact.isResolved() && ideWorkspace != null ) + { + artifact = ideWorkspace.find( artifact ); + } + + if ( !artifact.isResolved() ) + { + artifact = userLocalArtifactRepository.find( artifact ); + } + + return artifact; + } + + public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository ) + { + return userLocalArtifactRepository.pathOfLocalRepositoryMetadata( metadata, userLocalArtifactRepository ); + } + + // This ID is necessary of the metadata lookup doesn't work correctly. + public String getId() + { + return "delegating"; + } + + @Override + public String pathOf( Artifact artifact ) + { + return userLocalArtifactRepository.pathOf( artifact ); + } + + @Override + public String getBasedir() + { + return userLocalArtifactRepository.getBasedir(); + } +} diff --git a/maven-repository/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java b/maven-repository/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java index 83c2133ced..dd2da09d72 100644 --- a/maven-repository/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java +++ b/maven-repository/src/main/java/org/apache/maven/repository/LegacyRepositorySystem.java @@ -17,10 +17,7 @@ import java.io.File; import java.io.IOException; -import java.net.MalformedURLException; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.InvalidRepositoryException; @@ -41,12 +38,11 @@ import org.apache.maven.model.RepositoryPolicy; import org.apache.maven.wagon.ResourceDoesNotExistException; import org.apache.maven.wagon.TransferFailedException; -import org.apache.maven.wagon.authentication.AuthenticationInfo; import org.apache.maven.wagon.events.TransferListener; -import org.apache.maven.wagon.proxy.ProxyInfo; -import org.apache.maven.wagon.repository.RepositoryPermissions; +import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; /** * @author Jason van Zyl @@ -72,7 +68,10 @@ public class LegacyRepositorySystem @Requirement private WagonManager wagonManager; - + + @Requirement + private PlexusContainer plexus; + public Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type ) { return artifactFactory.createArtifact( groupId, artifactId, version, scope, type ); @@ -264,7 +263,53 @@ private ArtifactRepository createRepository( String url, String repositoryId, bo } public ArtifactResolutionResult resolve( ArtifactResolutionRequest request ) - { + { + /* + * Probably is not worth it, but here I make sure I restore request + * to its original state. + */ + try + { + LocalArtifactRepository ideWorkspace = plexus.lookup( LocalArtifactRepository.class, LocalArtifactRepository.IDE_WORKSPACE ); + + if ( request.getLocalRepository() instanceof DelegatingLocalArtifactRepository ) + { + DelegatingLocalArtifactRepository delegatingLocalRepository = (DelegatingLocalArtifactRepository) request.getLocalRepository(); + + LocalArtifactRepository orig = delegatingLocalRepository.getIdeWorspace(); + + delegatingLocalRepository.setIdeWorkspace( ideWorkspace ); + + try + { + return artifactResolver.resolve( request ); + } + finally + { + delegatingLocalRepository.setIdeWorkspace( orig ); + } + } + else + { + ArtifactRepository localRepository = request.getLocalRepository(); + DelegatingLocalArtifactRepository delegatingLocalRepository = new DelegatingLocalArtifactRepository( localRepository ); + delegatingLocalRepository.setIdeWorkspace( ideWorkspace ); + request.setLocalRepository( delegatingLocalRepository ); + try + { + return artifactResolver.resolve( request ); + } + finally + { + request.setLocalRepository( localRepository ); + } + } + } + catch ( ComponentLookupException e ) + { + // no ide workspace artifact resolution + } + return artifactResolver.resolve( request ); } diff --git a/maven-core/src/main/java/org/apache/maven/LocalArtifactRepository.java b/maven-repository/src/main/java/org/apache/maven/repository/LocalArtifactRepository.java similarity index 86% rename from maven-core/src/main/java/org/apache/maven/LocalArtifactRepository.java rename to maven-repository/src/main/java/org/apache/maven/repository/LocalArtifactRepository.java index 6b1900c49c..44b130865f 100644 --- a/maven-core/src/main/java/org/apache/maven/LocalArtifactRepository.java +++ b/maven-repository/src/main/java/org/apache/maven/repository/LocalArtifactRepository.java @@ -1,4 +1,4 @@ -package org.apache.maven; +package org.apache.maven.repository; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.repository.DefaultArtifactRepository; @@ -6,6 +6,8 @@ public abstract class LocalArtifactRepository extends DefaultArtifactRepository { + public static final String IDE_WORKSPACE = "ide-workspace"; + public abstract Artifact find( Artifact artifact ); /** diff --git a/maven-core/src/main/java/org/apache/maven/UserLocalArtifactRepository.java b/maven-repository/src/main/java/org/apache/maven/repository/UserLocalArtifactRepository.java similarity index 94% rename from maven-core/src/main/java/org/apache/maven/UserLocalArtifactRepository.java rename to maven-repository/src/main/java/org/apache/maven/repository/UserLocalArtifactRepository.java index 25ab384013..b456dd2814 100644 --- a/maven-core/src/main/java/org/apache/maven/UserLocalArtifactRepository.java +++ b/maven-repository/src/main/java/org/apache/maven/repository/UserLocalArtifactRepository.java @@ -1,11 +1,10 @@ -package org.apache.maven; +package org.apache.maven.repository; import java.io.File; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.DefaultArtifactRepository; public class UserLocalArtifactRepository extends LocalArtifactRepository