From 534b660b4eff841a7137e63a8e4bfa41c8c5e08f Mon Sep 17 00:00:00 2001 From: Britton Isbell Date: Mon, 29 Sep 2008 19:51:10 +0000 Subject: [PATCH] Removed extension scanner. It was tied up into the old model lineage code, which is very buggy. Needs to be reimplemented. git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@700226 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/maven/DefaultMaven.java | 15 - .../maven/errors/CoreErrorReporter.java | 7 - .../apache/maven/errors/CoreErrorTips.java | 8 - .../errors/DefaultCoreErrorReporter.java | 162 ----- .../errors/DefaultProjectErrorReporter.java | 18 - .../maven/errors/ProjectErrorReporter.java | 20 - .../apache/maven/errors/ProjectErrorTips.java | 9 - .../extension/BuildExtensionScanner.java | 43 -- .../DefaultBuildExtensionScanner.java | 485 --------------- .../extension/DefaultExtensionManager.java | 438 ------------- .../maven/extension/ExtensionManager.java | 56 -- .../extension/ExtensionManagerException.java | 195 ------ .../extension/ExtensionScanningException.java | 112 ---- .../ModelInterpolationException.java | 70 --- .../lineage/DefaultModelLineage.java | 446 -------------- .../lineage/DefaultModelLineageBuilder.java | 491 --------------- .../maven/extension/lineage/ModelLineage.java | 168 ----- .../lineage/ModelLineageBuilder.java | 64 -- .../lineage/ModelLineageIterator.java | 56 -- .../reactor/MavenExecutionException.java | 6 - .../resources/META-INF/plexus/components.xml | 22 - .../DefaultExtensionManagerTest.java | 311 ---------- .../lineage/AbstractModelLineageTest.java | 425 ------------- .../DefaultModelLineageBuilderTest.java | 580 ------------------ .../lineage/DefaultModelLineageTest.java | 31 - .../apache/maven/embedder/MavenEmbedder.java | 18 +- 26 files changed, 2 insertions(+), 4254 deletions(-) delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/BuildExtensionScanner.java delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/ExtensionManagerException.java delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/ExtensionScanningException.java delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/ModelInterpolationException.java delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/lineage/DefaultModelLineage.java delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/lineage/DefaultModelLineageBuilder.java delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineage.java delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineageBuilder.java delete mode 100644 maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineageIterator.java delete mode 100644 maven-core/src/test/java/org/apache/maven/extension/DefaultExtensionManagerTest.java delete mode 100644 maven-core/src/test/java/org/apache/maven/extension/lineage/AbstractModelLineageTest.java delete mode 100644 maven-core/src/test/java/org/apache/maven/extension/lineage/DefaultModelLineageBuilderTest.java delete mode 100644 maven-core/src/test/java/org/apache/maven/extension/lineage/DefaultModelLineageTest.java 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 6044041189..eb419d6846 100644 --- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java +++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java @@ -22,8 +22,6 @@ package org.apache.maven; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.apache.maven.execution.*; -import org.apache.maven.extension.BuildExtensionScanner; -import org.apache.maven.extension.ExtensionScanningException; import org.apache.maven.lifecycle.LifecycleExecutionException; import org.apache.maven.lifecycle.LifecycleExecutor; import org.apache.maven.lifecycle.TaskValidationResult; @@ -77,8 +75,6 @@ public class DefaultMaven protected RuntimeInformation runtimeInformation; - private BuildExtensionScanner buildExtensionScanner; - private Logger logger; // ---------------------------------------------------------------------- @@ -263,17 +259,6 @@ public class DefaultMaven e ); } - // TODO: We should probably do this discovery just-in-time, if we can move to building project - // instances just-in-time. - try - { - buildExtensionScanner.scanForBuildExtensions( files, request, false ); - } - catch ( ExtensionScanningException e ) - { - throw new MavenExecutionException( "Error scanning for extensions: " + e.getMessage(), e ); - } - projects = collectProjects( files, request, !request.useReactor() ); return projects; diff --git a/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java b/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java index 46701d1bbc..430e796758 100644 --- a/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java +++ b/maven-core/src/main/java/org/apache/maven/errors/CoreErrorReporter.java @@ -13,8 +13,6 @@ import org.apache.maven.artifact.versioning.ArtifactVersion; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenSession; -import org.apache.maven.extension.ExtensionManagerException; -import org.apache.maven.extension.ModelInterpolationException; import org.apache.maven.lifecycle.LifecycleException; import org.apache.maven.lifecycle.LifecycleLoaderException; import org.apache.maven.lifecycle.LifecycleSpecificationException; @@ -37,7 +35,6 @@ import org.apache.maven.project.DuplicateArtifactAttachmentException; import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuildingException; import org.apache.maven.project.artifact.InvalidDependencyVersionException; -import org.apache.maven.errors.ProjectErrorReporter; import org.apache.maven.path.PathTranslator; import org.apache.maven.reactor.MavenExecutionException; import org.apache.maven.reactor.MissingModuleException; @@ -69,14 +66,10 @@ public interface CoreErrorReporter void reportErrorFormulatingBuildPlan( List tasks, MavenProject project, MavenSession session, LifecycleException cause ); - void reportErrorInterpolatingModel( Model model, Map inheritedValues, File pomFile, MavenExecutionRequest request, ModelInterpolationException cause ); - void reportErrorLoadingPlugin( MojoBinding binding, MavenProject project, PluginLoaderException cause ); void reportErrorManagingRealmForExtension( Artifact extensionArtifact, Artifact projectArtifact, List remoteRepos, MavenExecutionRequest request, RealmManagementException cause ); - void reportErrorResolvingExtensionDependencies( Artifact extensionArtifact, Artifact projectArtifact, List remoteRepos, MavenExecutionRequest request, ArtifactResolutionResult resolutionResult, ExtensionManagerException err ); - void reportErrorResolvingExtensionDirectDependencies( Artifact extensionArtifact, Artifact projectArtifact, List remoteRepos, MavenExecutionRequest request, ArtifactMetadataRetrievalException cause ); void reportErrorSearchingforCompatibleExtensionPluginVersion( Plugin plugin, Model originModel, List remoteRepos, MavenExecutionRequest request, String requiredMavenVersion, String currentMavenVersion, InvalidVersionSpecificationException cause ); diff --git a/maven-core/src/main/java/org/apache/maven/errors/CoreErrorTips.java b/maven-core/src/main/java/org/apache/maven/errors/CoreErrorTips.java index 5d0130c3af..a7df5d9e66 100644 --- a/maven-core/src/main/java/org/apache/maven/errors/CoreErrorTips.java +++ b/maven-core/src/main/java/org/apache/maven/errors/CoreErrorTips.java @@ -1,7 +1,6 @@ package org.apache.maven.errors; import org.apache.maven.ProjectCycleException; -import org.apache.maven.extension.ModelInterpolationException; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException; import org.apache.maven.artifact.resolver.AbstractArtifactResolutionException; @@ -181,13 +180,6 @@ public final class CoreErrorTips return null; } - public static List getTipsForModelInterpolationError( Model model, - File pomFile, - ModelInterpolationException cause ) - { - // TODO Auto-generated method stub - return null; - } public static List getIncompatibleProjectMavenVersionPrereqTips( MavenProject project, ArtifactVersion mavenVersion ) diff --git a/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java b/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java index dd7407dbbc..496d7ee6fc 100644 --- a/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java +++ b/maven-core/src/main/java/org/apache/maven/errors/DefaultCoreErrorReporter.java @@ -9,14 +9,11 @@ import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException; import org.apache.maven.artifact.resolver.AbstractArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.resolver.ArtifactResolutionResult; -import org.apache.maven.artifact.resolver.CyclicDependencyException; import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException; import org.apache.maven.artifact.versioning.ArtifactVersion; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenSession; -import org.apache.maven.extension.ExtensionManagerException; import org.apache.maven.lifecycle.LifecycleException; import org.apache.maven.lifecycle.LifecycleLoaderException; import org.apache.maven.lifecycle.LifecycleSpecificationException; @@ -42,10 +39,6 @@ import org.apache.maven.project.DuplicateArtifactAttachmentException; import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuildingException; import org.apache.maven.project.artifact.InvalidDependencyVersionException; -import org.apache.maven.errors.DefaultProjectErrorReporter; -import org.apache.maven.errors.ProjectErrorReporter; -import org.apache.maven.errors.ProjectReporterManager; -import org.apache.maven.extension.ModelInterpolationException; import org.apache.maven.reactor.MavenExecutionException; import org.apache.maven.reactor.MissingModuleException; import org.apache.maven.realm.RealmManagementException; @@ -60,7 +53,6 @@ import java.io.File; import java.io.StringWriter; import java.util.HashMap; import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -844,26 +836,6 @@ public class DefaultCoreErrorReporter registerBuildError( exception, formattedMessage, reportedException ); } - public void reportErrorInterpolatingModel( Model model, - Map inheritedValues, - File pomFile, - MavenExecutionRequest request, - ModelInterpolationException cause ) - { - StringWriter writer = new StringWriter(); - - writer.write( NEWLINE ); - writer.write( "You have an invalid expression in your POM (interpolation failed):" ); - writer.write( NEWLINE ); - writer.write( cause.getMessage() ); - - writeProjectCoordinate( model, pomFile, writer ); - addTips( CoreErrorTips.getTipsForModelInterpolationError( model, pomFile, cause ), - writer ); - - registerBuildError( cause, writer.toString(), cause.getCause() ); - } - public void reportErrorResolvingExtensionDirectDependencies( Artifact extensionArtifact, Artifact projectArtifact, List remoteRepos, @@ -901,140 +873,6 @@ public class DefaultCoreErrorReporter registerBuildError( cause, writer.toString(), cause.getCause() ); } - public void reportErrorResolvingExtensionDependencies( Artifact extensionArtifact, - Artifact projectArtifact, - List remoteRepos, - MavenExecutionRequest request, - ArtifactResolutionResult resolutionResult, - ExtensionManagerException err ) - { - StringWriter writer = new StringWriter(); - - writer.write( NEWLINE ); - writer.write( "Maven encountered an error while trying to resolve the artifacts for a build extension used in your project." ); - writer.write( NEWLINE ); - writer.write( NEWLINE ); - writer.write( "Project:" ); - writeArtifactInfo( projectArtifact, writer, false ); - writer.write( NEWLINE ); - writer.write( NEWLINE ); - writer.write( "Extension:" ); - writeArtifactInfo( extensionArtifact, writer, false ); - writer.write( NEWLINE ); - writer.write( NEWLINE ); - - List missingArtifacts = resolutionResult.getMissingArtifacts(); - if ( ( missingArtifacts != null ) && !missingArtifacts.isEmpty() ) - { - writer.write( "The following artifacts were not found." ); - writer.write( NEWLINE ); - writer.write( "(Format is: groupId:artifactId:version:type[:classifier])" ); - writer.write( NEWLINE ); - - for ( Iterator it = missingArtifacts.iterator(); it.hasNext(); ) - { - Artifact artifact = (Artifact) it.next(); - writer.write( NEWLINE ); - writeCompactArtifactCoordinate( "- ", artifact, writer ); - } - writer.write( NEWLINE ); - writer.write( NEWLINE ); - } - - List circularDependencyExceptions = resolutionResult.getCircularDependencyExceptions(); - if ( ( circularDependencyExceptions != null ) && !circularDependencyExceptions.isEmpty() ) - { - writer.write( "The following dependency cycles were found." ); - writer.write( NEWLINE ); - writer.write( "(Format is: groupId:artifactId:version:type[:classifier]), followed by the dependency trail that included the offending artifact.)" ); - writer.write( NEWLINE ); - - int i = 1; - for ( Iterator it = circularDependencyExceptions.iterator(); it.hasNext(); ) - { - CyclicDependencyException cde = (CyclicDependencyException) it.next(); - Artifact artifact = cde.getArtifact(); - writer.write( NEWLINE ); - writeCompactArtifactCoordinate( i + ". ", artifact, writer ); - - List trail = artifact.getDependencyTrail(); - for ( Iterator trailIt = trail.iterator(); trailIt.hasNext(); ) - { - String id = (String) trailIt.next(); - writer.write( NEWLINE ); - writer.write( " - " ); - writer.write( id ); - } - - writer.write( NEWLINE ); - i++; - } - - writer.write( NEWLINE ); - } - - Map mapOfLists = new LinkedHashMap(); - - List metadataExceptions = resolutionResult.getMetadataResolutionExceptions(); - if ( ( metadataExceptions != null ) && !metadataExceptions.isEmpty() ) - { - mapOfLists.put( "The following metadata-resolution errors were found.", metadataExceptions ); - } - - List errorArtifactExceptions = resolutionResult.getErrorArtifactExceptions(); - if ( ( errorArtifactExceptions != null ) && !errorArtifactExceptions.isEmpty() ) - { - mapOfLists.put( "The following artifact-resolution errors were found.", errorArtifactExceptions ); - } - - List versionRangeViolations = resolutionResult.getVersionRangeViolations(); - if ( ( versionRangeViolations != null ) && !versionRangeViolations.isEmpty() ) - { - mapOfLists.put( "The following artifact version-range violations were found.", versionRangeViolations ); - } - - for ( Iterator entryIt = mapOfLists.entrySet().iterator(); entryIt.hasNext(); ) - { - Map.Entry entry = (Map.Entry) entryIt.next(); - String key = (String) entry.getKey(); - List exceptions = (List) entry.getValue(); - - writer.write( key ); - writer.write( NEWLINE ); - - int i = 1; - for ( Iterator it = exceptions.iterator(); it.hasNext(); ) - { - Exception e = (Exception) it.next(); - writer.write( NEWLINE ); - writer.write( i ); - writer.write( ". " ); - writer.write( e.getMessage() ); - - Throwable t = getRootCause( e ); - if ( ( t != null ) && ( t != e ) ) - { - writer.write( NEWLINE ); - writer.write( NEWLINE ); - writer.write( "Root error: " ); - writer.write( NEWLINE ); - writer.write( NEWLINE ); - writer.write( t.getMessage() ); - } - - writer.write( NEWLINE ); - i++; - } - - writer.write( NEWLINE ); - } - - addTips( CoreErrorTips.getErrorResolvingExtensionArtifactsTips( extensionArtifact, projectArtifact, resolutionResult ), - writer ); - - registerBuildError( err, writer.toString() ); - } - private void writeCompactArtifactCoordinate( String linePrefix, Artifact artifact, StringWriter writer ) diff --git a/maven-core/src/main/java/org/apache/maven/errors/DefaultProjectErrorReporter.java b/maven-core/src/main/java/org/apache/maven/errors/DefaultProjectErrorReporter.java index f0e7b4f24d..1fb028b069 100644 --- a/maven-core/src/main/java/org/apache/maven/errors/DefaultProjectErrorReporter.java +++ b/maven-core/src/main/java/org/apache/maven/errors/DefaultProjectErrorReporter.java @@ -21,7 +21,6 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuilderConfiguration; import org.apache.maven.project.artifact.InvalidDependencyVersionException; import org.apache.maven.project.ModelAndFile; -import org.apache.maven.extension.ModelInterpolationException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; @@ -416,23 +415,6 @@ public class DefaultProjectErrorReporter registerBuildError( cause, writer.toString() ); } - public void reportErrorInterpolatingModel( MavenProject project, - File pomFile, - ModelInterpolationException cause ) - { - StringWriter writer = new StringWriter(); - - writer.write( NEWLINE ); - writer.write( "You have an invalid expression in your POM (interpolation failed):" ); - writer.write( NEWLINE ); - writer.write( cause.getMessage() ); - - addStandardInfo( project.getId(), pomFile, writer ); - addTips( ProjectErrorTips.getTipsForProjectInterpolationError( project, pomFile, cause ), - writer ); - - registerBuildError( cause, writer.toString() ); - } public void reportProjectValidationFailure( MavenProject project, File pomFile, diff --git a/maven-core/src/main/java/org/apache/maven/errors/ProjectErrorReporter.java b/maven-core/src/main/java/org/apache/maven/errors/ProjectErrorReporter.java index 8bfd6a32cc..0da1c0c3ae 100644 --- a/maven-core/src/main/java/org/apache/maven/errors/ProjectErrorReporter.java +++ b/maven-core/src/main/java/org/apache/maven/errors/ProjectErrorReporter.java @@ -18,7 +18,6 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuilderConfiguration; import org.apache.maven.project.artifact.InvalidDependencyVersionException; import org.apache.maven.project.ModelAndFile; -import org.apache.maven.extension.ModelInterpolationException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; @@ -180,25 +179,6 @@ public interface ProjectErrorReporter Repository repo, InvalidRepositoryException cause ); - /** - * Call Stack: - *
- *
-     * ...
-     * --> DefaultMavenProjectBuilder.buildFromRepository(..)
-     *  DefaultMavenProjectBuilder.build(..)
-     * --> DefaultMavenProjectBuilder.buildFromSourceFileInternal(..) (private)
-     *     --> DefaultMavenProjectBuilder.buildInternal(..) (private)
-     *         --> DefaultMavenProjectBuilder.processProjectLogic(..) (private)
-     *             --> ModelInterpolator.interpolate(..)
-     *             <-- ModelInterpolationException
-     * <---------- ProjectBuildingException
-     * 
- */ - void reportErrorInterpolatingModel( MavenProject project, - File pomFile, - ModelInterpolationException cause ); - /** * Call Stack: *
diff --git a/maven-core/src/main/java/org/apache/maven/errors/ProjectErrorTips.java b/maven-core/src/main/java/org/apache/maven/errors/ProjectErrorTips.java index 212d35aec7..0b47a386af 100644 --- a/maven-core/src/main/java/org/apache/maven/errors/ProjectErrorTips.java +++ b/maven-core/src/main/java/org/apache/maven/errors/ProjectErrorTips.java @@ -11,7 +11,6 @@ import org.apache.maven.profiles.activation.ProfileActivator; import org.apache.maven.execution.DuplicateProjectException; import org.apache.maven.project.InvalidProjectVersionException; import org.apache.maven.project.MavenProject; -import org.apache.maven.extension.ModelInterpolationException; import org.apache.maven.project.validation.ModelValidationResult; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; @@ -126,14 +125,6 @@ public final class ProjectErrorTips return null; } - public static List getTipsForProjectInterpolationError( MavenProject project, - File pomFile, - ModelInterpolationException cause ) - { - // TODO Auto-generated method stub - return null; - } - public static List getTipsForPomParsingError( String projectId, File pomFile, Exception cause ) diff --git a/maven-core/src/main/java/org/apache/maven/extension/BuildExtensionScanner.java b/maven-core/src/main/java/org/apache/maven/extension/BuildExtensionScanner.java deleted file mode 100644 index 56f3cf4663..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/BuildExtensionScanner.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.apache.maven.extension; - -/* - * 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 org.apache.maven.execution.MavenExecutionRequest; -import org.apache.maven.reactor.MissingModuleException; - -import java.io.File; -import java.util.List; - -public interface BuildExtensionScanner -{ - - String ROLE = BuildExtensionScanner.class.getName(); - - void scanForBuildExtensions( List files, - MavenExecutionRequest request, - boolean ignoreMissingModules ) - throws ExtensionScanningException, MissingModuleException; - - void scanForBuildExtensions( File pom, - MavenExecutionRequest request, - boolean ignoreMissingModules ) - throws ExtensionScanningException, MissingModuleException; - -} diff --git a/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java b/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java deleted file mode 100644 index fe7aca1419..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java +++ /dev/null @@ -1,485 +0,0 @@ -package org.apache.maven.extension; - -/* - * 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 org.apache.maven.artifact.ArtifactUtils; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.execution.MavenExecutionRequest; -import org.apache.maven.model.Build; -import org.apache.maven.model.Extension; -import org.apache.maven.model.Model; -import org.apache.maven.model.Parent; -import org.apache.maven.model.Plugin; -import org.apache.maven.model.PluginManagement; -import org.apache.maven.profiles.ProfileManager; -import org.apache.maven.profiles.activation.DefaultProfileActivationContext; -import org.apache.maven.profiles.activation.ProfileActivationContext; -import org.apache.maven.project.MavenProject; -import org.apache.maven.project.MavenProjectBuilder; -import org.apache.maven.project.ProjectBuilderConfiguration; -import org.apache.maven.project.ProjectBuildingException; -import org.apache.maven.project.builder.PomClassicTransformer; -import org.apache.maven.project.builder.PomInterpolatorTag; -import org.apache.maven.extension.lineage.ModelLineage; -import org.apache.maven.extension.lineage.ModelLineageBuilder; -import org.apache.maven.extension.lineage.ModelLineageIterator; -import org.apache.maven.extension.ModelInterpolationException; -import org.apache.maven.reactor.MissingModuleException; -import org.apache.maven.shared.model.InterpolatorProperty; -import org.codehaus.plexus.logging.LogEnabled; -import org.codehaus.plexus.logging.Logger; -import org.codehaus.plexus.logging.console.ConsoleLogger; - -import java.io.File; -import java.io.IOException; -import java.util.*; -import java.text.SimpleDateFormat; - -public class DefaultBuildExtensionScanner - implements BuildExtensionScanner, LogEnabled -{ - - private Logger logger; - - private ExtensionManager extensionManager; - - private MavenProjectBuilder projectBuilder; - - private ModelLineageBuilder modelLineageBuilder; - - // cached. - private MavenProject basicSuperProject; - - public DefaultBuildExtensionScanner() - { - } - - public void scanForBuildExtensions( List files, - MavenExecutionRequest request, - boolean ignoreMissingModules ) - throws ExtensionScanningException, MissingModuleException - { - List visited = new ArrayList(); - - List internalFiles = new ArrayList(); - - internalFiles.addAll(files); - - for ( Iterator it = files.iterator(); it.hasNext(); ) - { - File pom = (File) it.next(); - - scanInternal( pom, request, visited, internalFiles, ignoreMissingModules ); - } - } - - public void scanForBuildExtensions( File pom, - MavenExecutionRequest request, - boolean ignoreMissingModules ) - throws ExtensionScanningException, MissingModuleException - { - List internalFiles = new ArrayList(); - - internalFiles.add( pom ); - - scanInternal( pom, request, new ArrayList(), internalFiles, ignoreMissingModules ); - } - - private void scanInternal( File pom, - MavenExecutionRequest request, - List visitedModelIds, - List reactorFiles, - boolean ignoreMissingModules ) - throws ExtensionScanningException, MissingModuleException - { - - try - { - List originalRemoteRepositories = getInitialRemoteRepositories( request.getProjectBuildingConfiguration() ); - - getLogger().debug( "Pre-scanning POM lineage of: " + pom + " for build extensions." ); - - ModelLineage lineage = buildModelLineage( pom, request.getProjectBuildingConfiguration(), originalRemoteRepositories ); - - Map inheritedInterpolationValues = new HashMap(); - - List inheritedRemoteRepositories = new ArrayList(); - - inheritedRemoteRepositories.addAll( originalRemoteRepositories ); - - Set managedPluginsWithExtensionsFlag = new HashSet(); - - for ( ModelLineageIterator lineageIterator = lineage.reversedLineageIterator(); lineageIterator.hasNext(); ) - { - Model model = (Model) lineageIterator.next(); - File modelPom = lineageIterator.getPOMFile(); - - List remoteRepos = lineageIterator.getArtifactRepositories(); - if ( ( remoteRepos != null ) && !remoteRepos.isEmpty() ) - { - inheritedRemoteRepositories.addAll( remoteRepos ); - } - - String key = createKey( model ); - - ProjectBuilderConfiguration config = request.getProjectBuildingConfiguration(); - Properties execProps = new Properties(); - if ( config.getExecutionProperties() != null ) - { - execProps.putAll( config.getExecutionProperties() ); - } - - if ( inheritedInterpolationValues != null ) - { - execProps.putAll( inheritedInterpolationValues ); - } - else - { - inheritedInterpolationValues = new HashMap(); - } - - config.setExecutionProperties( execProps ); - - //INTERPOLATION - List interpolatorProperties = new ArrayList(); - interpolatorProperties.addAll( InterpolatorProperty.toInterpolatorProperties( config.getExecutionProperties(), - PomInterpolatorTag.SYSTEM_PROPERTIES.name())); - interpolatorProperties.addAll( InterpolatorProperty.toInterpolatorProperties( config.getUserProperties(), - PomInterpolatorTag.USER_PROPERTIES.name())); - if(config.getBuildStartTime() != null) - { - interpolatorProperties.add(new InterpolatorProperty("${build.timestamp}", - new SimpleDateFormat("yyyyMMdd-hhmm").format( config.getBuildStartTime() ), - PomInterpolatorTag.PROJECT_PROPERTIES.name())); - } - - - model = PomClassicTransformer.interpolateModel( model, interpolatorProperties, modelPom.getParentFile()); - - grabManagedPluginsWithExtensionsFlagTurnedOn( model, managedPluginsWithExtensionsFlag ); - - Properties modelProps = model.getProperties(); - if ( modelProps != null ) - { - inheritedInterpolationValues.putAll( modelProps ); - } - - if ( visitedModelIds.contains( key ) ) - { - getLogger().debug( "Already visited: " + key + "; continuing." ); - continue; - } - - visitedModelIds.add( key ); - - getLogger().debug( - "Checking: " + model.getId() + " for extensions. (It has " - + model.getModules().size() + " modules.)" ); - - checkModelBuildForExtensions( model, request, inheritedRemoteRepositories, managedPluginsWithExtensionsFlag ); - - if ( !reactorFiles.contains( modelPom ) ) - { - getLogger().debug( - "POM: " + modelPom - + " is not in the current reactor. Its modules will not be scanned." ); - } - else if ( request.isRecursive() ) - { - checkModulesForExtensions( modelPom, - model, - request, - originalRemoteRepositories, - visitedModelIds, - reactorFiles, - ignoreMissingModules ); - } - } - } - catch ( IOException e ) - { - throw new ExtensionScanningException( "Failed to interpolate model from: " + pom - + " prior to scanning for extensions.", pom, new ModelInterpolationException(e.getMessage()) ); - } - } - - - private void grabManagedPluginsWithExtensionsFlagTurnedOn( Model model, - Set managedPluginsWithExtensionsFlag ) - { - Build build = model.getBuild(); - if ( build != null ) - { - PluginManagement pluginManagement = build.getPluginManagement(); - if ( pluginManagement != null ) - { - List plugins = pluginManagement.getPlugins(); - if ( ( plugins != null ) && !plugins.isEmpty() ) - { - for ( Iterator it = plugins.iterator(); it.hasNext(); ) - { - Plugin plugin = (Plugin) it.next(); - if ( plugin.isExtensions() ) - { - managedPluginsWithExtensionsFlag.add( plugin.getKey() ); - } - } - } - } - } - } - - private String createKey( Model model ) - { - Parent parent = model.getParent(); - - String groupId = model.getGroupId(); - if ( groupId == null ) - { - groupId = parent.getGroupId(); - } - - String artifactId = model.getArtifactId(); - - return groupId + ":" + artifactId; - } - - private void checkModulesForExtensions( File containingPom, - Model model, - MavenExecutionRequest request, - List originalRemoteRepositories, - List visitedModelIds, - List reactorFiles, - boolean ignoreMissingModules ) - throws ExtensionScanningException, MissingModuleException - { - // FIXME: This gets a little sticky, because modules can be added by profiles that require - // an extension in place before they can be activated. - List modules = model.getModules(); - - if ( modules != null ) - { - File basedir = containingPom.getParentFile(); - getLogger().debug( "Basedir is: " + basedir ); - - for ( Iterator it = modules.iterator(); it.hasNext(); ) - { - // TODO: change this if we ever find a way to replace module definitions with g:a:v - String moduleSubpath = (String) it.next(); - - getLogger().debug( "Scanning module: " + moduleSubpath ); - - File modulePomDirectory; - - try - { - modulePomDirectory = new File( basedir, moduleSubpath ).getCanonicalFile(); - - // ---------------------------------------------------------------------------- - // We need to make sure we don't loop infinitely in the case where we have - // something like: - // - // - // ../MNGECLIPSE-256web - // ../MNGECLIPSE-256utility - // - // - // Where once we walk into the first module it will just get its parent dir - // containing its POM over and over again unless we make a comparison to - // basedir and the modulePomDirectory. - // ---------------------------------------------------------------------------- - - if ( modulePomDirectory.equals( basedir.getCanonicalFile() ) ) - { - break; - } - } - catch ( IOException e ) - { - throw new ExtensionScanningException( "Error getting canonical path for modulePomDirectory.", containingPom, moduleSubpath, e ); - } - - if ( modulePomDirectory.isDirectory() ) - { - getLogger().debug( - "Assuming POM file 'pom.xml' in module: " + moduleSubpath + " under basedir: " - + basedir ); - modulePomDirectory = new File( modulePomDirectory, "pom.xml" ); - } - - if ( !modulePomDirectory.exists() ) - { - if ( ignoreMissingModules ) - { - continue; - } - else - { - throw new MissingModuleException( moduleSubpath, modulePomDirectory, containingPom ); - } - } - - reactorFiles.add( modulePomDirectory ); - - scanInternal( modulePomDirectory, request, visitedModelIds, reactorFiles, ignoreMissingModules ); - } - } - } - - private void checkModelBuildForExtensions( Model model, - MavenExecutionRequest request, - List remoteRepositories, - Set managedPluginsWithExtensionsFlag ) - throws ExtensionScanningException - { - getLogger().debug( "Checking " + model.getId() + " for extensions." ); - - Build build = model.getBuild(); - - if ( build != null ) - { - List extensions = build.getExtensions(); - - if ( ( extensions != null ) && !extensions.isEmpty() ) - { - // thankfully, we don't have to deal with dependencyManagement here, yet. - // TODO Revisit if/when extensions are made to use the info in dependencyManagement - for ( Iterator extensionIterator = extensions.iterator(); extensionIterator.hasNext(); ) - { - Extension extension = (Extension) extensionIterator.next(); - - getLogger().debug( - "Adding extension: " - + ArtifactUtils.versionlessKey( extension.getGroupId(), extension - .getArtifactId() ) + " from model: " + model.getId() ); - - try - { - extensionManager.addExtension( extension, model, remoteRepositories, request ); - } - catch ( ExtensionManagerException e ) - { - throw new ExtensionScanningException( "Cannot resolve pre-scanned extension artifact: " - + extension.getGroupId() + ":" + extension.getArtifactId() + ": " + e.getMessage(), model, extension, e ); - } - } - } - - List plugins = build.getPlugins(); - - if ( ( plugins != null ) && !plugins.isEmpty() ) - { - for ( Iterator extensionIterator = plugins.iterator(); extensionIterator.hasNext(); ) - { - Plugin plugin = (Plugin) extensionIterator.next(); - - if ( plugin.isExtensions() || managedPluginsWithExtensionsFlag.contains( plugin.getKey() ) ) - { - getLogger().debug( "Adding plugin: " + plugin.getKey() + " as an extension(from model: " + model.getId() + ")" ); - - try - { - extensionManager.addPluginAsExtension( plugin, model, remoteRepositories, request ); - } - catch ( ExtensionManagerException e ) - { - throw new ExtensionScanningException( "Cannot resolve pre-scanned plugin artifact (for use as an extension): " - + plugin.getKey() + ": " + e.getMessage(), model, plugin, e ); - } - } - } - } - } - } - - private ModelLineage buildModelLineage( File pom, ProjectBuilderConfiguration config, - List originalRemoteRepositories ) - throws ExtensionScanningException - { - ProfileManager profileManager = config.getGlobalProfileManager(); - - ProfileActivationContext profileActivationContext = profileManager == null - ? new DefaultProfileActivationContext( config.getExecutionProperties(), false ) - : profileManager.getProfileActivationContext(); - - boolean suppressActivatorFailure = profileActivationContext.isCustomActivatorFailureSuppressed(); - - ModelLineage lineage; - try - { - getLogger().debug( "Building model-lineage for: " + pom + " to pre-scan for extensions." ); - - // NOTE: We're assuming that this scan happens only for local filesystem POMs, - // not for POMs from the repository...otherwise, we would need to be more careful with - // the last parameter here and determine whether it's appropriate for the POM to have - // an accompanying profiles.xml file. - profileActivationContext.setCustomActivatorFailureSuppressed( true ); - - lineage = modelLineageBuilder.buildModelLineage( pom, config, originalRemoteRepositories, false, true ); - } - catch ( ProjectBuildingException e ) - { - throw new ExtensionScanningException( "Error building model lineage in order to pre-scan for extensions: " - + e.getMessage(), pom, e ); - } - finally - { - profileActivationContext.setCustomActivatorFailureSuppressed( suppressActivatorFailure ); - } - - return lineage; - } - - private List getInitialRemoteRepositories( ProjectBuilderConfiguration config ) - throws ExtensionScanningException - { - if ( basicSuperProject == null ) - { - try - { - basicSuperProject = projectBuilder.buildStandaloneSuperProject( config ); - } - catch ( ProjectBuildingException e ) - { - throw new ExtensionScanningException( - "Error building super-POM for retrieving the default remote repository list: " - + e.getMessage(), e ); - } - } - - return basicSuperProject.getRemoteArtifactRepositories(); - } - - protected Logger getLogger() - { - if ( logger == null ) - { - logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "DefaultBuildExtensionScanner:internal" ); - } - - return logger; - } - - public void enableLogging( Logger logger ) - { - this.logger = logger; - } - -} diff --git a/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java b/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java deleted file mode 100644 index 9e606c3957..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java +++ /dev/null @@ -1,438 +0,0 @@ -package org.apache.maven.extension; - -/* - * 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 org.apache.maven.ArtifactFilterManager; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.ArtifactUtils; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.manager.WagonManager; -import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException; -import org.apache.maven.artifact.metadata.ArtifactMetadataSource; -import org.apache.maven.artifact.metadata.ResolutionGroup; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.resolver.ArtifactResolutionRequest; -import org.apache.maven.artifact.resolver.ArtifactResolutionResult; -import org.apache.maven.artifact.resolver.ArtifactResolver; -import org.apache.maven.artifact.resolver.filter.ArtifactFilter; -import org.apache.maven.execution.MavenExecutionRequest; -import org.apache.maven.execution.MavenSession; -import org.apache.maven.model.Extension; -import org.apache.maven.model.Model; -import org.apache.maven.model.Parent; -import org.apache.maven.model.Plugin; -import org.apache.maven.monitor.event.DefaultEventDispatcher; -import org.apache.maven.monitor.event.EventDispatcher; -import org.apache.maven.plugin.InvalidPluginException; -import org.apache.maven.plugin.PluginManager; -import org.apache.maven.plugin.PluginManagerException; -import org.apache.maven.plugin.PluginNotFoundException; -import org.apache.maven.plugin.descriptor.PluginDescriptor; -import org.apache.maven.plugin.version.PluginVersionNotFoundException; -import org.apache.maven.plugin.version.PluginVersionResolutionException; -import org.apache.maven.project.MavenProject; -import org.apache.maven.realm.MavenRealmManager; -import org.apache.maven.realm.RealmManagementException; -import org.apache.maven.realm.RealmUtils; -import org.codehaus.plexus.MutablePlexusContainer; -import org.codehaus.plexus.PlexusConstants; -import org.codehaus.plexus.context.Context; -import org.codehaus.plexus.context.ContextException; -import org.codehaus.plexus.logging.AbstractLogEnabled; -import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -/** - * Used to locate extensions. - * - * @author Brett Porter - * @author Jason van Zyl - * @version $Id$ - */ -public class DefaultExtensionManager - extends AbstractLogEnabled - implements ExtensionManager, Contextualizable -{ - private ArtifactFactory artifactFactory; - - private ArtifactResolver artifactResolver; - - private ArtifactMetadataSource artifactMetadataSource; - - private MutablePlexusContainer container; - - private ArtifactFilterManager artifactFilterManager; - - private WagonManager wagonManager; - - private PluginManager pluginManager; - - // used for unit testing. - protected DefaultExtensionManager( ArtifactFactory artifactFactory, - ArtifactResolver artifactResolver, - ArtifactMetadataSource artifactMetadataSource, - MutablePlexusContainer container, - ArtifactFilterManager artifactFilterManager, - WagonManager wagonManager ) - { - this.artifactFactory = artifactFactory; - this.artifactResolver = artifactResolver; - this.artifactMetadataSource = artifactMetadataSource; - this.container = container; - this.artifactFilterManager = artifactFilterManager; - this.wagonManager = wagonManager; - } - - public DefaultExtensionManager() - { - // used for plexus init. - } - - public void addExtension( Extension extension, - Model originatingModel, - List remoteRepositories, - MavenExecutionRequest request ) - throws ExtensionManagerException - { - Artifact extensionArtifact = artifactFactory.createBuildArtifact( extension.getGroupId(), - extension.getArtifactId(), - extension.getVersion(), "jar" ); - - Parent originatingParent = originatingModel.getParent(); - - String groupId = originatingModel.getGroupId(); - - if ( ( groupId == null ) && ( originatingParent != null ) ) - { - groupId = originatingParent.getGroupId(); - } - - String artifactId = originatingModel.getArtifactId(); - - String version = originatingModel.getVersion(); - - if ( ( version == null ) && ( originatingParent != null ) ) - { - version = originatingParent.getVersion(); - } - - Artifact projectArtifact = artifactFactory.createProjectArtifact( groupId, artifactId, version ); - - addExtension( extensionArtifact, - projectArtifact, - remoteRepositories, - request, - null, - groupId, - artifactId, - version ); - } - - public void addPluginAsExtension( Plugin plugin, - Model originatingModel, - List remoteRepositories, - MavenExecutionRequest request ) - throws ExtensionManagerException - { - getLogger().debug( "Adding plugin: " + plugin.getKey() + " as an extension." ); - - Parent originatingParent = originatingModel.getParent(); - - String groupId = originatingModel.getGroupId(); - - if ( ( groupId == null ) && ( originatingParent != null ) ) - { - groupId = originatingParent.getGroupId(); - } - - String artifactId = originatingModel.getArtifactId(); - - String version = originatingModel.getVersion(); - - if ( ( version == null ) && ( originatingParent != null ) ) - { - version = originatingParent.getVersion(); - } - - String pluginVersion = plugin.getVersion(); - - // TODO: Forbid this? - if ( pluginVersion == null ) - { - pluginVersion = Artifact.RELEASE_VERSION; - } - - Artifact pluginArtifact = artifactFactory.createBuildArtifact( plugin.getGroupId(), - plugin.getArtifactId(), - pluginVersion, "maven-plugin" ); - - getLogger().debug( "Starting extension-addition process for: " + pluginArtifact ); - - ArtifactFilter coreFilter = artifactFilterManager.getArtifactFilter(); - MavenRealmManager realmManager = request.getRealmManager(); - - // if the extension is null, - // or if it's excluded by the core filter, - // - // skip it. - if ( ( pluginArtifact != null ) - && coreFilter.include( pluginArtifact ) ) - { - MavenProject dummyProject = new MavenProject( originatingModel ); - - dummyProject.setRemoteArtifactRepositories( remoteRepositories ); - - EventDispatcher dispatcher = new DefaultEventDispatcher( request.getEventMonitors() ); - MavenSession session = new MavenSession( container, request, dispatcher, null ); - - PluginDescriptor pd; - try - { - pd = pluginManager.verifyPlugin( plugin, dummyProject, session ); - pluginArtifact = pd.getPluginArtifact(); - } - catch ( ArtifactResolutionException e ) - { - throw new ExtensionManagerException( "Failed to resolve extension plugin: " + pluginArtifact, pluginArtifact, groupId, artifactId, version, e ); - } - catch ( ArtifactNotFoundException e ) - { - throw new ExtensionManagerException( "Failed to resolve extension plugin: " + pluginArtifact, pluginArtifact, groupId, artifactId, version, e ); - } - catch ( PluginNotFoundException e ) - { - throw new ExtensionManagerException( "Failed to resolve extension plugin: " + pluginArtifact, pluginArtifact, groupId, artifactId, version, e ); - } - catch ( PluginVersionResolutionException e ) - { - throw new ExtensionManagerException( "Failed to resolve extension plugin: " + pluginArtifact, pluginArtifact, groupId, artifactId, version, e ); - } - catch ( InvalidPluginException e ) - { - throw new ExtensionManagerException( "Failed to resolve extension plugin: " + pluginArtifact, pluginArtifact, groupId, artifactId, version, e ); - } - catch ( PluginManagerException e ) - { - throw new ExtensionManagerException( "Failed to resolve extension plugin: " + pluginArtifact, pluginArtifact, groupId, artifactId, version, e ); - } - catch ( PluginVersionNotFoundException e ) - { - throw new ExtensionManagerException( "Failed to resolve extension plugin: " + pluginArtifact, pluginArtifact, groupId, artifactId, version, e ); - } - - if ( !realmManager.hasExtensionRealm( pluginArtifact ) ) - { - try - { - realmManager.createExtensionRealm( pluginArtifact, pd.getArtifacts() ); - } - catch ( RealmManagementException e ) - { - String projectId = RealmUtils.createProjectId( groupId, artifactId, version ); - throw new ExtensionManagerException( "Unable to create extension ClassRealm for extension: " + pluginArtifact.getId() + " within session for project: " + projectId, pluginArtifact, groupId, artifactId, version, e ); - } - } - - try - { - realmManager.importExtensionsIntoProjectRealm( groupId, artifactId, version, pluginArtifact ); - } - catch ( RealmManagementException e ) - { - throw new ExtensionManagerException( "Unable to import extension components into project realm.", pluginArtifact, groupId, artifactId, version, e ); - } - } - } - - public void addExtension( Extension extension, - MavenProject project, - MavenExecutionRequest request ) - throws ExtensionManagerException - { - String extensionId = ArtifactUtils.versionlessKey( extension.getGroupId(), extension.getArtifactId() ); - - getLogger().debug( "Initialising extension: " + extensionId ); - - Artifact artifact = (Artifact) project.getExtensionArtifactMap().get( extensionId ); - - addExtension( artifact, - project.getArtifact(), - project.getRemoteArtifactRepositories(), - request, - new ActiveArtifactResolver( project ), - project.getGroupId(), - project.getArtifactId(), - project.getVersion() ); - } - - private void addExtension( Artifact extensionArtifact, - Artifact projectArtifact, - List remoteRepositories, - MavenExecutionRequest request, - ActiveArtifactResolver activeArtifactResolver, - String projectGroupId, - String projectArtifactId, - String projectVersion ) - throws ExtensionManagerException - { - getLogger().debug( "Starting extension-addition process for: " + extensionArtifact ); - - ArtifactFilter coreFilter = artifactFilterManager.getArtifactFilter(); - MavenRealmManager realmManager = request.getRealmManager(); - - // if the extension is null, - // or if it's excluded by the core filter, - // - // skip it. - if ( ( extensionArtifact != null ) - && coreFilter.include( extensionArtifact ) ) - { - ArtifactFilter filter = - new ProjectArtifactExceptionFilter( coreFilter, projectArtifact ); - - ResolutionGroup resolutionGroup; - - ArtifactRepository localRepository = request.getLocalRepository(); - - try - { - resolutionGroup = artifactMetadataSource.retrieve( extensionArtifact, localRepository, remoteRepositories ); - } - catch ( ArtifactMetadataRetrievalException e ) - { - throw new ExtensionManagerException( "Unable to download metadata from repository for extension artifact '" + - extensionArtifact.getId() + "': " + e.getMessage(), extensionArtifact, projectGroupId, projectArtifactId, projectVersion, e ); - } - - Set dependencies = new LinkedHashSet(); - - dependencies.add( extensionArtifact ); - dependencies.addAll( resolutionGroup.getArtifacts() ); - - ArtifactResolutionRequest dependencyReq = new ArtifactResolutionRequest().setArtifact( projectArtifact ) - .setArtifactDependencies( dependencies ) - .setFilter( filter ) - .setLocalRepository( localRepository ) - .setRemoteRepostories( remoteRepositories ) - .setMetadataSource( artifactMetadataSource ); - - // TODO: Make this work with managed dependencies, or an analogous management section in the POM. - ArtifactResolutionResult result = artifactResolver.resolve( dependencyReq ); - - if ( result.hasCircularDependencyExceptions() || result.hasErrorArtifactExceptions() - || result.hasMetadataResolutionExceptions() || result.hasVersionRangeViolations() ) - { - throw new ExtensionManagerException( "Failed to resolve extension: " + extensionArtifact, extensionArtifact, projectGroupId, projectArtifactId, projectVersion, result ); - } - - Set resultArtifacts = new LinkedHashSet(); - for ( Iterator iterator = result.getArtifacts().iterator(); iterator.hasNext(); ) - { - Artifact a = (Artifact) iterator.next(); - - - if ( activeArtifactResolver != null ) - { - a = activeArtifactResolver.replaceWithActiveArtifact( a ); - } - - getLogger().debug( "Adding: " + a.getFile() + " to classpath for extension: " + extensionArtifact.getId() ); - resultArtifacts.add( a ); - } - - if ( !realmManager.hasExtensionRealm( extensionArtifact ) ) - { - try - { - realmManager.createExtensionRealm( extensionArtifact, new ArrayList( resultArtifacts ) ); - } - catch ( RealmManagementException e ) - { - String projectId = RealmUtils.createProjectId( projectGroupId, projectArtifactId, projectVersion ); - throw new ExtensionManagerException( "Unable to create extension ClassRealm for extension: " + extensionArtifact.getId() + " within session for project: " + projectId, extensionArtifact, projectGroupId, projectArtifactId, projectVersion, e ); - } - } - - try - { - realmManager.importExtensionsIntoProjectRealm( projectGroupId, projectArtifactId, projectVersion, extensionArtifact ); - } - catch ( RealmManagementException e ) - { - throw new ExtensionManagerException( "Unable to import extension components into project realm.", extensionArtifact, projectGroupId, projectArtifactId, projectVersion, e ); - } - } - } - - public void registerWagons() - { - wagonManager.findAndRegisterWagons( container ); - } - - public void contextualize( Context context ) - throws ContextException - { - container = (MutablePlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); - } - - private static final class ActiveArtifactResolver - { - private MavenProject project; - - ActiveArtifactResolver( MavenProject project ) - { - this.project = project; - } - - Artifact replaceWithActiveArtifact( Artifact artifact ) - { - return project.replaceWithActiveArtifact( artifact ); - } - } - - private static final class ProjectArtifactExceptionFilter - implements ArtifactFilter - { - private ArtifactFilter passThroughFilter; - - private String projectDependencyConflictId; - - ProjectArtifactExceptionFilter( ArtifactFilter passThroughFilter, - Artifact projectArtifact ) - { - this.passThroughFilter = passThroughFilter; - projectDependencyConflictId = projectArtifact.getDependencyConflictId(); - } - - public boolean include( Artifact artifact ) - { - String depConflictId = artifact.getDependencyConflictId(); - - return projectDependencyConflictId.equals( depConflictId ) || passThroughFilter.include( artifact ); - } - } -} diff --git a/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java b/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java deleted file mode 100644 index e47653d9f6..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/ExtensionManager.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.apache.maven.extension; - -/* - * 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 org.apache.maven.execution.MavenExecutionRequest; -import org.apache.maven.model.Extension; -import org.apache.maven.model.Model; -import org.apache.maven.model.Plugin; -import org.apache.maven.project.MavenProject; - -import java.util.List; - -/** - * Used to locate extensions. - * - * @author Brett Porter - * @version $Id$ - */ -public interface ExtensionManager -{ - void addExtension( Extension extension, - MavenProject project, - MavenExecutionRequest request ) - throws ExtensionManagerException; - - void registerWagons(); - - void addExtension( Extension extension, - Model originatingModel, - List remoteRepositories, - MavenExecutionRequest request ) - throws ExtensionManagerException; - - void addPluginAsExtension( Plugin plugin, - Model originatingModel, - List remoteRepositories, - MavenExecutionRequest request ) - throws ExtensionManagerException; -} diff --git a/maven-core/src/main/java/org/apache/maven/extension/ExtensionManagerException.java b/maven-core/src/main/java/org/apache/maven/extension/ExtensionManagerException.java deleted file mode 100644 index 78023517dc..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/ExtensionManagerException.java +++ /dev/null @@ -1,195 +0,0 @@ -package org.apache.maven.extension; - -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.resolver.ArtifactResolutionResult; -import org.apache.maven.plugin.InvalidPluginException; -import org.apache.maven.plugin.PluginManagerException; -import org.apache.maven.plugin.PluginNotFoundException; -import org.apache.maven.plugin.version.PluginVersionNotFoundException; -import org.apache.maven.plugin.version.PluginVersionResolutionException; -import org.apache.maven.realm.RealmManagementException; - -public class ExtensionManagerException - extends Exception -{ - - private Artifact extensionArtifact; - - private ArtifactResolutionResult resolutionResult; - - private String projectGroupId; - - private String projectArtifactId; - - private String projectVersion; - - public ExtensionManagerException( String message, - Artifact extensionArtifact, - String projectGroupId, - String projectArtifactId, - String projectVersion, - ArtifactMetadataRetrievalException cause ) - { - super( message, cause ); - this.extensionArtifact = extensionArtifact; - this.projectGroupId = projectGroupId; - this.projectArtifactId = projectArtifactId; - this.projectVersion = projectVersion; - } - - public ExtensionManagerException( String message, - Artifact extensionArtifact, - String projectGroupId, - String projectArtifactId, - String projectVersion, - ArtifactResolutionResult result ) - { - super( message ); - this.extensionArtifact = extensionArtifact; - this.projectGroupId = projectGroupId; - this.projectArtifactId = projectArtifactId; - this.projectVersion = projectVersion; - resolutionResult = result; - } - - public ExtensionManagerException( String message, - Artifact extensionArtifact, - String projectGroupId, - String projectArtifactId, - String projectVersion, - RealmManagementException cause ) - { - super( message, cause ); - this.extensionArtifact = extensionArtifact; - this.projectGroupId = projectGroupId; - this.projectArtifactId = projectArtifactId; - this.projectVersion = projectVersion; - } - - public ExtensionManagerException( String message, - Artifact extensionArtifact, - String projectGroupId, - String projectArtifactId, - String projectVersion, - ArtifactResolutionException cause ) - { - super( message, cause ); - this.extensionArtifact = extensionArtifact; - this.projectGroupId = projectGroupId; - this.projectArtifactId = projectArtifactId; - this.projectVersion = projectVersion; - } - - public ExtensionManagerException( String message, - Artifact extensionArtifact, - String projectGroupId, - String projectArtifactId, - String projectVersion, - ArtifactNotFoundException cause ) - { - super( message, cause ); - this.extensionArtifact = extensionArtifact; - this.projectGroupId = projectGroupId; - this.projectArtifactId = projectArtifactId; - this.projectVersion = projectVersion; - } - - public ExtensionManagerException( String message, - Artifact extensionArtifact, - String projectGroupId, - String projectArtifactId, - String projectVersion, - PluginNotFoundException cause ) - { - super( message, cause ); - this.extensionArtifact = extensionArtifact; - this.projectGroupId = projectGroupId; - this.projectArtifactId = projectArtifactId; - this.projectVersion = projectVersion; - } - - public ExtensionManagerException( String message, - Artifact extensionArtifact, - String projectGroupId, - String projectArtifactId, - String projectVersion, - PluginVersionResolutionException cause ) - { - super( message, cause ); - this.extensionArtifact = extensionArtifact; - this.projectGroupId = projectGroupId; - this.projectArtifactId = projectArtifactId; - this.projectVersion = projectVersion; - } - - public ExtensionManagerException( String message, - Artifact extensionArtifact, - String projectGroupId, - String projectArtifactId, - String projectVersion, - InvalidPluginException cause ) - { - super( message, cause ); - this.extensionArtifact = extensionArtifact; - this.projectGroupId = projectGroupId; - this.projectArtifactId = projectArtifactId; - this.projectVersion = projectVersion; - } - - public ExtensionManagerException( String message, - Artifact extensionArtifact, - String projectGroupId, - String projectArtifactId, - String projectVersion, - PluginManagerException cause ) - { - super( message, cause ); - this.extensionArtifact = extensionArtifact; - this.projectGroupId = projectGroupId; - this.projectArtifactId = projectArtifactId; - this.projectVersion = projectVersion; - } - - public ExtensionManagerException( String message, - Artifact extensionArtifact, - String projectGroupId, - String projectArtifactId, - String projectVersion, - PluginVersionNotFoundException cause ) - { - super( message, cause ); - this.extensionArtifact = extensionArtifact; - this.projectGroupId = projectGroupId; - this.projectArtifactId = projectArtifactId; - this.projectVersion = projectVersion; - } - - public Artifact getExtensionArtifact() - { - return extensionArtifact; - } - - public String getProjectGroupId() - { - return projectGroupId; - } - - public String getProjectArtifactId() - { - return projectArtifactId; - } - - public String getProjectVersion() - { - return projectVersion; - } - - public ArtifactResolutionResult getArtifactResolutionResult() - { - return resolutionResult; - } - -} diff --git a/maven-core/src/main/java/org/apache/maven/extension/ExtensionScanningException.java b/maven-core/src/main/java/org/apache/maven/extension/ExtensionScanningException.java deleted file mode 100644 index 2ab666057f..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/ExtensionScanningException.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.apache.maven.extension; - -import org.apache.maven.model.Extension; -import org.apache.maven.model.Model; -import org.apache.maven.model.Plugin; -import org.apache.maven.project.ProjectBuildingException; -import org.apache.maven.extension.ModelInterpolationException; - -import java.io.File; -import java.io.IOException; - -/* - * 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. - */ - -public class ExtensionScanningException - extends Exception -{ - - private File pomFile; - private String extensionId; - private String modelId; - private String moduleSubpath; - - public ExtensionScanningException( String message, - File pomFile, - ProjectBuildingException cause ) - { - super( message, cause ); - this.pomFile = pomFile; - } - - public ExtensionScanningException( String message, - Model model, - Extension extension, - ExtensionManagerException cause ) - { - super( message, cause ); - modelId = model.getId(); - extensionId = extension.getGroupId() + ":" + extension.getArtifactId(); - } - - public ExtensionScanningException( String message, - ProjectBuildingException cause ) - { - super( message, cause ); - } - - public ExtensionScanningException( String message, - File pomFile, - String moduleSubpath, - IOException cause ) - { - super( message, cause ); - this.pomFile = pomFile; - this.moduleSubpath = moduleSubpath; - } - - public ExtensionScanningException( String message, - File pomFile, - ModelInterpolationException cause ) - { - super( message, cause ); - this.pomFile = pomFile; - } - - public ExtensionScanningException( String message, - Model model, - Plugin plugin, - ExtensionManagerException cause ) - { - super( message, cause ); - modelId = model.getId(); - extensionId = plugin.getGroupId() + ":" + plugin.getArtifactId(); - } - - public File getPomFile() - { - return pomFile; - } - - public String getExtensionId() - { - return extensionId; - } - - public String getModelId() - { - return modelId; - } - - public String getModuleSubpath() - { - return moduleSubpath; - } - -} diff --git a/maven-core/src/main/java/org/apache/maven/extension/ModelInterpolationException.java b/maven-core/src/main/java/org/apache/maven/extension/ModelInterpolationException.java deleted file mode 100644 index a0bc0f9cf6..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/ModelInterpolationException.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.apache.maven.extension; - -/* - * 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. - */ - -/** - * @author jdcasey - *

- * Created on Feb 2, 2005 - */ -public class ModelInterpolationException - extends Exception -{ - private String expression; - - private String originalMessage; - - public ModelInterpolationException( String message ) - { - super( message ); - } - - public ModelInterpolationException( String message, Throwable cause ) - { - super( message, cause ); - } - - public ModelInterpolationException( String expression, String message, Throwable cause ) - { - super( "The POM expression: " + expression + " could not be evaluated. Reason: " + message, cause ); - - this.expression = expression; - this.originalMessage = message; - } - - public ModelInterpolationException( String expression, String message ) - { - super( "The POM expression: " + expression + " could not be evaluated. Reason: " + message ); - - this.expression = expression; - this.originalMessage = message; - } - - public String getExpression() - { - return expression; - } - - public String getOriginalMessage() - { - return originalMessage; - } - -} \ No newline at end of file diff --git a/maven-core/src/main/java/org/apache/maven/extension/lineage/DefaultModelLineage.java b/maven-core/src/main/java/org/apache/maven/extension/lineage/DefaultModelLineage.java deleted file mode 100644 index dbf9f14fdc..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/lineage/DefaultModelLineage.java +++ /dev/null @@ -1,446 +0,0 @@ -package org.apache.maven.extension.lineage; - -/* - * 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 org.apache.maven.model.Model; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -/** - * @see ModelLineage - */ -public class DefaultModelLineage - implements ModelLineage -{ - - private List tuples = new ArrayList(); - - /** - * @see ModelLineage#addParent(org.apache.maven.model.Model, java.io.File, java.util.List) - */ - public void addParent( Model model, File pomFile, List artifactRepositories, boolean validProfilesXmlLocation ) - { - if ( tuples.isEmpty() ) - { - throw new IllegalStateException( "You must call setOrigin(..) before adding a parent to the lineage." ); - } - - tuples.add( new ModelLineageTuple( model, pomFile, artifactRepositories, validProfilesXmlLocation ) ); - } - - /** - * @see ModelLineage#artifactRepositoryListIterator() - */ - public Iterator artifactRepositoryListIterator() - { - return new Iterator() - { - - private int idx = 0; - - public boolean hasNext() - { - return tuples.size() > idx; - } - - public Object next() - { - return ( (ModelLineageTuple) tuples.get( idx++ ) ).remoteRepositories; - } - - public void remove() - { - tuples.remove( idx ); - } - - }; - } - - /** - * @see ModelLineage#fileIterator() - */ - public Iterator fileIterator() - { - return new Iterator() - { - - private int idx = 0; - - public boolean hasNext() - { - return tuples.size() > idx; - } - - public Object next() - { - return ( (ModelLineageTuple) tuples.get( idx++ ) ).file; - } - - public void remove() - { - tuples.remove( idx ); - } - - }; - } - - /** - * @see ModelLineage#getArtifactRepositories(org.apache.maven.model.Model) - */ - public List getArtifactRepositories( Model model ) - { - int index = tuples.indexOf( new ModelLineageTuple( model ) ); - - ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( index ); - - return tuple != null ? tuple.remoteRepositories : null; - } - - public List getArtifactRepositoryListsInDescendingOrder() - { - if ( tuples.isEmpty() ) - { - return Collections.EMPTY_LIST; - } - - List tuplesInReverse = new ArrayList( tuples ); - Collections.reverse( tuplesInReverse ); - - List results = new ArrayList( tuplesInReverse.size() ); - for ( Iterator it = tuplesInReverse.iterator(); it.hasNext(); ) - { - ModelLineageTuple tuple = (ModelLineageTuple) it.next(); - - results.add( tuple.remoteRepositories ); - } - - return results; - } - - /** - * @see ModelLineage#getFile(org.apache.maven.model.Model) - */ - public File getFile( Model model ) - { - int index = tuples.indexOf( new ModelLineageTuple( model ) ); - - ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( index ); - - return tuple != null ? tuple.file : null; - } - - public List getFilesInDescendingOrder() - { - if ( tuples.isEmpty() ) - { - return Collections.EMPTY_LIST; - } - - List tuplesInReverse = new ArrayList( tuples ); - Collections.reverse( tuplesInReverse ); - - List results = new ArrayList( tuplesInReverse.size() ); - for ( Iterator it = tuplesInReverse.iterator(); it.hasNext(); ) - { - ModelLineageTuple tuple = (ModelLineageTuple) it.next(); - - results.add( tuple.file ); - } - - return results; - } - - public List getModelsInDescendingOrder() - { - if ( tuples.isEmpty() ) - { - return Collections.EMPTY_LIST; - } - - List tuplesInReverse = new ArrayList( tuples ); - Collections.reverse( tuplesInReverse ); - - List results = new ArrayList( tuplesInReverse.size() ); - for ( Iterator it = tuplesInReverse.iterator(); it.hasNext(); ) - { - ModelLineageTuple tuple = (ModelLineageTuple) it.next(); - - results.add( tuple.model ); - } - - return results; - } - - public List getOriginatingArtifactRepositoryList() - { - if ( tuples.isEmpty() ) - { - return null; - } - - ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( 0 ); - - return tuple.remoteRepositories; - } - - public Model getOriginatingModel() - { - if ( tuples.isEmpty() ) - { - return null; - } - - ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( 0 ); - - return tuple.model; - } - - public File getOriginatingPOMFile() - { - if ( tuples.isEmpty() ) - { - return null; - } - - ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( 0 ); - - return tuple.file; - } - - public List getDeepestAncestorArtifactRepositoryList() - { - if ( tuples.isEmpty() ) - { - return null; - } - - ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( tuples.size() - 1 ); - - return tuple.remoteRepositories; - } - - public File getDeepestAncestorFile() - { - if ( tuples.isEmpty() ) - { - return null; - } - - ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( tuples.size() - 1 ); - - return tuple.file; - } - - public Model getDeepestAncestorModel() - { - if ( tuples.isEmpty() ) - { - return null; - } - - ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( tuples.size() - 1 ); - - return tuple.model; - } - - public boolean isDeepestAncestorUsingProfilesXml() - { - if ( tuples.isEmpty() ) - { - return false; - } - - ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( tuples.size() - 1 ); - - return tuple.validProfilesXmlLocation; - } - - /** - * @see ModelLineage#modelIterator() - */ - public Iterator modelIterator() - { - return new Iterator() - { - - private int idx = 0; - - public boolean hasNext() - { - return tuples.size() > idx; - } - - public Object next() - { - return ( (ModelLineageTuple) tuples.get( idx++ ) ).model; - } - - public void remove() - { - tuples.remove( idx ); - } - - }; - } - - public void setOrigin( Model model, File pomFile, List artifactRepositories, boolean validProfilesXmlLocation ) - { - if ( !tuples.isEmpty() ) - { - throw new IllegalStateException( "Origin already set; you must use addParent(..) for successive additions to the lineage." ); - } - - tuples.add( new ModelLineageTuple( model, pomFile, artifactRepositories, validProfilesXmlLocation ) ); - } - - /** - * @see ModelLineage#size() - */ - public int size() - { - return tuples.size(); - } - - private static final class ModelLineageTuple - { - private Model model; - - private File file; - - private List remoteRepositories; - - private final boolean validProfilesXmlLocation; - - private ModelLineageTuple( Model model ) - { - this.model = model; - validProfilesXmlLocation = false; - } - - private ModelLineageTuple( Model model, File file, List remoteRepositories, boolean validProfilesXmlLocation ) - { - this.model = model; - this.file = file; - this.remoteRepositories = remoteRepositories; - this.validProfilesXmlLocation = validProfilesXmlLocation; - } - - public boolean equals( Object other ) - { - if ( this == other ) - { - return true; - } - else if ( other instanceof ModelLineageTuple ) - { - ModelLineageTuple otherTuple = (ModelLineageTuple) other; - - return model.getId().equals( otherTuple.model.getId() ); - } - - return false; - } - } - - public ModelLineageIterator lineageIterator() - { - return new ModelLineageIterator() - { - - private int idx = -1; - - public boolean hasNext() - { - return tuples.size() > idx + 1; - } - - public Object next() - { - return ( (ModelLineageTuple) tuples.get( ( ++idx ) ) ).model; - } - - public void remove() - { - tuples.remove( idx ); - } - - public List getArtifactRepositories() - { - return ( (ModelLineageTuple) tuples.get( idx ) ).remoteRepositories; - } - - public Model getModel() - { - return ( (ModelLineageTuple) tuples.get( idx ) ).model; - } - - public File getPOMFile() - { - return ( (ModelLineageTuple) tuples.get( idx ) ).file; - } - - }; - } - - public ModelLineageIterator reversedLineageIterator() - { - return new ModelLineageIterator() - { - - private int idx = tuples.size(); - - public boolean hasNext() - { - return idx > 0; - } - - public Object next() - { - return ( (ModelLineageTuple) tuples.get( ( --idx ) ) ).model; - } - - public void remove() - { - tuples.remove( idx ); - } - - public List getArtifactRepositories() - { - return ( (ModelLineageTuple) tuples.get( idx ) ).remoteRepositories; - } - - public Model getModel() - { - return ( (ModelLineageTuple) tuples.get( idx ) ).model; - } - - public File getPOMFile() - { - return ( (ModelLineageTuple) tuples.get( idx ) ).file; - } - - }; - } - -} diff --git a/maven-core/src/main/java/org/apache/maven/extension/lineage/DefaultModelLineageBuilder.java b/maven-core/src/main/java/org/apache/maven/extension/lineage/DefaultModelLineageBuilder.java deleted file mode 100644 index b17940e71b..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/lineage/DefaultModelLineageBuilder.java +++ /dev/null @@ -1,491 +0,0 @@ -package org.apache.maven.extension.lineage; - -/* - * 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 org.apache.maven.MavenTools; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.InvalidRepositoryException; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.resolver.ArtifactResolver; -import org.apache.maven.model.Model; -import org.apache.maven.model.Parent; -import org.apache.maven.model.io.xpp3.MavenXpp3Reader; -import org.apache.maven.profiles.activation.DefaultProfileActivationContext; -import org.apache.maven.profiles.activation.ProfileActivationContext; -import org.apache.maven.profiles.build.ProfileAdvisor; -import org.apache.maven.project.ProjectBuilderConfiguration; -import org.apache.maven.project.ProjectBuildingException; -import org.apache.maven.project.ModelAndFile; -import org.codehaus.plexus.logging.LogEnabled; -import org.codehaus.plexus.logging.Logger; -import org.codehaus.plexus.logging.console.ConsoleLogger; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.ReaderFactory; -import org.codehaus.plexus.util.StringUtils; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; - -import java.io.File; -import java.io.IOException; -import java.io.Reader; -import java.util.ArrayList; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -/** - * @see ModelLineageBuilder - */ -public class DefaultModelLineageBuilder - implements ModelLineageBuilder, LogEnabled -{ - - public static final String ROLE_HINT = "default"; - - private ArtifactFactory artifactFactory; - - private ArtifactResolver artifactResolver; - - private MavenTools mavenTools; - - private ProfileAdvisor profileAdvisor; - - private Logger logger; - - public DefaultModelLineageBuilder() - { - } - - public DefaultModelLineageBuilder( ArtifactResolver resolver, - ArtifactFactory artifactFactory ) - { - artifactResolver = resolver; - this.artifactFactory = artifactFactory; - } - - /** - * @see ModelLineageBuilder#buildModelLineage(java.io.File, org.apache.maven.artifact.repository.ArtifactRepository, java.util.List) - */ - public ModelLineage buildModelLineage( File pom, - ProjectBuilderConfiguration config, - List remoteRepositories, - boolean allowStubs, - boolean isReactorProject ) - throws ProjectBuildingException - { - ModelLineage lineage = new DefaultModelLineage(); - - List currentRemoteRepositories = remoteRepositories == null ? new ArrayList() - : new ArrayList( remoteRepositories ); - - ModelAndFile current = current = new ModelAndFile( readModel( pom ), pom, isReactorProject ); - - do - { - currentRemoteRepositories = updateRepositorySet( current.getModel(), - currentRemoteRepositories, - current.getFile(), - config, - current.isValidProfilesXmlLocation() ); - if ( lineage.size() == 0 ) - { - lineage.setOrigin( current.getModel(), - current.getFile(), - currentRemoteRepositories, - current.isValidProfilesXmlLocation() ); - } - else - { - lineage.addParent( current.getModel(), - current.getFile(), - currentRemoteRepositories, - current.isValidProfilesXmlLocation() ); - } - - - current = resolveParentPom( current, - currentRemoteRepositories, - config, - allowStubs, - isReactorProject ); - } - while ( current != null ); - - return lineage; - } - - /** - * Read the Model instance from the given POM file. Skip caching the Model on this call, since - * it's meant for diagnostic purposes (to determine a parent match). - */ - private Model readModel( File pomFile ) - throws ProjectBuildingException - { - if ( pomFile.isDirectory() ) - { - pomFile = new File( pomFile, "pom.xml" ); - } - - Model model; - Reader reader = null; - - try - { - reader = ReaderFactory.newXmlReader( pomFile ); - model = new MavenXpp3Reader().read( reader ); - } - catch ( IOException e ) - { - throw new ProjectBuildingException( "unknown", "Failed to read model from: " + pomFile, - pomFile, e ); - } - catch ( XmlPullParserException e ) - { - throw new ProjectBuildingException( "unknown", - "Failed to parse model from: " + pomFile, pomFile, - e ); - } - finally - { - IOUtil.close( reader ); - } - - return model; - } - - /** - * Update the remote repository set used to resolve parent POMs, by adding those declared in - * the given model to the HEAD of a new list, then appending the old remote repositories list. - * The specified pomFile is used for error reporting. - * @param profileManager - */ - private List updateRepositorySet( Model model, - List oldArtifactRepositories, - File pomFile, - ProjectBuilderConfiguration config, - boolean useProfilesXml ) - throws ProjectBuildingException - { - List repositories = model.getRepositories(); - - Set artifactRepositories = null; - - if ( repositories != null ) - { - try - { - List lastRemoteRepos = oldArtifactRepositories; - List remoteRepos = mavenTools.buildArtifactRepositories( repositories ); - - loadActiveProfileRepositories( remoteRepos, - model, - config, - pomFile, - useProfilesXml ); - - artifactRepositories = new LinkedHashSet( remoteRepos.size() - + oldArtifactRepositories.size() ); - - artifactRepositories.addAll( remoteRepos ); - artifactRepositories.addAll( lastRemoteRepos ); - } - catch ( InvalidRepositoryException e ) - { - throw new ProjectBuildingException( model.getId(), - "Failed to create ArtifactRepository list for: " - + pomFile, pomFile, e ); - } - } - - return new ArrayList( artifactRepositories ); - } - - private void loadActiveProfileRepositories( List repositories, - Model model, - ProjectBuilderConfiguration config, - File pomFile, - boolean useProfilesXml ) - throws ProjectBuildingException - { -// getLogger().debug( "Grabbing profile-injected repositories for: " + model.getId() ); - - // FIXME: Find a way to pass in this context, so it's never null! - ProfileActivationContext context; - - if ( config.getGlobalProfileManager() != null ) - { - context = config.getGlobalProfileManager().getProfileActivationContext(); - } - else - { - context = new DefaultProfileActivationContext( config.getExecutionProperties(), false ); - } - - LinkedHashSet profileRepos = profileAdvisor.getArtifactRepositoriesFromActiveProfiles( model, - pomFile, - config.getGlobalProfileManager() ); - -// getLogger().debug( "Got external-profile repositories: " + profileRepos ); - - LinkedHashSet pomProfileRepos = profileAdvisor.getArtifactRepositoriesFromActiveProfiles( model, - pomFile, - useProfilesXml, - context ); - -// getLogger().debug( "Got pom-profile repositories: " + pomProfileRepos ); - - profileRepos.addAll( pomProfileRepos ); - - if ( !profileRepos.isEmpty() ) - { - repositories.addAll( profileRepos ); - } - } - - /** - * Pull the parent specification out of the given model, construct an Artifact instance, and - * resolve that artifact...then, return the resolved POM file for the parent. - * @param projectBuildCache - * @param allowStubs - * @param childIsReactorProject - */ - private ModelAndFile resolveParentPom( ModelAndFile child, - List remoteRepositories, - ProjectBuilderConfiguration config, - boolean allowStubs, - boolean childIsReactorProject ) - throws ProjectBuildingException - { - Model model = child.getModel(); - File modelPomFile = child.getFile(); - - Parent modelParent = model.getParent(); - - ModelAndFile result = null; - - if ( modelParent != null ) - { - validateParentDeclaration( modelParent, model ); - - String key = modelParent.getGroupId() + ":" + modelParent.getArtifactId() + ":" + modelParent.getVersion(); - - File parentPomFile = null; - - if ( childIsReactorProject && modelPomFile != null ) - { -// getLogger().debug( "Attempting to locate parent model using relativePath and local filesystem; child is a reactor project." ); - - // if the child isn't a reactor project, don't resolve the parent from the local filesystem...use the repository. - String relativePath = modelParent.getRelativePath(); - File modelDir = modelPomFile.getParentFile(); - - parentPomFile = new File( modelDir, relativePath ); - - if ( parentPomFile.isDirectory() ) - { - parentPomFile = new File( parentPomFile, "pom.xml" ); - } - } - - if ( parentPomFile != null ) - { - if ( parentPomFile.exists() ) - { - Model parentModel = readModel( parentPomFile ); - if ( !parentModelMatches( modelParent, parentModel ) ) - { - parentPomFile = null; - } - } - else - { - parentPomFile = null; - } - } - - boolean isResolved = false; - - if ( parentPomFile == null ) - { - try - { -// getLogger().debug( "Attempting to resolve parent POM: " + modelParent.getId() + " using repositories:\n" + StringUtils.join( remoteRepositories.iterator(), "\n" ) ); - - parentPomFile = resolveParentFromRepositories( modelParent, - config, - remoteRepositories, - model.getId(), - modelPomFile ); - isResolved = true; - } - catch ( ProjectBuildingException e ) - { - if ( allowStubs ) - { - getLogger().warn( "An error was encountered while resolving artifact for: " - + modelParent.getId() + "\n\nError was: " - + e.getMessage() ); - - if ( getLogger().isDebugEnabled() ) - { - getLogger().debug( "Stack trace: ", e ); - } - - parentPomFile = null; - } - else - { - throw e; - } - } - } - - if ( parentPomFile == null ) - { - if ( allowStubs ) - { - getLogger().warn( "Cannot find parent POM: " + modelParent.getId() - + " for child: " + model.getId() - + ".\n\nMaven is using a stub model instead for this build." ); - - Model parent = new Model(); - - parent.setGroupId( modelParent.getGroupId() ); - parent.setArtifactId( modelParent.getArtifactId() ); - parent.setVersion( modelParent.getVersion() ); - - // we act as if the POM was resolved from the repository, - // for the purposes of external profiles.xml files... - // that's what the last parameter is about. - result = new ModelAndFile( parent, parentPomFile, false ); - } - else - { - getLogger().error( "Cannot find parent POM: " + modelParent.getId() ); - } - } - else - { - Model parent = readModel( parentPomFile ); - result = new ModelAndFile( parent, parentPomFile, !isResolved ); - } - } - - return result; - } - - private boolean parentModelMatches( Parent modelParent, Model parentModel ) - { - - boolean groupsMatch = ( parentModel.getGroupId() == null ) - || parentModel.getGroupId().equals( modelParent.getGroupId() ); - boolean versionsMatch = ( parentModel.getVersion() == null ) - || parentModel.getVersion().equals( modelParent.getVersion() ); - - if ( groupsMatch && versionsMatch - && parentModel.getArtifactId().equals( modelParent.getArtifactId() ) ) - { - return true; - } - - return false; - } - - private void validateParentDeclaration( Parent modelParent, - Model model ) - throws ProjectBuildingException - { - if ( StringUtils.isEmpty( modelParent.getGroupId() ) ) - { - throw new ProjectBuildingException( model.getId(), - "Missing groupId element from parent element" ); - } - else if ( StringUtils.isEmpty( modelParent.getArtifactId() ) ) - { - throw new ProjectBuildingException( model.getId(), - "Missing artifactId element from parent element" ); - } - else if ( modelParent.getGroupId().equals( model.getGroupId() ) - && modelParent.getArtifactId().equals( model.getArtifactId() ) ) - { - throw new ProjectBuildingException( model.getId(), "Parent element is a duplicate of " - + "the current project " ); - } - else if ( StringUtils.isEmpty( modelParent.getVersion() ) ) - { - throw new ProjectBuildingException( model.getId(), - "Missing version element from parent element" ); - } - } - - private File resolveParentFromRepositories( Parent modelParent, - ProjectBuilderConfiguration config, - List remoteRepositories, - String childId, - File childPomFile ) - throws ProjectBuildingException - { - Artifact parentPomArtifact = artifactFactory.createBuildArtifact( modelParent.getGroupId(), - modelParent.getArtifactId(), - modelParent.getVersion(), - "pom" ); - - try - { - artifactResolver.resolve( parentPomArtifact, remoteRepositories, config.getLocalRepository() ); - } - catch ( ArtifactResolutionException e ) - { - throw new ProjectBuildingException( childId, "Failed to resolve parent POM: " - + modelParent.getId(), childPomFile, e ); - } - catch ( ArtifactNotFoundException e ) - { - throw new ProjectBuildingException( childId, "Cannot find artifact for parent POM: " - + modelParent.getId(), childPomFile, e ); - } - - if ( parentPomArtifact.isResolved() ) - { - return parentPomArtifact.getFile(); - } - else - { - return null; - } - } - - private Logger getLogger() - { - if ( logger == null ) - { - logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "DefaultModelLineageBuilder:internal" ); - } - - return logger; - } - - public void enableLogging( Logger logger ) - { - this.logger = logger; - } - -} diff --git a/maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineage.java b/maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineage.java deleted file mode 100644 index f6d69bd010..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineage.java +++ /dev/null @@ -1,168 +0,0 @@ -package org.apache.maven.extension.lineage; - -/* - * 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 org.apache.maven.model.Model; - -import java.io.File; -import java.util.Iterator; -import java.util.List; - -/** - * Tracks information from a current POM and its ancestors, including Model instances, associated - * POM files, and repository lists used to resolve each model. - * - * @author jdcasey - * - */ -public interface ModelLineage -{ - - /** - * Retrieve the Model instance for the deepest ancestor which has been resolved so far in this - * lineage. - */ - Model getDeepestAncestorModel(); - - /** - * Retrieve the flag telling whether discovery of a profiles.xml file is appropriate - * for the deepest model in this lineage. - */ - boolean isDeepestAncestorUsingProfilesXml(); - - /** - * Retrieve the POM file for the deepest ancestor which has been resolved so far in this - * lineage. - */ - File getDeepestAncestorFile(); - - /** - * Retrieve the remote-repository list for the deepest ancestor which has been resolved so far - * in this lineage. - */ - List getDeepestAncestorArtifactRepositoryList(); - - /** - * Retrieve the Model instance for the POM from which this lineage was constructed. This is the - * "leaf" of the inheritance hierarchy, or the current POM, or the child (all means the same - * thing). - */ - Model getOriginatingModel(); - - /** - * Retrieve the File for the POM from which this lineage was constructed. This is the - * "leaf" of the inheritance hierarchy, or the current POM, or the child (all means the same - * thing). - */ - File getOriginatingPOMFile(); - - /** - * Retrieve the List of ArtifactRepository instances used to resolve the first parent POM of the - * POM from which this lineage was constructed. This is the "leaf" of the inheritance hierarchy, - * or the current POM, or the child (all means the same thing). - */ - List getOriginatingArtifactRepositoryList(); - - /** - * Setup the originating POM information from which this lineage is constructed. This is the - * "child" POM that is the starting point of the build. - * - * @throws IllegalStateException When the originating POM information has already been set. - */ - void setOrigin( Model model, File pomFile, List artifactRepositories, boolean validProfilesXmlLocation ); - - /** - * Add a parent model, along with its file and the repositories used to resolve it. - * NOTE: If setOrigin(..) hasn't been called, this method will result in an IllegalStateException. - * - * @throws IllegalStateException When the originating POM information has not yet been set. - */ - void addParent( Model model, File pomFile, List artifactRepositories, boolean validProfilesXmlLocation ); - - /** - * Retrieve the models in this lineage, with the deepest parent at the zero index, and the current - * POM at the last index. - */ - List getModelsInDescendingOrder(); - - /** - * Retrieve the files used to construct this lineage, with that of the deepest parent at the - * zero index, and that of the current POM at the last index. - */ - List getFilesInDescendingOrder(); - - /** - * Retrieve the remote-artifact repository lists used to construct this lineage, with - * that of the deepest parent at the zero index, and that of the current POM at the last index. - */ - List getArtifactRepositoryListsInDescendingOrder(); - - /** - * Retrieve an Iterator derivative that functions in the simplest sense just like the return - * value of the modelIterator() method. However, the ModelLineageIterator also gives access to - * the current POM file and current remote ArtifactRepository instances used to resolve the - * current Model...along with a method to give explicit access to the current Model instance. - */ - ModelLineageIterator lineageIterator(); - - /** - * Retrieve an Iterator derivative that functions in the simplest sense just like the return - * value of the modelIterator() method. However, the ModelLineageIterator also gives access to - * the current POM file and current remote ArtifactRepository instances used to resolve the - * current Model...along with a method to give explicit access to the current Model instance. - */ - ModelLineageIterator reversedLineageIterator(); - - /** - * Iterate over the lineage of Model instances, starting with the child (current) Model, - * and ending with the deepest ancestor. - */ - Iterator modelIterator(); - - /** - * Iterate over the lineage of POM Files, starting with the child (current) POM and ending with - * the deepest ancestor. - */ - Iterator fileIterator(); - - /** - * Iterate over the remote-repository Lists used to resolve the lineage, starting with the - * child (current) remote-repository List and ending with the deepest ancestor. - */ - Iterator artifactRepositoryListIterator(); - - /** - * Retrieve the File from which the given Model instance was read. If the model itself doesn't - * belong to this lineage, match it in the lineage by Model.getId(). - */ - File getFile( Model model ); - - /** - * Retrieve the List of remote repositories from which the given Model instance was resolved. - * If the model itself doesn't belong to this lineage, match it in the lineage by Model.getId(). - */ - List getArtifactRepositories( Model model ); - - /** - * Retrieve the number of entries (POMs) in this lineage. - */ - int size(); - -} \ No newline at end of file diff --git a/maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineageBuilder.java b/maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineageBuilder.java deleted file mode 100644 index 70adffbcf3..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineageBuilder.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.apache.maven.extension.lineage; - -/* - * 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 org.apache.maven.project.ProjectBuilderConfiguration; -import org.apache.maven.project.ProjectBuildingException; - -import java.io.File; -import java.util.List; - -/** - * Builds the lineage of Model instances, starting from a given POM file, and stretching back through - * all of the parent POMs that are defined in the respective sections. - * - * NOTE: In all of the build/resume methods below, each Model MUST have its active profiles searched - * for new repositories from which to discover parent POMs. - */ -public interface ModelLineageBuilder -{ - - String ROLE = ModelLineageBuilder.class.getName(); - - /** - * Construct a lineage of the current POM plus all of its ancestors. - * - * @param pom The current POM, whose Model will terminate the constructed lineage - * - * @param config The project-building configuration to use, which contains the global profile manager, - * local repository, and execution- and user-level properties. - * - * @param remoteRepositories List of ArtifactRepository instances against which parent POMs - * should be resolved - * - * @param allowStubs Whether stubbed-out Model instances should be constructed in the event that - * a parent-POM cannot be resolved. - * - * @param isReactorProject Whether the model being built is part of the build we're trying to execute, - * or if it's actually being read from the repository. - */ - ModelLineage buildModelLineage( File pom, - ProjectBuilderConfiguration config, - List remoteRepositories, - boolean allowStubs, - boolean isReactorProject ) - throws ProjectBuildingException; - -} diff --git a/maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineageIterator.java b/maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineageIterator.java deleted file mode 100644 index f3abff4c45..0000000000 --- a/maven-core/src/main/java/org/apache/maven/extension/lineage/ModelLineageIterator.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.apache.maven.extension.lineage; - -/* - * 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 org.apache.maven.model.Model; - -import java.io.File; -import java.util.Iterator; -import java.util.List; - -/** - * Iterator that gives access to all information associated with each model in a ModelLineage. - * The result of the next() method is the Model instance itself, but you can also retrieve this - * Model instance using getModel() below. - * - * @author jdcasey - */ -public interface ModelLineageIterator - extends Iterator -{ - - /** - * Retrieve the Model instance associated with the current position in the ModelLineage. - * This is the same return value as the next() method. - */ - Model getModel(); - - /** - * Retrieve the POM File associated with the current position in the ModelLineage - */ - File getPOMFile(); - - /** - * Retrieve the remote ArtifactRepository instances associated with the current position - * in the ModelLineage. - */ - List getArtifactRepositories(); - -} diff --git a/maven-core/src/main/java/org/apache/maven/reactor/MavenExecutionException.java b/maven-core/src/main/java/org/apache/maven/reactor/MavenExecutionException.java index fa3f880cf9..302232b220 100644 --- a/maven-core/src/main/java/org/apache/maven/reactor/MavenExecutionException.java +++ b/maven-core/src/main/java/org/apache/maven/reactor/MavenExecutionException.java @@ -19,7 +19,6 @@ package org.apache.maven.reactor; * under the License. */ -import org.apache.maven.extension.ExtensionScanningException; import org.apache.maven.project.ProjectBuildingException; import java.io.File; @@ -51,11 +50,6 @@ public class MavenExecutionException super( message, cause ); } - public MavenExecutionException( String message, ExtensionScanningException cause ) - { - super( message, cause ); - } - public MavenExecutionException( String message, ProjectBuildingException cause ) { diff --git a/maven-core/src/main/resources/META-INF/plexus/components.xml b/maven-core/src/main/resources/META-INF/plexus/components.xml index 4a4bd23c46..d611a65c66 100644 --- a/maven-core/src/main/resources/META-INF/plexus/components.xml +++ b/maven-core/src/main/resources/META-INF/plexus/components.xml @@ -183,24 +183,6 @@ under the License. - - org.apache.maven.extension.BuildExtensionScanner - default - org.apache.maven.extension.DefaultBuildExtensionScanner - - - org.apache.maven.extension.ExtensionManager - - - org.apache.maven.extension.lineage.ModelLineageBuilder - default - - - org.apache.maven.project.MavenProjectBuilder - - - - org.apache.maven.extension.lineage.ModelLineageBuilder default @@ -314,10 +296,6 @@ under the License. org.apache.maven.Maven org.apache.maven.DefaultMaven - - org.apache.maven.extension.BuildExtensionScanner - default - org.apache.maven.project.MavenProjectBuilder diff --git a/maven-core/src/test/java/org/apache/maven/extension/DefaultExtensionManagerTest.java b/maven-core/src/test/java/org/apache/maven/extension/DefaultExtensionManagerTest.java deleted file mode 100644 index 65b0ee7ca1..0000000000 --- a/maven-core/src/test/java/org/apache/maven/extension/DefaultExtensionManagerTest.java +++ /dev/null @@ -1,311 +0,0 @@ -package org.apache.maven.extension; - -/* - * 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 org.apache.maven.ArtifactFilterManager; -import org.apache.maven.DefaultArtifactFilterManager; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.handler.ArtifactHandler; -import org.apache.maven.artifact.manager.WagonManager; -import org.apache.maven.artifact.metadata.ArtifactMetadataSource; -import org.apache.maven.artifact.repository.ArtifactRepositoryFactory; -import org.apache.maven.artifact.repository.DefaultArtifactRepository; -import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; -import org.apache.maven.artifact.resolver.ArtifactResolver; -import org.apache.maven.execution.DefaultMavenExecutionRequest; -import org.apache.maven.execution.MavenExecutionRequest; -import org.apache.maven.lifecycle.mapping.LifecycleMapping; -import org.apache.maven.model.Build; -import org.apache.maven.model.Extension; -import org.apache.maven.model.Model; -import org.apache.maven.realm.DefaultMavenRealmManager; -import org.apache.maven.realm.MavenRealmManager; -import org.codehaus.plexus.MutablePlexusContainer; -import org.codehaus.plexus.PlexusTestCase; -import org.codehaus.plexus.classworlds.realm.ClassRealm; -import org.codehaus.plexus.logging.Logger; -import org.codehaus.plexus.logging.console.ConsoleLogger; -import org.codehaus.plexus.util.FileUtils; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -public class DefaultExtensionManagerTest - extends PlexusTestCase -{ - - private Set toDelete = new HashSet(); - - private MutablePlexusContainer container; - - private ArtifactFilterManager filterManager; - - private ArtifactRepositoryFactory repoFactory; - - private ArtifactFactory factory; - - private ArtifactResolver resolver; - - private ArtifactMetadataSource metadataSource; - - private WagonManager wagonManager; - - public void setUp() - throws Exception - { - super.setUp(); - - container = (MutablePlexusContainer) getContainer(); - -// container.getLoggerManager().setThreshold( Logger.LEVEL_DEBUG ); - - filterManager = new DefaultArtifactFilterManager(); - - repoFactory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE ); - - factory = (ArtifactFactory) lookup( ArtifactFactory.ROLE ); - resolver = (ArtifactResolver) lookup( ArtifactResolver.ROLE ); - - metadataSource = (ArtifactMetadataSource) lookup( ArtifactMetadataSource.ROLE ); - - wagonManager = (WagonManager) lookup( WagonManager.ROLE ); - } - - public void tearDown() - throws Exception - { - super.tearDown(); - - for ( Iterator it = toDelete.iterator(); it.hasNext(); ) - { - File f = (File) it.next(); - - if ( f.exists() ) - { - try - { - FileUtils.forceDelete( f ); - } - catch (IOException e) - { - //the files on windows can still be locked. They were creaed in a temp directory anyway and will get removed in a subsequent clean. - //we can safely ignore this error. - } - } - } - } - - public void test_addExtension_usingModel_ShouldLoadExtensionComponent() - throws Exception - { - System.out.println( "\n\n\n\n\n\n\nSTART\n\n" ); - File remoteRepoDir = findRemoteRepositoryDirectory(); - File localRepo = createTempDir(); - - Model model = createModel( "org.test", "artifact-name", "1" ); - Extension ext = addExtension( model, "org.apache.maven.core.test", "test-extension", "1" ); - - List remoteRepositories = new ArrayList(); - remoteRepositories.add( repoFactory.createArtifactRepository( "central", - remoteRepoDir.toURI() - .toURL() - .toExternalForm(), - "default", - null, - null ) ); - - DefaultArtifactRepository localRepository = new DefaultArtifactRepository( - "local", - localRepo.getAbsolutePath(), - new DefaultRepositoryLayout() ); - localRepository.setBasedir( localRepo.getAbsolutePath() ); - - ExtensionManager mgr = newDefaultExtensionManager(); - - MavenRealmManager realmManager = new DefaultMavenRealmManager( - container, - new ConsoleLogger( - Logger.LEVEL_DEBUG, - "test" ) ); - - MavenExecutionRequest request = new DefaultMavenExecutionRequest().setLocalRepository( localRepository ) - .setRealmManager( realmManager ); - - mgr.addExtension( ext, model, remoteRepositories, request ); - - ClassRealm projectRealm = realmManager.getProjectRealm( model.getGroupId(), model.getArtifactId(), model.getVersion() ); - ClassRealm oldRealm = getContainer().setLookupRealm( projectRealm ); - - List compList = getContainer().getComponentDescriptorList( ArtifactFactory.ROLE ); - - System.out.println( "Got: " + compList ); - - ArtifactFactory result = (ArtifactFactory) lookup( ArtifactFactory.ROLE, "test" ); - assertNotNull( result ); - - getContainer().setLookupRealm( oldRealm ); - - System.out.println( "\n\nEND\n\n\n\n\n\n\n" ); - } - - public void test_addExtension_usingModel_ShouldLoadCustomLifecycleMappingAndArtifactHandler() - throws Exception - { - File remoteRepoDir = findRemoteRepositoryDirectory(); - File localRepo = createTempDir(); - - Model model = createModel( "org.test", "artifact-name", "1" ); - Extension ext = addExtension( model, "org.apache.maven.core.test", "test-lifecycle-and-artifactHandler", "1" ); - - List remoteRepositories = new ArrayList(); - remoteRepositories.add( repoFactory.createArtifactRepository( "central", - remoteRepoDir.toURI() - .toURL() - .toExternalForm(), - "default", - null, - null ) ); - - DefaultArtifactRepository localRepository = new DefaultArtifactRepository( - "local", - localRepo.getAbsolutePath(), - new DefaultRepositoryLayout() ); - localRepository.setBasedir( localRepo.getAbsolutePath() ); - - ExtensionManager mgr = newDefaultExtensionManager(); - - MavenRealmManager realmManager = new DefaultMavenRealmManager( - container, - new ConsoleLogger( - Logger.LEVEL_DEBUG, - "test" ) ); - - MavenExecutionRequest request = new DefaultMavenExecutionRequest().setLocalRepository( localRepository ) - .setRealmManager( realmManager ); - - mgr.addExtension( ext, model, remoteRepositories, request ); - - List lcCompList = getContainer().getComponentDescriptorList( LifecycleMapping.ROLE ); - - System.out.println( "Got lifecyle mappings: " + lcCompList ); - - List ahCompList = getContainer().getComponentDescriptorList( ArtifactHandler.ROLE ); - - System.out.println( "Got artifact handlers: " + ahCompList ); - - ClassRealm projectRealm = realmManager.getProjectRealm( model.getGroupId(), model.getArtifactId(), model.getVersion() ); - ClassRealm oldRealm = getContainer().setLookupRealm( projectRealm ); - - LifecycleMapping lcResult = (LifecycleMapping) lookup( LifecycleMapping.ROLE, "test" ); - assertNotNull( lcResult ); - - ArtifactHandler ahResult = (ArtifactHandler) lookup( ArtifactHandler.ROLE, "test" ); - assertNotNull( ahResult ); - - getContainer().setLookupRealm( oldRealm ); - } - - private ExtensionManager newDefaultExtensionManager() - throws Exception - { - DefaultExtensionManager mgr = new DefaultExtensionManager( factory, resolver, - metadataSource, container, - filterManager, wagonManager ); - - Logger logger = getContainer().getLoggerManager() - .getLoggerForComponent( DefaultExtensionManager.class.getName() ); - - mgr.enableLogging( logger ); - - return mgr; - } - - private Model createModel( String groupId, - String artifactId, - String version ) - { - Model model = new Model(); - model.setGroupId( groupId ); - model.setArtifactId( artifactId ); - model.setVersion( version ); - - return model; - } - - private Extension addExtension( Model model, - String groupId, - String artifactId, - String version ) - { - Extension ext = new Extension(); - ext.setGroupId( groupId ); - ext.setArtifactId( artifactId ); - ext.setVersion( version ); - - Build build = model.getBuild(); - if ( build == null ) - { - build = new Build(); - model.setBuild( build ); - } - - build.addExtension( ext ); - - return ext; - } - - private File createTempDir() - throws IOException - { - File dir = File.createTempFile( "DefaultExtensionManagerTest.", ".dir" ); - FileUtils.forceDelete( dir ); - - dir.mkdirs(); - toDelete.add( dir ); - - return dir; - } - - private File findRemoteRepositoryDirectory() - { - String classPath = getClass().getPackage().getName().replace( '.', '/' ) - + "/test-extension-repo/repo-marker.txt"; - ClassLoader cloader = Thread.currentThread().getContextClassLoader(); - - URL resource = cloader.getResource( classPath ); - - if ( resource == null ) - { - throw new IllegalStateException( "Cannot find repository marker file: " + classPath - + " in context classloader!" ); - } - - File repoDir = new File( resource.getPath() ).getParentFile(); - - return repoDir; - } - -} diff --git a/maven-core/src/test/java/org/apache/maven/extension/lineage/AbstractModelLineageTest.java b/maven-core/src/test/java/org/apache/maven/extension/lineage/AbstractModelLineageTest.java deleted file mode 100644 index 0ddfaae174..0000000000 --- a/maven-core/src/test/java/org/apache/maven/extension/lineage/AbstractModelLineageTest.java +++ /dev/null @@ -1,425 +0,0 @@ -package org.apache.maven.extension.lineage; - -/* - * 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 junit.framework.TestCase; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.DefaultArtifactRepository; -import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; -import org.apache.maven.model.Model; - -import java.io.File; -import java.io.IOException; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -public abstract class AbstractModelLineageTest - extends TestCase -{ - - protected abstract ModelLineage newModelLineage(); - - public void testAddParent_ShouldThrowIllegalStateExceptionWhenSetOriginNotCalled() - { - ModelLineage ml = newModelLineage(); - - assertEquals( 0, ml.size() ); - - try - { - ml.addParent( new Model(), null, null, false ); - - fail( "Should throw IllegalStateException when setOrigin(..) is not called first." ); - } - catch ( IllegalStateException e ) - { - // expected - } - } - - public void testSetOrigin_ShouldThrowIllegalStateExceptionWhenSetOriginCalledRepeatedly() - { - ModelLineage ml = newModelLineage(); - - assertEquals( 0, ml.size() ); - - ml.setOrigin( new Model(), null, null, false ); - - assertEquals( 1, ml.size() ); - - try - { - ml.setOrigin( new Model(), null, null, false ); - - fail( "Should throw IllegalStateException when setOrigin(..) called multiple times." ); - } - catch ( IllegalStateException e ) - { - // expected - } - } - - public void testSetOriginAndSize_SizeShouldIncrementByOneWhenOriginSet() - { - ModelLineage ml = newModelLineage(); - - assertEquals( 0, ml.size() ); - - ml.setOrigin( new Model(), null, null, false ); - - assertEquals( 1, ml.size() ); - } - - public void testLineageIterator_ShouldAddTwoEntriesAndIterateInFIFOOrder() - throws IOException - { - ModelLineage ml = newModelLineage(); - - String gOne = "group1"; - String aOne = "artifact1"; - String vOne = "1"; - - Model mOne = new Model(); - - mOne.setGroupId( gOne ); - mOne.setArtifactId( aOne ); - mOne.setVersion( vOne ); - - File fOne = File.createTempFile( "ModelLineageTest.modelLineageIterator-test.", "" ); - fOne.deleteOnExit(); - - ml.setOrigin( mOne, fOne, null, false ); - - String gTwo = "group2"; - String aTwo = "artifact2"; - String vTwo = "2"; - - Model mTwo = new Model(); - - mOne.setGroupId( gTwo ); - mOne.setArtifactId( aTwo ); - mOne.setVersion( vTwo ); - - File fTwo = File.createTempFile( "ModelLineageTest.fileIterator-test.", "" ); - fTwo.deleteOnExit(); - - ml.addParent( mTwo, fTwo, null, false ); - - ModelLineageIterator it = ml.lineageIterator(); - - assertTrue( it.hasNext() ); - assertEquals( mOne.getId(), ( (Model) it.next() ).getId() ); - assertEquals( mOne.getId(), it.getModel().getId() ); - assertEquals( fOne, it.getPOMFile() ); - - assertTrue( it.hasNext() ); - assertEquals( mTwo.getId(), ( (Model) it.next() ).getId() ); - assertEquals( mTwo.getId(), it.getModel().getId() ); - assertEquals( fTwo, it.getPOMFile() ); - } - - public void testModelIterator_ShouldAddTwoModelsAndIterateInFIFOOrder() - { - ModelLineage ml = newModelLineage(); - - String gOne = "group1"; - String aOne = "artifact1"; - String vOne = "1"; - - Model mOne = new Model(); - - mOne.setGroupId( gOne ); - mOne.setArtifactId( aOne ); - mOne.setVersion( vOne ); - - ml.setOrigin( mOne, null, null, false ); - - String gTwo = "group2"; - String aTwo = "artifact2"; - String vTwo = "2"; - - Model mTwo = new Model(); - - mOne.setGroupId( gTwo ); - mOne.setArtifactId( aTwo ); - mOne.setVersion( vTwo ); - - ml.addParent( mTwo, null, null, false ); - - Iterator it = ml.modelIterator(); - - assertTrue( it.hasNext() ); - assertEquals( mOne.getId(), ( (Model) it.next() ).getId() ); - - assertTrue( it.hasNext() ); - assertEquals( mTwo.getId(), ( (Model) it.next() ).getId() ); - } - - public void testFileIterator_ShouldAddTwoParentsAndIterateInFIFOOrder() - throws IOException - { - ModelLineage ml = newModelLineage(); - - File fOne = File.createTempFile( "ModelLineageTest.fileIterator-test.", "" ); - fOne.deleteOnExit(); - - ml.setOrigin( new Model(), fOne, null, false ); - - File fTwo = File.createTempFile( "ModelLineageTest.fileIterator-test.", "" ); - fTwo.deleteOnExit(); - - ml.addParent( new Model(), fTwo, null, false ); - - Iterator it = ml.fileIterator(); - - assertTrue( it.hasNext() ); - assertEquals( fOne, it.next() ); - - assertTrue( it.hasNext() ); - assertEquals( fTwo, it.next() ); - } - - public void testArtifactRepositoryListIterator_ShouldAddTwoParentsAndIterateInFIFOOrder() - { - DefaultRepositoryLayout layout = new DefaultRepositoryLayout(); - - ModelLineage ml = newModelLineage(); - - ArtifactRepository arOne = new DefaultArtifactRepository( "", "", layout ); - - ml.setOrigin( new Model(), null, Collections.singletonList( arOne ), false ); - - ArtifactRepository arTwo = new DefaultArtifactRepository( "", "", layout ); - - ml.addParent( new Model(), null, Collections.singletonList( arTwo ), false ); - - Iterator it = ml.artifactRepositoryListIterator(); - - assertTrue( it.hasNext() ); - assertSame( arOne, ( (List) it.next() ).get( 0 ) ); - - assertTrue( it.hasNext() ); - assertSame( arTwo, ( (List) it.next() ).get( 0 ) ); - } - - public void testAddParentAndGetFile_ShouldRetrieveCorrectFileForModel() - throws IOException - { - ModelLineage ml = newModelLineage(); - - File fOne = File.createTempFile( "ModelLineageTest.fileIterator-test.", "" ); - fOne.deleteOnExit(); - - Model mOne = new Model(); - - String gOne = "group"; - String aOne = "artifact"; - String vOne = "1"; - - mOne.setGroupId( gOne ); - mOne.setArtifactId( aOne ); - mOne.setVersion( vOne ); - - ml.setOrigin( mOne, fOne, null, false ); - - File fTwo = File.createTempFile( "ModelLineageTest.fileIterator-test.", "" ); - fTwo.deleteOnExit(); - - ml.addParent( new Model(), fTwo, null, false ); - - Model retriever = new Model(); - - retriever.setGroupId( gOne ); - retriever.setArtifactId( aOne ); - retriever.setVersion( vOne ); - - assertEquals( fOne, ml.getFile( retriever ) ); - } - - public void testAddParentAndGetArtifactRepositories_ShouldRetrieveCorrectRepoListForModel() - throws IOException - { - DefaultRepositoryLayout layout = new DefaultRepositoryLayout(); - - ModelLineage ml = newModelLineage(); - - Model mOne = new Model(); - - String gOne = "group"; - String aOne = "artifact"; - String vOne = "1"; - - mOne.setGroupId( gOne ); - mOne.setArtifactId( aOne ); - mOne.setVersion( vOne ); - - ArtifactRepository arOne = new DefaultArtifactRepository( "", "", layout ); - - ml.setOrigin( mOne, null, Collections.singletonList( arOne ), false ); - - ArtifactRepository arTwo = new DefaultArtifactRepository( "", "", layout ); - - ml.addParent( new Model(), null, Collections.singletonList( arTwo ), false ); - - Model retriever = new Model(); - - retriever.setGroupId( gOne ); - retriever.setArtifactId( aOne ); - retriever.setVersion( vOne ); - - assertSame( arOne, ( ml.getArtifactRepositories( retriever ) ).get( 0 ) ); - } - - public void testSetOriginAndGetOriginatingModel() - { - Model model = new Model(); - model.setGroupId( "group" ); - model.setArtifactId( "artifact" ); - model.setVersion( "1" ); - - ModelLineage ml = newModelLineage(); - - ml.setOrigin( model, null, null, false ); - - assertEquals( model.getId(), ml.getOriginatingModel().getId() ); - } - - public void testSetOriginAndGetOriginatingFile() - throws IOException - { - ModelLineage ml = newModelLineage(); - - File pomFile = File.createTempFile( "ModelLineage.test.", ".pom" ); - pomFile.deleteOnExit(); - - ml.setOrigin( null, pomFile, null, false ); - - assertEquals( pomFile, ml.getOriginatingPOMFile() ); - } - - public void testSetOriginAndGetOriginatingArtifactRepositoryList() - { - DefaultRepositoryLayout layout = new DefaultRepositoryLayout(); - - ModelLineage ml = newModelLineage(); - - Model mOne = new Model(); - - String gOne = "group"; - String aOne = "artifact"; - String vOne = "1"; - - mOne.setGroupId( gOne ); - mOne.setArtifactId( aOne ); - mOne.setVersion( vOne ); - - ArtifactRepository arOne = new DefaultArtifactRepository( "", "", layout ); - - ml.setOrigin( mOne, null, Collections.singletonList( arOne ), false ); - - assertSame( arOne, ml.getOriginatingArtifactRepositoryList().get( 0 ) ); - } - - public void testGetModelsInDescendingOrder_ShouldAddTwoAndRetrieveInLIFOOrder() - { - ModelLineage ml = newModelLineage(); - - String gOne = "group1"; - String aOne = "artifact1"; - String vOne = "1"; - - Model mOne = new Model(); - - mOne.setGroupId( gOne ); - mOne.setArtifactId( aOne ); - mOne.setVersion( vOne ); - - ml.setOrigin( mOne, null, null, false ); - - String gTwo = "group2"; - String aTwo = "artifact2"; - String vTwo = "2"; - - Model mTwo = new Model(); - - mOne.setGroupId( gTwo ); - mOne.setArtifactId( aTwo ); - mOne.setVersion( vTwo ); - - ml.addParent( mTwo, null, null, false ); - - Iterator it = ml.getModelsInDescendingOrder().iterator(); - - assertTrue( it.hasNext() ); - assertEquals( mTwo.getId(), ( (Model) it.next() ).getId() ); - - assertTrue( it.hasNext() ); - assertEquals( mOne.getId(), ( (Model) it.next() ).getId() ); - } - - public void testGetFilesInDescendingOrder_ShouldAddTwoAndRetrieveInLIFOOrder() - throws IOException - { - ModelLineage ml = newModelLineage(); - - File fOne = File.createTempFile( "ModelLineageTest.fileIterator-test.", "" ); - fOne.deleteOnExit(); - - ml.setOrigin( new Model(), fOne, null, false ); - - File fTwo = File.createTempFile( "ModelLineageTest.fileIterator-test.", "" ); - fTwo.deleteOnExit(); - - ml.addParent( new Model(), fTwo, null, false ); - - Iterator it = ml.getFilesInDescendingOrder().iterator(); - - assertTrue( it.hasNext() ); - assertEquals( fTwo, it.next() ); - - assertTrue( it.hasNext() ); - assertEquals( fOne, it.next() ); - } - - public void testGetArtifactRepositoryListsInDescendingOrder_ShouldAddTwoAndRetrieveInLIFOOrder() - { - DefaultRepositoryLayout layout = new DefaultRepositoryLayout(); - - ModelLineage ml = newModelLineage(); - - ArtifactRepository arOne = new DefaultArtifactRepository( "", "", layout ); - - ml.setOrigin( new Model(), null, Collections.singletonList( arOne ), false ); - - ArtifactRepository arTwo = new DefaultArtifactRepository( "", "", layout ); - - ml.addParent( new Model(), null, Collections.singletonList( arTwo ), false ); - - Iterator it = ml.getArtifactRepositoryListsInDescendingOrder().iterator(); - - assertTrue( it.hasNext() ); - assertSame( arTwo, ( (List) it.next() ).get( 0 ) ); - - assertTrue( it.hasNext() ); - assertSame( arOne, ( (List) it.next() ).get( 0 ) ); - } - -} diff --git a/maven-core/src/test/java/org/apache/maven/extension/lineage/DefaultModelLineageBuilderTest.java b/maven-core/src/test/java/org/apache/maven/extension/lineage/DefaultModelLineageBuilderTest.java deleted file mode 100644 index 51073e29d0..0000000000 --- a/maven-core/src/test/java/org/apache/maven/extension/lineage/DefaultModelLineageBuilderTest.java +++ /dev/null @@ -1,580 +0,0 @@ -package org.apache.maven.extension.lineage; - -/* - * 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 org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.DefaultArtifactRepository; -import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.model.Model; -import org.apache.maven.model.Parent; -import org.apache.maven.model.Profile; -import org.apache.maven.model.Repository; -import org.apache.maven.model.io.xpp3.MavenXpp3Writer; -import org.apache.maven.profiles.DefaultProfileManager; -import org.apache.maven.profiles.ProfileManager; -import org.apache.maven.profiles.activation.DefaultProfileActivationContext; -import org.apache.maven.profiles.activation.ProfileActivationContext; -import org.apache.maven.project.DefaultProjectBuilderConfiguration; -import org.apache.maven.project.ProjectBuildingException; -import org.apache.maven.errors.ProjectErrorReporter; -import org.apache.maven.errors.ProjectReporterManager; -import org.codehaus.plexus.PlexusTestCase; -import org.codehaus.plexus.logging.Logger; -import org.codehaus.plexus.util.FileUtils; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.WriterFactory; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Properties; -import java.util.Set; - -public class DefaultModelLineageBuilderTest - extends PlexusTestCase -{ - - private DefaultModelLineageBuilder modelLineageBuilder; - - private ArtifactRepositoryLayout defaultLayout; - - private Set toDelete = new HashSet(); - - public void setUp() - throws Exception - { - super.setUp(); - getContainer().getLoggerManager().setThresholds( Logger.LEVEL_DEBUG ); - - modelLineageBuilder = (DefaultModelLineageBuilder) lookup( ModelLineageBuilder.ROLE, - DefaultModelLineageBuilder.ROLE_HINT ); - - defaultLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" ); - } - - public void tearDown() - throws Exception - { - super.tearDown(); - - for ( Iterator it = toDelete.iterator(); it.hasNext(); ) - { - File f = (File) it.next(); - - if ( f.exists() ) - { - FileUtils.forceDelete( f ); - } - } - } - - public void testShouldReadSinglePomWithNoParents() - throws IOException, ProjectBuildingException - { - String groupId = "groupId"; - String artifactId = "artifactId"; - String version = "1.0"; - - Model model = new Model(); - - model.setGroupId( groupId ); - model.setArtifactId( artifactId ); - model.setVersion( version ); - - File pomFile = File.createTempFile( "DefaultModelLineageBuilder.test.", ".pom" ); - pomFile.deleteOnExit(); - - Writer writer = null; - try - { - writer = WriterFactory.newXmlWriter( pomFile ); - - new MavenXpp3Writer().write( writer, model ); - } - finally - { - IOUtil.close( writer ); - } - - ModelLineage lineage = modelLineageBuilder.buildModelLineage( pomFile, - new DefaultProjectBuilderConfiguration(), - null, - false, - true ); - - assertEquals( 1, lineage.size() ); - - assertEquals( model.getId(), lineage.getOriginatingModel().getId() ); - } - - public void testReadPOMWithTwoAncestorsInLocalRepository() - throws IOException, ProjectBuildingException - { - // 1. create local repository directory - File localRepoDirectory = File.createTempFile( "DefaultModelLineageBuilder.localRepository.", - "" ); - - localRepoDirectory.delete(); - localRepoDirectory.mkdirs(); - - deleteDirOnExit( localRepoDirectory ); - - // 2. create and write the ancestor model to the local repo directory - - Model ancestor = createModel( "group", "ancestor", "1" ); - writeModel( ancestor, new File( localRepoDirectory, "group/ancestor/1/ancestor-1.pom" ) ); - - // 3. create the parent model with a parent-ref to the ancestor model - - Model parent = createModel( "group", "parent", "1" ); - - Parent parentParent = new Parent(); - parentParent.setGroupId( "group" ); - parentParent.setArtifactId( "ancestor" ); - parentParent.setVersion( "1" ); - - parent.setParent( parentParent ); - - // 4. write the parent model to the local repo directory - writeModel( parent, new File( localRepoDirectory, "group/parent/1/parent-1.pom" ) ); - - // 5. create the current pom with a parent-ref on the parent model - Model current = createModel( "group", "current", "1" ); - - Parent currentParent = new Parent(); - currentParent.setGroupId( "group" ); - currentParent.setArtifactId( "parent" ); - currentParent.setVersion( "1" ); - - current.setParent( currentParent ); - - // 6. write the current pom somewhere - File currentPOM = File.createTempFile( "DefaultModelLineageBuilder.test.", ".pom" ); - currentPOM.deleteOnExit(); - - writeModel( current, currentPOM ); - - // 7. build the lineage. - ArtifactRepository localRepository = new DefaultArtifactRepository( - "local", - localRepoDirectory.toURL() - .toExternalForm(), - defaultLayout ); - - ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, - new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository ), - Collections.EMPTY_LIST, - false, - true ); - - assertEquals( 3, lineage.size() ); - - Iterator modelIterator = lineage.modelIterator(); - - assertEquals( current.getId(), ( (Model) modelIterator.next() ).getId() ); - assertEquals( parent.getId(), ( (Model) modelIterator.next() ).getId() ); - assertEquals( ancestor.getId(), ( (Model) modelIterator.next() ).getId() ); - } - - public void testReadPOMWithMissingParentAndAllowStubsSetToTrue() - throws IOException, ProjectBuildingException - { - // 1. create local repository directory - File localRepoDirectory = File.createTempFile( "DefaultModelLineageBuilder.localRepository.", - "" ); - - localRepoDirectory.delete(); - localRepoDirectory.mkdirs(); - - deleteDirOnExit( localRepoDirectory ); - - // 5. create the current pom with a parent-ref on the parent model - Model current = createModel( "group", "current", "1" ); - - Parent currentParent = new Parent(); - currentParent.setGroupId( "group" ); - currentParent.setArtifactId( "parent" ); - currentParent.setVersion( "1" ); - - current.setParent( currentParent ); - - // 6. write the current pom somewhere - File currentPOM = File.createTempFile( "DefaultModelLineageBuilder.test.", ".pom" ); - currentPOM.deleteOnExit(); - - writeModel( current, currentPOM ); - - // 7. build the lineage. - ArtifactRepository localRepository = new DefaultArtifactRepository( - "local", - localRepoDirectory.toURL() - .toExternalForm(), - defaultLayout ); - - ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, - new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository ), - Collections.EMPTY_LIST, - true, - true ); - - assertEquals( 2, lineage.size() ); - - Iterator modelIterator = lineage.modelIterator(); - - assertEquals( current.getId(), ( (Model) modelIterator.next() ).getId() ); - - Model parent = (Model) modelIterator.next(); - assertEquals( currentParent.getGroupId(), parent.getGroupId() ); - assertEquals( currentParent.getArtifactId(), parent.getArtifactId() ); - assertEquals( currentParent.getVersion(), parent.getVersion() ); - } - - public void testReadPOMWithParentInLocalRepositoryAndAncestorInRemoteRepository() - throws IOException, ProjectBuildingException - { - // 1. create local and remote repository directories - File localRepoDirectory = File.createTempFile( "DefaultModelLineageBuilder.localRepository.", - "" ); - - localRepoDirectory.delete(); - localRepoDirectory.mkdirs(); - - deleteDirOnExit( localRepoDirectory ); - - File remoteRepoDirectory = File.createTempFile( "DefaultModelLineageBuilder.remoteRepository.", - "" ); - - remoteRepoDirectory.delete(); - remoteRepoDirectory.mkdirs(); - - deleteDirOnExit( remoteRepoDirectory ); - - // 2. create and write the ancestor model to the local repo directory - - Model ancestor = createModel( "group", "ancestor", "1" ); - writeModel( ancestor, new File( remoteRepoDirectory, "group/ancestor/1/ancestor-1.pom" ) ); - - // 3. create the parent model with a parent-ref to the ancestor model - - Model parent = createModel( "group", "parent", "1" ); - - Parent parentParent = new Parent(); - parentParent.setGroupId( "group" ); - parentParent.setArtifactId( "ancestor" ); - parentParent.setVersion( "1" ); - - parent.setParent( parentParent ); - - // 4. write the parent model to the local repo directory - writeModel( parent, new File( localRepoDirectory, "group/parent/1/parent-1.pom" ) ); - - // 5. create the current pom with a parent-ref on the parent model - Model current = createModel( "group", "current", "1" ); - - Parent currentParent = new Parent(); - currentParent.setGroupId( "group" ); - currentParent.setArtifactId( "parent" ); - currentParent.setVersion( "1" ); - - current.setParent( currentParent ); - - // 6. write the current pom somewhere - File currentPOM = File.createTempFile( "DefaultModelLineageBuilder.test.", ".pom" ); - currentPOM.deleteOnExit(); - - writeModel( current, currentPOM ); - - // 7. build the lineage. - ArtifactRepository localRepository = new DefaultArtifactRepository( - "local", - localRepoDirectory.toURL() - .toExternalForm(), - defaultLayout ); - - ArtifactRepository remoteRepository = new DefaultArtifactRepository( - "test", - remoteRepoDirectory.toURL() - .toExternalForm(), - defaultLayout ); - - ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, - new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository ), - Collections.singletonList( remoteRepository ), - false, - true ); - - assertEquals( 3, lineage.size() ); - - Iterator modelIterator = lineage.modelIterator(); - - assertEquals( current.getId(), ( (Model) modelIterator.next() ).getId() ); - assertEquals( parent.getId(), ( (Model) modelIterator.next() ).getId() ); - assertEquals( ancestor.getId(), ( (Model) modelIterator.next() ).getId() ); - } - - public void testReadPOMWithParentInSiblingDirectoryUsingSpecifiedRelativePathThatIsADirectory() - throws IOException, ProjectBuildingException - { - // 1. create project-root directory. - File projectRootDirectory = File.createTempFile( "DefaultModelLineageBuilder.projectRootDir.", - "" ); - - projectRootDirectory.delete(); - projectRootDirectory.mkdirs(); - - deleteDirOnExit( projectRootDirectory ); - - // 2. create dir for parent POM within project root directory. - File parentDir = new File( projectRootDirectory, "parent" ); - parentDir.mkdirs(); - - // 2. create dir for child project within project root directory. - File childDir = new File( projectRootDirectory, "child" ); - childDir.mkdirs(); - - // 3. create the parent model in the parent-POM directory - Model parent = createModel( "group", "parent", "1" ); - - writeModel( parent, new File( parentDir, "pom.xml" ) ); - - // 5. create the current pom with a parent-ref on the parent model - Model current = createModel( "group", "child", "1" ); - - Parent currentParent = new Parent(); - currentParent.setGroupId( "group" ); - currentParent.setArtifactId( "parent" ); - currentParent.setVersion( "1" ); - currentParent.setRelativePath( "../parent" ); - - current.setParent( currentParent ); - - // 6. write the current POM to the child directory - File currentPOM = new File( childDir, "pom.xml" ); - writeModel( current, currentPOM ); - - // 7. build the lineage. - ArtifactRepository localRepository = new DefaultArtifactRepository( - "local", - projectRootDirectory.toURL() - .toExternalForm(), - defaultLayout ); - - ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, - new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository ), - Collections.EMPTY_LIST, - false, - true ); - - assertEquals( 2, lineage.size() ); - - Iterator modelIterator = lineage.modelIterator(); - - assertEquals( current.getId(), ( (Model) modelIterator.next() ).getId() ); - assertEquals( parent.getId(), ( (Model) modelIterator.next() ).getId() ); - } - - public void testReadPOMWithParentInRepoBroughtInViaExternalProfile() - throws Exception - { - // 1. create project-root directory. - File projectRootDirectory = createTempDir( "projectRootDir" ); - - // 1. create project-root directory. - File repoRootDirectory = createTempDir( "repoRootDir" ); - - File localRepoRootDirectory = createTempDir( "localRepoRootDir" ); - - // 2. create dir for parent POM within project root directory. - File parentDir = new File( repoRootDirectory, "group/parent/1" ); - parentDir.mkdirs(); - - // 3. create the parent model in the parent-POM directory - Model parent = createModel( "group", "parent", "1" ); - - writeModel( parent, new File( parentDir, "parent-1.pom" ) ); - - // 5. create the current pom with a parent-ref on the parent model - Model current = createModel( "group", "child", "1" ); - - Parent currentParent = new Parent(); - currentParent.setGroupId( "group" ); - currentParent.setArtifactId( "parent" ); - currentParent.setVersion( "1" ); - - current.setParent( currentParent ); - - // 6. write the current POM to the child directory - File currentPOM = new File( projectRootDirectory, "pom.xml" ); - writeModel( current, currentPOM ); - - // 7. build the lineage. - ArtifactRepository localRepository = new DefaultArtifactRepository( - "local", - localRepoRootDirectory.toURL() - .toExternalForm(), - defaultLayout ); - - Profile profile = new Profile(); - profile.setId( "external" ); - - Repository repository = new Repository(); - repository.setId( "temp" ); - repository.setUrl( repoRootDirectory.toURL().toExternalForm() ); - - profile.addRepository( repository ); - - Properties props = System.getProperties(); - ProfileActivationContext ctx = new DefaultProfileActivationContext( props, false ); - - ProfileManager profileManager = new DefaultProfileManager( getContainer(), ctx ); - - profileManager.addProfile( profile ); - profileManager.explicitlyActivate( profile.getId() ); - - ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, - new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository ) - .setGlobalProfileManager( profileManager ), - Collections.EMPTY_LIST, - false, - true ); - - assertEquals( 2, lineage.size() ); - - Iterator modelIterator = lineage.modelIterator(); - - assertEquals( current.getId(), ( (Model) modelIterator.next() ).getId() ); - assertEquals( parent.getId(), ( (Model) modelIterator.next() ).getId() ); - } - - private File createTempDir( String basename ) - throws IOException - { - File dir = File.createTempFile( "DefaultModelLineageBuilder." + basename + ".", "" ); - - dir.delete(); - dir.mkdirs(); - - deleteDirOnExit( dir ); - return dir; - } - - private void deleteDirOnExit( File f ) - { - toDelete.add( f ); - } - - private void writeModel( Model model, - File file ) - throws IOException - { - Writer writer = null; - try - { - file.getParentFile().mkdirs(); - - writer = WriterFactory.newXmlWriter( file ); - new MavenXpp3Writer().write( writer, model ); - - writer.flush(); - } - finally - { - IOUtil.close( writer ); - } - - System.out.println( "Verifying that: " + file.getAbsolutePath() + " exists: " - + file.exists() ); - } - - // TODO: Should this even work reliably? Isn't it a fluke if this is cached, which is what we're testing here?? -// public void testReadPOMWithParentInOtherLocalFileWithBadRelativePath() -// throws Exception -// { -// // 1. create the parent model in a "local" POM file. -// File parentPOM = File.createTempFile( "DefaultModelLineageBuilder.test.", ".pom" ); -// parentPOM.deleteOnExit(); -// -// Model parent = createModel( "group", "parent", "1" ); -// -// // 4. write the parent model to the local repo directory -// writeModel( parent, parentPOM ); -// -// BuildContextManager buildContextManager = (BuildContextManager) lookup( -// BuildContextManager.ROLE, -// "default" ); -// -// ProjectBuildCache cache = ProjectBuildCache.read( buildContextManager ); -// cache.cacheModelFileForModel( parentPOM, parent ); -// cache.store( buildContextManager ); -// -// // 5. create the current pom with a parent-ref on the parent model -// Model current = createModel( "group", "current", "1" ); -// -// Parent currentParent = new Parent(); -// currentParent.setGroupId( "group" ); -// currentParent.setArtifactId( "parent" ); -// currentParent.setVersion( "1" ); -// currentParent.setRelativePath( "../parent/pom.xml" ); -// -// current.setParent( currentParent ); -// -// // 6. write the current pom somewhere -// File currentPOM = File.createTempFile( "DefaultModelLineageBuilder.test.", ".pom" ); -// currentPOM.deleteOnExit(); -// -// writeModel( current, currentPOM ); -// -// // 7. build the lineage. -// File localRepoRootDirectory = createTempDir( "localRepoRootDir" ); -// ArtifactRepository localRepository = new DefaultArtifactRepository( -// "local", -// localRepoRootDirectory.toURL() -// .toExternalForm(), -// defaultLayout ); -// -// ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, localRepository, -// Collections.EMPTY_LIST, null, -// false, true ); -// -// assertEquals( 2, lineage.size() ); -// -// Iterator modelIterator = lineage.modelIterator(); -// -// assertEquals( current.getId(), ( (Model) modelIterator.next() ).getId() ); -// assertEquals( parent.getId(), ( (Model) modelIterator.next() ).getId() ); -// } - - private Model createModel( String groupId, - String artifactId, - String version ) - { - Model model = new Model(); - model.setGroupId( groupId ); - model.setArtifactId( artifactId ); - model.setVersion( version ); - - return model; - } - -} diff --git a/maven-core/src/test/java/org/apache/maven/extension/lineage/DefaultModelLineageTest.java b/maven-core/src/test/java/org/apache/maven/extension/lineage/DefaultModelLineageTest.java deleted file mode 100644 index 95c9ed96fe..0000000000 --- a/maven-core/src/test/java/org/apache/maven/extension/lineage/DefaultModelLineageTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.apache.maven.extension.lineage; - -/* - * 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. - */ - -public class DefaultModelLineageTest - extends AbstractModelLineageTest -{ - - protected ModelLineage newModelLineage() - { - return new DefaultModelLineage(); - } - -} diff --git a/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java b/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java index 9aa2d908d9..987733c560 100644 --- a/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java +++ b/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java @@ -34,8 +34,6 @@ import org.apache.maven.embedder.execution.MavenExecutionRequestPopulator; import org.apache.maven.errors.CoreErrorReporter; import org.apache.maven.errors.CoreReporterManager; import org.apache.maven.execution.*; -import org.apache.maven.extension.BuildExtensionScanner; -import org.apache.maven.extension.ExtensionScanningException; import org.apache.maven.lifecycle.LifecycleException; import org.apache.maven.lifecycle.LifecycleUtils; import org.apache.maven.lifecycle.plan.BuildPlan; @@ -135,8 +133,6 @@ public class MavenEmbedder private MavenProjectBuilder mavenProjectBuilder; - private BuildExtensionScanner extensionScanner; - private MavenXpp3Reader modelReader; private MavenXpp3Writer modelWriter; @@ -345,7 +341,7 @@ public class MavenEmbedder // ---------------------------------------------------------------------- public MavenProject readProject( File mavenProject ) - throws ProjectBuildingException, ExtensionScanningException, MavenExecutionException + throws ProjectBuildingException, MavenExecutionException { CoreErrorReporter errorReporter = request.getErrorReporter(); errorReporter.clearErrors(); @@ -356,12 +352,8 @@ public class MavenEmbedder } private MavenProject readProject( File mavenProject, MavenExecutionRequest request ) - throws ProjectBuildingException, ExtensionScanningException, MissingModuleException + throws ProjectBuildingException, MissingModuleException { - getLogger().debug( "Scanning for extensions: " + mavenProject ); - - extensionScanner.scanForBuildExtensions( mavenProject, request, true ); - getLogger().debug( "Building MavenProject instance: " + mavenProject ); return mavenProjectBuilder.build( mavenProject, request.getProjectBuildingConfiguration() ); @@ -416,10 +408,6 @@ public class MavenEmbedder { return result.addException( e ); } - catch ( ExtensionScanningException e ) - { - return result.addException( e ); - } catch ( MissingModuleException e ) { return result.addException( e ); @@ -676,8 +664,6 @@ public class MavenEmbedder mavenProjectBuilder = (MavenProjectBuilder) container.lookup( MavenProjectBuilder.ROLE ); - extensionScanner = (BuildExtensionScanner) container.lookup( BuildExtensionScanner.ROLE ); - // ---------------------------------------------------------------------- // Artifact related components // ----------------------------------------------------------------------