You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sc...@apache.org on 2017/01/31 00:42:39 UTC
[1/3] maven git commit: [MNG-4463] Version ranges cannot be used for
artifacts with 'import' scope
Repository: maven
Updated Branches:
refs/heads/DEPMGMT-IMPORT [created] ab0869fe3
[MNG-4463] Version ranges cannot be used for artifacts with 'import' scope
o Extended the 'ModelResolver' interface to support resolving 'Dependency's
in addition to 'Parent's.
Closes #64 without merging. ITs are pending to be committed.
Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/f8d837da
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/f8d837da
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/f8d837da
Branch: refs/heads/DEPMGMT-IMPORT
Commit: f8d837da1375a44e76667ed4265882e0732db166
Parents: 2678388
Author: Christian Schulte <sc...@apache.org>
Authored: Sat Jan 30 19:17:34 2016 +0100
Committer: Christian Schulte <sc...@apache.org>
Committed: Tue Jan 31 00:27:28 2017 +0100
----------------------------------------------------------------------
.../internal/DefaultModelResolver.java | 84 ++++++++++++++++----
.../maven/project/ProjectModelResolver.java | 82 +++++++++++++++----
.../model/building/DefaultModelBuilder.java | 20 ++++-
.../maven/model/resolution/ModelResolver.java | 32 ++++++++
4 files changed, 184 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven/blob/f8d837da/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
----------------------------------------------------------------------
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
index f344959..0832a3a 100644
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
+++ b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
@@ -26,6 +26,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import org.apache.maven.model.Dependency;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import org.apache.maven.model.Parent;
@@ -182,25 +183,27 @@ class DefaultModelResolver
return new FileModelSource( pomFile );
}
- public ModelSource resolveModel( Parent parent )
+ @Override
+ public ModelSource resolveModel( final Parent parent )
throws UnresolvableModelException
{
- Artifact artifact = new DefaultArtifact( parent.getGroupId(), parent.getArtifactId(), "", "pom",
- parent.getVersion() );
-
- VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
- versionRangeRequest.setTrace( trace );
-
try
{
- VersionRangeResult versionRangeResult =
+ final Artifact artifact = new DefaultArtifact( parent.getGroupId(), parent.getArtifactId(), "", "pom",
+ parent.getVersion() );
+
+ final VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
+ versionRangeRequest.setTrace( trace );
+
+ final VersionRangeResult versionRangeResult =
versionRangeResolver.resolveVersionRange( session, versionRangeRequest );
if ( versionRangeResult.getHighestVersion() == null )
{
- throw new UnresolvableModelException( "No versions matched the requested range '" + parent.getVersion()
- + "'", parent.getGroupId(), parent.getArtifactId(),
- parent.getVersion() );
+ throw new UnresolvableModelException(
+ String.format( "No versions matched the requested parent version range '%s'",
+ parent.getVersion() ),
+ parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
}
@@ -208,22 +211,69 @@ class DefaultModelResolver
&& versionRangeResult.getVersionConstraint().getRange() != null
&& versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
{
- throw new UnresolvableModelException( "The requested version range '" + parent.getVersion()
- + "' does not specify an upper bound", parent.getGroupId(),
- parent.getArtifactId(), parent.getVersion() );
+ throw new UnresolvableModelException(
+ String.format( "The requested parent version range '%s' does not specify an upper bound",
+ parent.getVersion() ),
+ parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
}
parent.setVersion( versionRangeResult.getHighestVersion().toString() );
+
+ return resolveModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
}
- catch ( VersionRangeResolutionException e )
+ catch ( final VersionRangeResolutionException e )
{
throw new UnresolvableModelException( e.getMessage(), parent.getGroupId(), parent.getArtifactId(),
parent.getVersion(), e );
}
-
- return resolveModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
}
+ @Override
+ public ModelSource resolveModel( final Dependency dependency )
+ throws UnresolvableModelException
+ {
+ try
+ {
+ final Artifact artifact = new DefaultArtifact( dependency.getGroupId(), dependency.getArtifactId(), "",
+ "pom", dependency.getVersion() );
+
+ final VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
+ versionRangeRequest.setTrace( trace );
+
+ final VersionRangeResult versionRangeResult =
+ versionRangeResolver.resolveVersionRange( session, versionRangeRequest );
+
+ if ( versionRangeResult.getHighestVersion() == null )
+ {
+ throw new UnresolvableModelException(
+ String.format( "No versions matched the requested dependency version range '%s'",
+ dependency.getVersion() ),
+ dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+
+ }
+
+ if ( versionRangeResult.getVersionConstraint() != null
+ && versionRangeResult.getVersionConstraint().getRange() != null
+ && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
+ {
+ throw new UnresolvableModelException(
+ String.format( "The requested dependency version range '%s' does not specify an upper bound",
+ dependency.getVersion() ),
+ dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+
+ }
+
+ dependency.setVersion( versionRangeResult.getHighestVersion().toString() );
+
+ return resolveModel( dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+ }
+ catch ( VersionRangeResolutionException e )
+ {
+ throw new UnresolvableModelException( e.getMessage(), dependency.getGroupId(), dependency.getArtifactId(),
+ dependency.getVersion(), e );
+
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/maven/blob/f8d837da/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java b/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
index 184be70..f11e77d 100644
--- a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
@@ -26,6 +26,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import org.apache.maven.model.Dependency;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
@@ -203,24 +204,26 @@ public class ProjectModelResolver
return new FileModelSource( pomFile );
}
- public ModelSource resolveModel( Parent parent )
+ @Override
+ public ModelSource resolveModel( final Parent parent )
throws UnresolvableModelException
{
- Artifact artifact = new DefaultArtifact( parent.getGroupId(), parent.getArtifactId(), "", "pom",
- parent.getVersion() );
-
- VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
- versionRangeRequest.setTrace( trace );
-
try
{
- VersionRangeResult versionRangeResult = resolver.resolveVersionRange( session, versionRangeRequest );
+ final Artifact artifact = new DefaultArtifact( parent.getGroupId(), parent.getArtifactId(), "", "pom",
+ parent.getVersion() );
+
+ final VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
+ versionRangeRequest.setTrace( trace );
+
+ final VersionRangeResult versionRangeResult = resolver.resolveVersionRange( session, versionRangeRequest );
if ( versionRangeResult.getHighestVersion() == null )
{
- throw new UnresolvableModelException( "No versions matched the requested range '" + parent.getVersion()
- + "'", parent.getGroupId(), parent.getArtifactId(),
- parent.getVersion() );
+ throw new UnresolvableModelException(
+ String.format( "No versions matched the requested parent version range '%s'",
+ parent.getVersion() ),
+ parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
}
@@ -228,21 +231,68 @@ public class ProjectModelResolver
&& versionRangeResult.getVersionConstraint().getRange() != null
&& versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
{
- throw new UnresolvableModelException( "The requested version range '" + parent.getVersion()
- + "' does not specify an upper bound", parent.getGroupId(),
- parent.getArtifactId(), parent.getVersion() );
+ throw new UnresolvableModelException(
+ String.format( "The requested parent version range '%s' does not specify an upper bound",
+ parent.getVersion() ),
+ parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
}
parent.setVersion( versionRangeResult.getHighestVersion().toString() );
+
+ return resolveModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
}
- catch ( VersionRangeResolutionException e )
+ catch ( final VersionRangeResolutionException e )
{
throw new UnresolvableModelException( e.getMessage(), parent.getGroupId(), parent.getArtifactId(),
parent.getVersion(), e );
}
+ }
+
+ @Override
+ public ModelSource resolveModel( final Dependency dependency )
+ throws UnresolvableModelException
+ {
+ try
+ {
+ final Artifact artifact = new DefaultArtifact( dependency.getGroupId(), dependency.getArtifactId(), "",
+ "pom", dependency.getVersion() );
+
+ final VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
+ versionRangeRequest.setTrace( trace );
+
+ final VersionRangeResult versionRangeResult = resolver.resolveVersionRange( session, versionRangeRequest );
+
+ if ( versionRangeResult.getHighestVersion() == null )
+ {
+ throw new UnresolvableModelException(
+ String.format( "No versions matched the requested dependency version range '%s'",
+ dependency.getVersion() ),
+ dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+
+ }
+
+ if ( versionRangeResult.getVersionConstraint() != null
+ && versionRangeResult.getVersionConstraint().getRange() != null
+ && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
+ {
+ throw new UnresolvableModelException(
+ String.format( "The requested dependency version range '%s' does not specify an upper bound",
+ dependency.getVersion() ),
+ dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+
+ }
+
+ dependency.setVersion( versionRangeResult.getHighestVersion().toString() );
+
+ return resolveModel( dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+ }
+ catch ( VersionRangeResolutionException e )
+ {
+ throw new UnresolvableModelException( e.getMessage(), dependency.getGroupId(), dependency.getArtifactId(),
+ dependency.getVersion(), e );
- return resolveModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
+ }
}
}
http://git-wip-us.apache.org/repos/asf/maven/blob/f8d837da/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
----------------------------------------------------------------------
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
index a6a8725..a531481 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -1189,7 +1189,25 @@ public class DefaultModelBuilder
final ModelSource importSource;
try
{
- importSource = modelResolver.resolveModel( groupId, artifactId, version );
+ dependency = dependency.clone();
+ importSource = modelResolver.resolveModel( dependency );
+ final String resolvedId =
+ dependency.getGroupId() + ':' + dependency.getArtifactId() + ':' + dependency.getVersion();
+
+ if ( !imported.equals( resolvedId ) && importIds.contains( resolvedId ) )
+ {
+ // A version range has been resolved to a cycle.
+ String message = "The dependencies of type=pom and with scope=import form a cycle: ";
+ for ( String modelId : importIds )
+ {
+ message += modelId + " -> ";
+ }
+ message += resolvedId;
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).
+ setMessage( message ) );
+
+ continue;
+ }
}
catch ( UnresolvableModelException e )
{
http://git-wip-us.apache.org/repos/asf/maven/blob/f8d837da/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
----------------------------------------------------------------------
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java b/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
index c81a536..cb2a3ed 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
@@ -19,6 +19,7 @@ package org.apache.maven.model.resolution;
* under the License.
*/
+import org.apache.maven.model.Dependency;
import org.apache.maven.model.Parent;
import org.apache.maven.model.Repository;
import org.apache.maven.model.building.ModelSource;
@@ -47,16 +48,47 @@ public interface ModelResolver
/**
* Tries to resolve the POM for the specified parent coordinates possibly updating {@code parent}.
+ * <p>
+ * Unlike the {@link #resolveModel(java.lang.String, java.lang.String, java.lang.String)} method, this method
+ * supports version ranges and updates the given {@code parent} instance to match the returned {@code ModelSource}.
+ * If {@code parent} declares a version range, the version corresponding to the returned {@code ModelSource} will
+ * be set on the given {@code parent}.
+ * </p>
*
* @param parent The parent coordinates to resolve, must not be {@code null}.
+ *
* @return The source of the requested POM, never {@code null}.
+ *
* @throws UnresolvableModelException If the POM could not be resolved from any configured repository.
* @since 3.2.2
+ *
+ * @see Parent#clone()
*/
ModelSource resolveModel( Parent parent )
throws UnresolvableModelException;
/**
+ * Tries to resolve the POM for the specified dependency coordinates possibly updating {@code dependency}.
+ * <p>
+ * Unlike the {@link #resolveModel(java.lang.String, java.lang.String, java.lang.String)} method, this method
+ * supports version ranges and updates the given {@code dependency} instance to match the returned
+ * {@code ModelSource}. If {@code dependency} declares a version range, the version corresponding to the returned
+ * {@code ModelSource} will be set on the given {@code dependency}.
+ * </p>
+ *
+ * @param dependency The dependency coordinates to resolve, must not be {@code null}.
+ *
+ * @return The source of the requested POM, never {@code null}.
+ *
+ * @throws UnresolvableModelException If the POM could not be resolved from any configured repository.
+ * @since 3.4
+ *
+ * @see Dependency#clone()
+ */
+ ModelSource resolveModel( Dependency dependency )
+ throws UnresolvableModelException;
+
+ /**
* Adds a repository to use for subsequent resolution requests. The order in which repositories are added matters,
* repositories that were added first should also be searched first. When multiple repositories with the same
* identifier are added, only the first repository being added will be used.
[2/3] maven git commit: [MNG-5527] Relocation does not work for
imported poms
Posted by sc...@apache.org.
[MNG-5527] Relocation does not work for imported poms
Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/6f08fa92
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/6f08fa92
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/6f08fa92
Branch: refs/heads/DEPMGMT-IMPORT
Commit: 6f08fa92081037284a56c01dd620f6ef8786b7d7
Parents: f8d837d
Author: Christian Schulte <sc...@apache.org>
Authored: Tue Jun 21 21:35:40 2016 +0200
Committer: Christian Schulte <sc...@apache.org>
Committed: Tue Jan 31 00:56:05 2017 +0100
----------------------------------------------------------------------
.../model/building/DefaultModelBuilder.java | 190 ++++++++++++-------
1 file changed, 125 insertions(+), 65 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven/blob/6f08fa92/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
----------------------------------------------------------------------
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
index a531481..e25b0b8 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -1095,8 +1095,6 @@ public class DefaultModelBuilder
final WorkspaceModelResolver workspaceResolver = request.getWorkspaceModelResolver();
final ModelResolver modelResolver = request.getModelResolver();
- ModelBuildingRequest importRequest = null;
-
List<DependencyManagement> importMngts = null;
for ( Iterator<Dependency> it = depMngt.getDependencies().iterator(); it.hasNext(); )
@@ -1183,75 +1181,15 @@ public class DefaultModelBuilder
}
}
- // no workspace resolver or workspace resolver returned null (i.e. model not in workspace)
if ( importModel == null )
{
- final ModelSource importSource;
- try
- {
- dependency = dependency.clone();
- importSource = modelResolver.resolveModel( dependency );
- final String resolvedId =
- dependency.getGroupId() + ':' + dependency.getArtifactId() + ':' + dependency.getVersion();
+ // no workspace resolver or workspace resolver returned null (i.e. model not in workspace)
+ importModel = this.buildImportModelFromRepository( request, dependency, importIds, problems );
- if ( !imported.equals( resolvedId ) && importIds.contains( resolvedId ) )
- {
- // A version range has been resolved to a cycle.
- String message = "The dependencies of type=pom and with scope=import form a cycle: ";
- for ( String modelId : importIds )
- {
- message += modelId + " -> ";
- }
- message += resolvedId;
- problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).
- setMessage( message ) );
-
- continue;
- }
- }
- catch ( UnresolvableModelException e )
+ if ( importModel == null )
{
- StringBuilder buffer = new StringBuilder( 256 );
- buffer.append( "Non-resolvable import POM" );
- if ( !containsCoordinates( e.getMessage(), groupId, artifactId, version ) )
- {
- buffer.append( " " ).append( ModelProblemUtils.toId( groupId, artifactId, version ) );
- }
- buffer.append( ": " ).append( e.getMessage() );
-
- problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
- .setMessage( buffer.toString() ).setLocation( dependency.getLocation( "" ) )
- .setException( e ) );
continue;
}
-
- if ( importRequest == null )
- {
- importRequest = new DefaultModelBuildingRequest();
- importRequest.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
- importRequest.setModelCache( request.getModelCache() );
- importRequest.setSystemProperties( request.getSystemProperties() );
- importRequest.setUserProperties( request.getUserProperties() );
- importRequest.setLocationTracking( request.isLocationTracking() );
- }
-
- importRequest.setModelSource( importSource );
- importRequest.setModelResolver( modelResolver.newCopy() );
-
- final ModelBuildingResult importResult;
- try
- {
- importResult = build( importRequest );
- }
- catch ( ModelBuildingException e )
- {
- problems.addAll( e.getProblems() );
- continue;
- }
-
- problems.addAll( importResult.getProblems() );
-
- importModel = importResult.getEffectiveModel();
}
importMngt = importModel.getDependencyManagement();
@@ -1277,6 +1215,128 @@ public class DefaultModelBuilder
dependencyManagementImporter.importManagement( model, importMngts, request, problems );
}
+ private Model buildImportModelFromRepository( final ModelBuildingRequest targetModelBuildingRequest,
+ final Dependency dependency, final Collection<String> importIds,
+ final DefaultModelProblemCollector problems )
+ {
+ try
+ {
+ final String imported =
+ String.format( "%s:%s:%s", dependency.getGroupId(), dependency.getArtifactId(),
+ dependency.getVersion() );
+
+ final Dependency resolvedDependency = dependency.clone();
+ final ModelSource importSource =
+ targetModelBuildingRequest.getModelResolver().resolveModel( resolvedDependency );
+
+ final String resolvedId =
+ String.format( "%s:%s:%s", resolvedDependency.getGroupId(), resolvedDependency.getArtifactId(),
+ resolvedDependency.getVersion() );
+
+ if ( !imported.equals( resolvedId ) && importIds.contains( resolvedId ) )
+ {
+ // A version range has been resolved to a cycle.
+ String message = "The dependencies of type=pom and scope=" + dependency.getScope() + " form a cycle: ";
+ for ( String modelId : importIds )
+ {
+ message += modelId + " -> ";
+ }
+ message += resolvedId;
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).setMessage( message ) );
+ }
+ else
+ {
+ final ModelBuildingRequest importRequest = new DefaultModelBuildingRequest();
+ importRequest.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
+ importRequest.setModelCache( targetModelBuildingRequest.getModelCache() );
+ importRequest.setSystemProperties( targetModelBuildingRequest.getSystemProperties() );
+ importRequest.setUserProperties( targetModelBuildingRequest.getUserProperties() );
+ importRequest.setLocationTracking( targetModelBuildingRequest.isLocationTracking() );
+ importRequest.setModelSource( importSource );
+ importRequest.setModelResolver( targetModelBuildingRequest.getModelResolver().newCopy() );
+
+ final ModelBuildingResult importResult = build( importRequest );
+ problems.addAll( importResult.getProblems() );
+
+ Model importModel = importResult.getEffectiveModel();
+
+ if ( importModel.getDistributionManagement() != null
+ && importModel.getDistributionManagement().getRelocation() != null )
+ {
+ final Dependency relocated = dependency.clone();
+ relocated.setGroupId( importModel.getDistributionManagement().getRelocation().getGroupId() );
+ relocated.setArtifactId( importModel.getDistributionManagement().getRelocation().getArtifactId() );
+ relocated.setVersion( importModel.getDistributionManagement().getRelocation().getVersion() );
+
+ String message = String.format(
+ "The dependency of type='%s' and scope='%s' has been relocated to '%s:%s:%s'",
+ dependency.getType(), dependency.getScope(), relocated.getGroupId(),
+ relocated.getArtifactId(), relocated.getVersion() );
+
+ if ( importModel.getDistributionManagement().getRelocation().getMessage() != null )
+ {
+ message += ". " + importModel.getDistributionManagement().getRelocation().getMessage();
+ }
+
+ problems.add( new ModelProblemCollectorRequest( Severity.WARNING, Version.BASE ).
+ setMessage( message ).
+ setLocation( importModel.getDistributionManagement().getRelocation().getLocation( "" ) ) );
+
+ importModel = this.buildImportModelFromRepository(
+ targetModelBuildingRequest, relocated, importIds, problems );
+
+ }
+
+ return importModel;
+ }
+ }
+ catch ( final UnresolvableModelException e )
+ {
+ final StringBuilder buffer = new StringBuilder( 256 );
+ buffer.append( "Non-resolvable " ).append( dependency.getScope() ).append( " POM" );
+
+ if ( !containsCoordinates( e.getMessage(), dependency.getGroupId(), dependency.getArtifactId(),
+ dependency.getVersion() ) )
+ {
+ buffer.append( ' ' ).append( ModelProblemUtils.toId(
+ dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() ) );
+
+ }
+
+ buffer.append( ": " ).append( e.getMessage() );
+
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).
+ setMessage( buffer.toString() ).
+ setLocation( dependency.getLocation( "" ) ).
+ setException( e ) );
+
+ }
+ catch ( final ModelBuildingException e )
+ {
+ final StringBuilder buffer = new StringBuilder( 256 );
+ buffer.append( "Failure building " ).append( dependency.getScope() ).append( " POM" );
+
+ if ( !containsCoordinates( e.getMessage(), dependency.getGroupId(), dependency.getArtifactId(),
+ dependency.getVersion() ) )
+ {
+ buffer.append( ' ' ).append( ModelProblemUtils.toId(
+ dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() ) );
+
+ }
+
+ buffer.append( ": " ).append( e.getMessage() );
+
+ problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).
+ setMessage( buffer.toString() ).
+ setLocation( dependency.getLocation( "" ) ).
+ setException( e ) );
+
+ problems.addAll( e.getProblems() );
+ }
+
+ return null;
+ }
+
private <T> void putCache( ModelCache modelCache, String groupId, String artifactId, String version,
ModelCacheTag<T> tag, T data )
{
[3/3] maven git commit: [MNG-5600] Dependency management import
should support exclusions.
Posted by sc...@apache.org.
[MNG-5600] Dependency management import should support exclusions.
Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/ab0869fe
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/ab0869fe
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/ab0869fe
Branch: refs/heads/DEPMGMT-IMPORT
Commit: ab0869fe359a16b597919341dcf95f01ade5cf1a
Parents: 6f08fa9
Author: Christian Schulte <sc...@apache.org>
Authored: Sun Jun 19 16:32:25 2016 +0200
Committer: Christian Schulte <sc...@apache.org>
Committed: Tue Jan 31 01:10:34 2017 +0100
----------------------------------------------------------------------
.../model/building/DefaultModelBuilder.java | 59 +++++++++++++++-----
1 file changed, 45 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven/blob/ab0869fe/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
----------------------------------------------------------------------
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
index e25b0b8..a45eae8 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -19,7 +19,16 @@ package org.apache.maven.model.building;
* under the License.
*/
-
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
import org.apache.commons.lang3.Validate;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
@@ -28,6 +37,7 @@ import org.apache.maven.model.Activation;
import org.apache.maven.model.Build;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Exclusion;
import org.apache.maven.model.InputLocation;
import org.apache.maven.model.InputSource;
import org.apache.maven.model.Model;
@@ -62,18 +72,6 @@ import org.apache.maven.model.superpom.SuperPomProvider;
import org.apache.maven.model.validation.ModelValidator;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
import static org.apache.maven.model.building.Result.error;
import static org.apache.maven.model.building.Result.newResult;
@@ -1199,7 +1197,40 @@ public class DefaultModelBuilder
importMngt = new DependencyManagement();
}
- putCache( request.getModelCache(), groupId, artifactId, version, ModelCacheTag.IMPORT, importMngt );
+ // [MNG-5600] Dependency management import should support exclusions.
+ if ( !dependency.getExclusions().isEmpty() )
+ {
+ for ( final Exclusion exclusion : dependency.getExclusions() )
+ {
+ if ( exclusion.getGroupId() != null && exclusion.getArtifactId() != null )
+ {
+ for ( final Iterator<Dependency> dependencies = importMngt.getDependencies().iterator();
+ dependencies.hasNext(); )
+ {
+ final Dependency candidate = dependencies.next();
+
+ if ( ( exclusion.getGroupId().equals( "*" )
+ || exclusion.getGroupId().equals( candidate.getGroupId() ) )
+ && ( exclusion.getArtifactId().equals( "*" )
+ || exclusion.getArtifactId().equals( candidate.getArtifactId() ) ) )
+ {
+ // Dependency excluded from import.
+ dependencies.remove();
+ }
+ }
+ }
+ }
+
+ for ( final Dependency includedDependency : importMngt.getDependencies() )
+ {
+ includedDependency.getExclusions().addAll( dependency.getExclusions() );
+ }
+ }
+ else
+ {
+ // Only dependency managements without exclusion processing applied can be cached.
+ putCache( request.getModelCache(), groupId, artifactId, version, ModelCacheTag.IMPORT, importMngt );
+ }
}
if ( importMngts == null )