Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id B6A5A200C03 for ; Sat, 21 Jan 2017 19:00:53 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id B5286160B42; Sat, 21 Jan 2017 18:00:53 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 3722A160B4A for ; Sat, 21 Jan 2017 19:00:52 +0100 (CET) Received: (qmail 22208 invoked by uid 500); 21 Jan 2017 18:00:51 -0000 Mailing-List: contact commits-help@maven.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@maven.apache.org Delivered-To: mailing list commits@maven.apache.org Received: (qmail 22191 invoked by uid 99); 21 Jan 2017 18:00:51 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 21 Jan 2017 18:00:51 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id ECFD4DFD71; Sat, 21 Jan 2017 18:00:50 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: schulte@apache.org To: commits@maven.apache.org Date: Sat, 21 Jan 2017 18:00:50 -0000 Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: [1/2] maven git commit: [MNG-2199] Support version ranges in parent elements [Forced Update!] archived-at: Sat, 21 Jan 2017 18:00:53 -0000 Repository: maven Updated Branches: refs/heads/MNG-2199-jenkinsfile f47f810f4 -> 9c47113f3 (forced update) [MNG-2199] Support version ranges in parent elements o Updated to fix parent version range resolution broken since Maven 3.2.3 and to remove version range resolution logic obsolete since 3.2.3. o Updated to make local and remote parent model resolution consistent when using version ranges. When referencing a parent using version ranges, inheriting the version or using expressions for the project version should not be supported. It has been implemented that way for remote parent resolution from day one. For local parent resolution the version in any parent declarations had been ignored completely. Work on fixing this is tracked by MNG-5840. Commit 40d5087b6b134842e2b61a567dbb4bfbcfab7ae6 got released with Maven 3.3.4. Regressions had been fixed by commits 25f5143169d39075cee67d9f4d11649cce0fafa0 and bd87258629db8e3fcc7aa04777afc16314c3cde0 and released with Maven 3.3.6. This commit adds the final missing bits to make local and remote parent resolution behave the same way as much as possible. Remote parent resolution still is a bit more strict than local parent resolution due to a different API in use. When resolving a parent from a repository using version ranges, the ModelBuilder verifies the range in use to declare an upper bound. When resolving a parent locally using version ranges, those ranges are not required to declare an upper bound because the API in use does not support querying that. Authoring a POM relying on this difference should be considered a bug. o Added test cases to maven-core testing parent version range resolution for local and remote parent models. Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/a65b71d5 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/a65b71d5 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/a65b71d5 Branch: refs/heads/MNG-2199-jenkinsfile Commit: a65b71d5b724947fff4f541cb6dd956576090cda Parents: d413296 Author: Christian Schulte Authored: Sat Dec 12 20:28:56 2015 +0100 Committer: Christian Schulte Committed: Sat Jan 21 18:57:40 2017 +0100 ---------------------------------------------------------------------- .../maven/project/DefaultProjectBuilder.java | 71 ++++------ .../project/DefaultProjectBuildingRequest.java | 15 ++- .../maven/project/ProjectBuildingRequest.java | 14 +- .../project/AbstractMavenProjectTestCase.java | 11 ++ .../project/DefaultMavenProjectBuilderTest.java | 130 +++++++++++++++++++ .../repository/TestRepositoryConnector.java | 38 ++++++ .../org/apache/apache/1/apache-1.pom | 82 ++++++++++++ .../org/apache/apache/maven-metadata.xml | 13 ++ .../pom.xml | 12 ++ .../pom.xml | 11 ++ .../parent-version-range-external-valid/pom.xml | 11 ++ .../child/pom.xml | 12 ++ .../pom.xml | 7 + .../child/pom.xml | 11 ++ .../pom.xml | 7 + .../child/pom.xml | 11 ++ .../parent-version-range-local-valid/pom.xml | 7 + .../model/building/DefaultModelBuilder.java | 25 +++- 18 files changed, 435 insertions(+), 53 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java index 9d51a6d..e29efa4 100644 --- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java +++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java @@ -43,7 +43,6 @@ import org.apache.maven.model.DependencyManagement; import org.apache.maven.model.DeploymentRepository; 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.Profile; import org.apache.maven.model.ReportPlugin; @@ -73,9 +72,6 @@ import org.eclipse.aether.repository.RemoteRepository; import org.eclipse.aether.repository.WorkspaceRepository; import org.eclipse.aether.resolution.ArtifactRequest; import org.eclipse.aether.resolution.ArtifactResult; -import org.eclipse.aether.resolution.VersionRangeRequest; -import org.eclipse.aether.resolution.VersionRangeResolutionException; -import org.eclipse.aether.resolution.VersionRangeResult; /** */ @@ -298,44 +294,6 @@ public class DefaultProjectBuilder boolean localProject; - if ( request.isResolveVersionRanges() ) - { - VersionRangeRequest versionRangeRequest = new VersionRangeRequest( pomArtifact, config.repositories, null ); - - try - { - VersionRangeResult versionRangeResult = - repoSystem.resolveVersionRange( config.session, versionRangeRequest ); - - if ( versionRangeResult.getHighestVersion() == null ) - { - throw new ProjectBuildingException( - artifact.getId(), "Error resolving project artifact: No versions matched the requested range", - (Throwable) null ); - - } - - if ( versionRangeResult.getVersionConstraint() != null - && versionRangeResult.getVersionConstraint().getRange() != null - && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null ) - { - throw new ProjectBuildingException( - artifact.getId(), - "Error resolving project artifact: The requested version range does not specify an upper bound", - (Throwable) null ); - - } - - pomArtifact = pomArtifact.setVersion( versionRangeResult.getHighestVersion().toString() ); - } - catch ( VersionRangeResolutionException e ) - { - throw new ProjectBuildingException( - artifact.getId(), "Error resolving project artifact: " + e.getMessage(), e ); - - } - } - try { ArtifactRequest pomRequest = new ArtifactRequest(); @@ -654,11 +612,32 @@ public class DefaultProjectBuilder project.setModel( model ); project.setOriginalModel( result.getRawModel() ); project.setFile( model.getPomFile() ); - Parent p = model.getParent(); - if ( p != null ) + + Model parentModel = null; + if ( !result.getModelIds().get( 1 ).isEmpty() ) + { + // Note: The parent model already got resolved by the ModelBuilder based on model.getParent(). + parentModel = result.getRawModel( result.getModelIds().get( 1 ) ); + } + + if ( parentModel != null ) { - project.setParentArtifact( repositorySystem.createProjectArtifact( p.getGroupId(), p.getArtifactId(), - p.getVersion() ) ); + String parentGroupId = parentModel.getGroupId(); + if ( parentGroupId == null && parentModel.getParent() != null ) + { + parentGroupId = parentModel.getParent().getGroupId(); + } + + String parentVersion = parentModel.getVersion(); + if ( parentVersion == null && parentModel.getParent() != null ) + { + parentVersion = parentModel.getParent().getVersion(); + } + + project.setParentArtifact( repositorySystem.createProjectArtifact( parentGroupId, + parentModel.getArtifactId(), + parentVersion ) ); + // org.apache.maven.its.mng4834:parent:0.1 String parentModelId = result.getModelIds().get( 1 ); File parentPomFile = result.getRawModel( parentModelId ).getPomFile(); http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java index f439240..97eb276 100644 --- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java +++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java @@ -62,6 +62,7 @@ public class DefaultProjectBuildingRequest private boolean resolveDependencies; + @Deprecated private boolean resolveVersionRanges; private RepositoryMerging repositoryMerging = RepositoryMerging.POM_DOMINANT; @@ -221,14 +222,24 @@ public class DefaultProjectBuildingRequest return resolveDependencies; } - /** @since 3.2.2 */ + /** + * @since 3.2.2 + * @deprecated This got added when implementing MNG-2199 and is no longer used. + * Commit 6cf9320942c34bc68205425ab696b1712ace9ba4 updated the way 'MavenProject' objects are initialized. + */ + @Deprecated public ProjectBuildingRequest setResolveVersionRanges( boolean value ) { this.resolveVersionRanges = value; return this; } - /** @since 3.2.2 */ + /** + * @since 3.2.2 + * @deprecated This got added when implementing MNG-2199 and is no longer used. + * Commit 6cf9320942c34bc68205425ab696b1712ace9ba4 updated the way 'MavenProject' objects are initialized. + */ + @Deprecated public boolean isResolveVersionRanges() { return this.resolveVersionRanges; http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java b/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java index 0380278..17a53b1 100644 --- a/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java +++ b/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java @@ -168,10 +168,20 @@ public interface ProjectBuildingRequest */ RepositoryMerging getRepositoryMerging(); - /** @since 3.2.2 */ + /** + * @since 3.2.2 + * @deprecated This got added when implementing MNG-2199 and is no longer used. + * Commit 6cf9320942c34bc68205425ab696b1712ace9ba4 updated the way 'MavenProject' objects are initialized. + */ + @Deprecated boolean isResolveVersionRanges(); - /** @since 3.2.2 */ + /** + * @since 3.2.2 + * @deprecated This got added when implementing MNG-2199 and is no longer used. + * Commit 6cf9320942c34bc68205425ab696b1712ace9ba4 updated the way 'MavenProject' objects are initialized. + */ + @Deprecated ProjectBuildingRequest setResolveVersionRanges( boolean value ); /** http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java ---------------------------------------------------------------------- diff --git a/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java b/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java index 73bdbca..71616fa 100644 --- a/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java +++ b/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java @@ -169,6 +169,17 @@ public abstract class AbstractMavenProjectTestCase return projectBuilder.build( pom, configuration ).getProject(); } + protected MavenProject getProjectFromRemoteRepository( final File pom ) + throws Exception + { + final ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest(); + configuration.setLocalRepository( this.getLocalRepository() ); + configuration.setRemoteRepositories( Arrays.asList( this.repositorySystem.createDefaultRemoteRepository() ) ); + initRepoSession( configuration ); + + return projectBuilder.build( pom, configuration ).getProject(); + } + protected ProjectBuildingRequest newBuildingRequest() throws Exception { http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java ---------------------------------------------------------------------- diff --git a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java index d61fc6e..3959cdd 100644 --- a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java +++ b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java @@ -189,4 +189,134 @@ public class DefaultMavenProjectBuilderTest request.setResolveDependencies( true ); projectBuilder.build( pomFile, request ); } + + /** + * Tests whether local version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildValidParentVersionRangeLocally() throws Exception + { + File f1 = getTestFile( "src/test/resources/projects/parent-version-range-local-valid/child/pom.xml" ); + + final MavenProject childProject = getProject( f1 ); + + assertNotNull( childProject.getParentArtifact() ); + assertEquals( childProject.getParentArtifact().getVersion(), "1" ); + assertNotNull( childProject.getParent() ); + assertEquals( childProject.getParent().getVersion(), "1" ); + assertNotNull( childProject.getModel().getParent() ); + assertEquals( childProject.getModel().getParent().getVersion(), "[1,10]" ); + } + + /** + * Tests whether local version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildParentVersionRangeLocallyWithoutChildVersion() throws Exception + { + File f1 = + getTestFile( "src/test/resources/projects/parent-version-range-local-child-without-version/child/pom.xml" ); + + try + { + getProject( f1 ); + fail( "Expected 'ProjectBuildingException' not thrown." ); + } + catch ( final ProjectBuildingException e ) + { + assertNotNull( e.getMessage() ); + assertTrue( e.getMessage().contains( "Version must be a constant" ) ); + } + } + + /** + * Tests whether local version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildParentVersionRangeLocallyWithChildVersionExpression() throws Exception + { + File f1 = + getTestFile( + "src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml" ); + + try + { + getProject( f1 ); + fail( "Expected 'ProjectBuildingException' not thrown." ); + } + catch ( final ProjectBuildingException e ) + { + assertNotNull( e.getMessage() ); + assertTrue( e.getMessage().contains( "Version must be a constant" ) ); + } + } + + /** + * Tests whether external version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildParentVersionRangeExternally() throws Exception + { + File f1 = getTestFile( "src/test/resources/projects/parent-version-range-external-valid/pom.xml" ); + + final MavenProject childProject = this.getProjectFromRemoteRepository( f1 ); + + assertNotNull( childProject.getParentArtifact() ); + assertEquals( childProject.getParentArtifact().getVersion(), "1" ); + assertNotNull( childProject.getParent() ); + assertEquals( childProject.getParent().getVersion(), "1" ); + assertNotNull( childProject.getModel().getParent() ); + assertEquals( childProject.getModel().getParent().getVersion(), "[1,1]" ); + } + + /** + * Tests whether external version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildParentVersionRangeExternallyWithoutChildVersion() throws Exception + { + File f1 = + getTestFile( + "src/test/resources/projects/parent-version-range-external-child-without-version/pom.xml" ); + + try + { + this.getProjectFromRemoteRepository( f1 ); + fail( "Expected 'ProjectBuildingException' not thrown." ); + } + catch ( final ProjectBuildingException e ) + { + assertNotNull( e.getMessage() ); + assertTrue( e.getMessage().contains( "Version must be a constant" ) ); + } + } + + /** + * Tests whether external version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildParentVersionRangeExternallyWithChildVersionExpression() throws Exception + { + File f1 = + getTestFile( + "src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml" ); + + try + { + this.getProjectFromRemoteRepository( f1 ); + fail( "Expected 'ProjectBuildingException' not thrown." ); + } + catch ( final ProjectBuildingException e ) + { + assertNotNull( e.getMessage() ); + assertTrue( e.getMessage().contains( "Version must be a constant" ) ); + } + } + } http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java ---------------------------------------------------------------------- diff --git a/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java b/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java index 91ace4f..cb1243c 100644 --- a/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java +++ b/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java @@ -27,6 +27,7 @@ import java.util.Collection; import org.codehaus.plexus.util.FileUtils; import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.metadata.Metadata; import org.eclipse.aether.repository.RemoteRepository; import org.eclipse.aether.spi.connector.ArtifactDownload; import org.eclipse.aether.spi.connector.ArtifactUpload; @@ -35,6 +36,8 @@ import org.eclipse.aether.spi.connector.MetadataUpload; import org.eclipse.aether.spi.connector.RepositoryConnector; import org.eclipse.aether.transfer.ArtifactNotFoundException; import org.eclipse.aether.transfer.ArtifactTransferException; +import org.eclipse.aether.transfer.MetadataNotFoundException; +import org.eclipse.aether.transfer.MetadataTransferException; /** * @author Benjamin Bentmann @@ -89,6 +92,28 @@ public class TestRepositoryConnector } } } + if ( metadataDownloads != null ) + { + for ( final MetadataDownload download : metadataDownloads ) + { + File remoteFile = new File( basedir, path( download.getMetadata() ) ); + try + { + FileUtils.copyFile( remoteFile, download.getFile() ); + } + catch ( IOException e ) + { + if ( !remoteFile.exists() ) + { + download.setException( new MetadataNotFoundException( download.getMetadata(), repository ) ); + } + else + { + download.setException( new MetadataTransferException( download.getMetadata(), repository, e ) ); + } + } + } + } } private String path( Artifact artifact ) @@ -113,6 +138,19 @@ public class TestRepositoryConnector return path.toString(); } + private String path( Metadata metadata ) + { + StringBuilder path = new StringBuilder( 128 ); + + path.append( metadata.getGroupId().replace( '.', '/' ) ).append( '/' ); + + path.append( metadata.getArtifactId() ).append( '/' ); + + path.append( "maven-metadata.xml" ); + + return path.toString(); + } + public void put( Collection artifactUploads, Collection metadataUploads ) { http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/remote-repo/org/apache/apache/1/apache-1.pom ---------------------------------------------------------------------- diff --git a/maven-core/src/test/remote-repo/org/apache/apache/1/apache-1.pom b/maven-core/src/test/remote-repo/org/apache/apache/1/apache-1.pom new file mode 100644 index 0000000..ad6b854 --- /dev/null +++ b/maven-core/src/test/remote-repo/org/apache/apache/1/apache-1.pom @@ -0,0 +1,82 @@ + + + + + + 4.0.0 + + + org.apache + apache + 1 + pom + The Apache Software Foundation + + The Apache Software Foundation provides support for the Apache community of open-source software projects. + The Apache projects are characterized by a collaborative, consensus based development process, an open and + pragmatic software license, and a desire to create high quality software that leads the way in its field. + We consider ourselves not simply a group of projects sharing a server, but rather a community of developers + and users. + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + Apache Software Foundation + http://www.apache.org/ + + http://www.apache.org/ + + + apache.snapshots + Apache Snapshot Repository + http://svn.apache.org/maven-snapshot-repository + + false + + + + + + + apache.releases + Apache Release Distribution Repository + scp://minotaur.apache.org/www/www.apache.org/dist/maven-repository + + + apache.snapshots + Apache Development Snapshot Repository + scp://minotaur.apache.org/www/cvs.apache.org/maven-snapshot-repository + + + + + Apache Announce List + announce-subscribe@apache.org + announce-unsubscribe@apache.org + announce@apache.org + http://mail-archives.apache.org/mod_mbox/www-announce/ + + + + http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/remote-repo/org/apache/apache/maven-metadata.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/remote-repo/org/apache/apache/maven-metadata.xml b/maven-core/src/test/remote-repo/org/apache/apache/maven-metadata.xml new file mode 100644 index 0000000..596f967 --- /dev/null +++ b/maven-core/src/test/remote-repo/org/apache/apache/maven-metadata.xml @@ -0,0 +1,13 @@ + + + org.apache + apache + + 1 + 1 + + 1 + + 20150428055824 + + http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml new file mode 100644 index 0000000..d07ad6e --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml @@ -0,0 +1,12 @@ + + 4.0.0 + + org.apache + apache + [1,1] + + child + + ${some.property} + pom + http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/resources/projects/parent-version-range-external-child-without-version/pom.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/resources/projects/parent-version-range-external-child-without-version/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-external-child-without-version/pom.xml new file mode 100644 index 0000000..4f5a004 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-external-child-without-version/pom.xml @@ -0,0 +1,11 @@ + + 4.0.0 + + org.apache + apache + [1,1] + + child + + pom + http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/resources/projects/parent-version-range-external-valid/pom.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/resources/projects/parent-version-range-external-valid/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-external-valid/pom.xml new file mode 100644 index 0000000..54eea90 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-external-valid/pom.xml @@ -0,0 +1,11 @@ + + 4.0.0 + + org.apache + apache + [1,1] + + child + 2 + pom + http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml new file mode 100644 index 0000000..066a11e --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml @@ -0,0 +1,12 @@ + + 4.0.0 + + parent-version-range-local + parent + [1,10] + + child + + ${some.property} + pom + http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/pom.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/pom.xml new file mode 100644 index 0000000..a82bbf2 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/pom.xml @@ -0,0 +1,7 @@ + + 4.0.0 + parent-version-range-local + parent + 1 + pom + http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/child/pom.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/child/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/child/pom.xml new file mode 100644 index 0000000..645a8f1 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/child/pom.xml @@ -0,0 +1,11 @@ + + 4.0.0 + + parent-version-range-local + parent + [1,10] + + child + + pom + http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/pom.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/pom.xml new file mode 100644 index 0000000..a82bbf2 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/pom.xml @@ -0,0 +1,7 @@ + + 4.0.0 + parent-version-range-local + parent + 1 + pom + http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/resources/projects/parent-version-range-local-valid/child/pom.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-valid/child/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-valid/child/pom.xml new file mode 100644 index 0000000..886bcdf --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-local-valid/child/pom.xml @@ -0,0 +1,11 @@ + + 4.0.0 + + parent-version-range-local + parent + [1,10] + + child + 1 + pom + http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/maven-core/src/test/resources/projects/parent-version-range-local-valid/pom.xml ---------------------------------------------------------------------- diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-valid/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-valid/pom.xml new file mode 100644 index 0000000..a82bbf2 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-local-valid/pom.xml @@ -0,0 +1,7 @@ + + 4.0.0 + parent-version-range-local + parent + 1 + pom + http://git-wip-us.apache.org/repos/asf/maven/blob/a65b71d5/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..49a1f3c 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 @@ -333,7 +333,7 @@ public class DefaultModelBuilder currentData = superData; } else if ( currentData == resultData ) - { // First iteration - add initial parent id after version resolution. + { // First iteration - add initial id after version resolution. currentData.setGroupId( currentData.getRawModel().getGroupId() == null ? parentData.getGroupId() : currentData.getRawModel() .getGroupId() ); @@ -938,6 +938,26 @@ public class DefaultModelBuilder // version skew drop back to resolution from the repository return null; } + + // Validate versions aren't inherited when using parent ranges the same way as when read externally. + if ( childModel.getVersion() == null ) + { + problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 ) + .setMessage( "Version must be a constant" ).setLocation( childModel.getLocation( "" ) ) ); + + } + else + { + if ( childModel.getVersion().contains( "${" ) ) + { + problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 ) + .setMessage( "Version must be a constant" ) + .setLocation( childModel.getLocation( "version" ) ) ); + + } + } + + // MNG-2199: What else to check here ? } catch ( InvalidVersionSpecificationException e ) { @@ -1054,8 +1074,7 @@ public class DefaultModelBuilder } else { - if ( childModel.getVersion() - .contains( "${" ) ) + if ( childModel.getVersion().contains( "${" ) ) { problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 ) .setMessage( "Version must be a constant" )