From cc4a6c4e23f331c9aafe8b935c6cc06a096b5103 Mon Sep 17 00:00:00 2001 From: Jeff Maxwell Date: Wed, 6 Jan 2021 14:38:42 -0600 Subject: [PATCH 1/2] [MNG-6727] Changed check to project.version and project.parent.version # Conflicts: # maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java --- .../DefaultMavenProjectBuilderTest.java | 89 ++++++++++++++++++- .../pom.xml | 12 +++ .../pom.xml | 4 +- .../pom.xml | 14 +++ .../child/pom.xml | 12 +++ .../pom.xml | 7 ++ .../child/pom.xml | 4 +- .../pom.xml | 7 ++ .../child/pom.xml | 14 +++ .../pom.xml | 0 .../model/building/DefaultModelBuilder.java | 18 +++- 11 files changed, 169 insertions(+), 12 deletions(-) create mode 100644 maven-core/src/test/resources/projects/parent-version-range-external-child-project-parent-version-expression/pom.xml rename maven-core/src/test/resources/projects/{parent-version-range-external-child-version-expression => parent-version-range-external-child-project-version-expression}/pom.xml (69%) create mode 100644 maven-core/src/test/resources/projects/parent-version-range-external-child-revision-expression/pom.xml create mode 100644 maven-core/src/test/resources/projects/parent-version-range-local-child-project-parent-version-expression/child/pom.xml create mode 100644 maven-core/src/test/resources/projects/parent-version-range-local-child-project-parent-version-expression/pom.xml rename maven-core/src/test/resources/projects/{parent-version-range-local-child-version-expression => parent-version-range-local-child-project-version-expression}/child/pom.xml (70%) create mode 100644 maven-core/src/test/resources/projects/parent-version-range-local-child-project-version-expression/pom.xml create mode 100644 maven-core/src/test/resources/projects/parent-version-range-local-child-revision-expression/child/pom.xml rename maven-core/src/test/resources/projects/{parent-version-range-local-child-version-expression => parent-version-range-local-child-revision-expression}/pom.xml (100%) 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 008c6d3bdc3..088e04e919a 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 @@ -298,11 +298,11 @@ public void testBuildParentVersionRangeLocallyWithoutChildVersion() throws Excep * * @throws Exception */ - public void testBuildParentVersionRangeLocallyWithChildVersionExpression() throws Exception + public void testBuildParentVersionRangeLocallyWithChildProjectVersionExpression() throws Exception { File f1 = getTestFile( - "src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml" ); + "src/test/resources/projects/parent-version-range-local-child-project-version-expression/child/pom.xml" ); try { @@ -315,7 +315,47 @@ public void testBuildParentVersionRangeLocallyWithChildVersionExpression() throw assertThat( e.getMessage(), containsString( "Version must be a constant" ) ); } } + + /** + * Tests whether local version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildParentVersionRangeLocallyWithChildProjectParentVersionExpression() throws Exception + { + File f1 = + getTestFile( + "src/test/resources/projects/parent-version-range-local-child-project-parent-version-expression/child/pom.xml" ); + try + { + getProject( f1 ); + fail( "Expected 'ProjectBuildingException' not thrown." ); + } + catch ( final ProjectBuildingException e ) + { + assertNotNull( e.getMessage() ); + assertThat( e.getMessage(), containsString( "Version must be a constant" ) ); + } + } + + /** + * Tests whether local version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildParentVersionRangeLocallyWithChildRevisionExpression() throws Exception + { + File f1 = + getTestFile( + "src/test/resources/projects/parent-version-range-local-child-revision-expression/child/pom.xml" ); + + MavenProject mp = this.getProjectFromRemoteRepository( f1 ); + + assertEquals("1.0-SNAPSHOT", mp.getVersion()); + + } + /** * Tests whether external version range parent references are build correctly. * @@ -363,11 +403,11 @@ public void testBuildParentVersionRangeExternallyWithoutChildVersion() throws Ex * * @throws Exception */ - public void testBuildParentVersionRangeExternallyWithChildVersionExpression() throws Exception + public void testBuildParentVersionRangeExternallyWithChildProjectVersionExpression() throws Exception { File f1 = getTestFile( - "src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml" ); + "src/test/resources/projects/parent-version-range-external-child-project-version-expression/pom.xml" ); try { @@ -380,5 +420,46 @@ public void testBuildParentVersionRangeExternallyWithChildVersionExpression() th assertThat( e.getMessage(), containsString( "Version must be a constant" ) ); } } + + /** + * Tests whether external version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildParentVersionRangeExternallyWithChildProjectParentVersionExpression() throws Exception + { + File f1 = + getTestFile( + "src/test/resources/projects/parent-version-range-external-child-project-parent-version-expression/pom.xml" ); + try + { + this.getProjectFromRemoteRepository( f1 ); + fail( "Expected 'ProjectBuildingException' not thrown." ); + } + catch ( final ProjectBuildingException e ) + { + assertNotNull( e.getMessage() ); + assertThat( e.getMessage(), containsString( "Version must be a constant" ) ); + } + } + + /** + * Tests whether external version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildParentVersionRangeExternallyWithChildRevisionExpression() throws Exception + { + File f1 = + getTestFile( + "src/test/resources/projects/parent-version-range-external-child-revision-expression/pom.xml" ); + + + MavenProject mp = this.getProjectFromRemoteRepository( f1 ); + + assertEquals("1.0-SNAPSHOT", mp.getVersion()); + + + } } diff --git a/maven-core/src/test/resources/projects/parent-version-range-external-child-project-parent-version-expression/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-external-child-project-parent-version-expression/pom.xml new file mode 100644 index 00000000000..a8cf950fa2d --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-external-child-project-parent-version-expression/pom.xml @@ -0,0 +1,12 @@ + + 4.0.0 + + org.apache + apache + [1,1] + + child + + ${project.parent.version} + pom + 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-project-version-expression/pom.xml similarity index 69% rename from maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml rename to maven-core/src/test/resources/projects/parent-version-range-external-child-project-version-expression/pom.xml index d07ad6eb565..bd30a9af8e8 100644 --- 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-project-version-expression/pom.xml @@ -6,7 +6,7 @@ [1,1] child - - ${some.property} + + ${project.version} pom diff --git a/maven-core/src/test/resources/projects/parent-version-range-external-child-revision-expression/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-external-child-revision-expression/pom.xml new file mode 100644 index 00000000000..aa724d854a0 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-external-child-revision-expression/pom.xml @@ -0,0 +1,14 @@ + + 4.0.0 + + org.apache + apache + [1,1] + + child + ${revision} + pom + + 1.0-SNAPSHOT + + diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-project-parent-version-expression/child/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-project-parent-version-expression/child/pom.xml new file mode 100644 index 00000000000..ac42c932b52 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-project-parent-version-expression/child/pom.xml @@ -0,0 +1,12 @@ + + 4.0.0 + + parent-version-range-local + parent + [1,10] + + child + + ${project.parent.version} + pom + diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-project-parent-version-expression/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-project-parent-version-expression/pom.xml new file mode 100644 index 00000000000..858cf1c3f01 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-project-parent-version-expression/pom.xml @@ -0,0 +1,7 @@ + + 4.0.0 + parent-version-range-local + parent + 1 + pom + 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-project-version-expression/child/pom.xml similarity index 70% rename from maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml rename to maven-core/src/test/resources/projects/parent-version-range-local-child-project-version-expression/child/pom.xml index 066a11ecdb6..1435070a8b9 100644 --- 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-project-version-expression/child/pom.xml @@ -6,7 +6,7 @@ [1,10] child - - ${some.property} + + ${project.version} pom diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-project-version-expression/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-project-version-expression/pom.xml new file mode 100644 index 00000000000..858cf1c3f01 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-project-version-expression/pom.xml @@ -0,0 +1,7 @@ + + 4.0.0 + parent-version-range-local + parent + 1 + pom + diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-revision-expression/child/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-revision-expression/child/pom.xml new file mode 100644 index 00000000000..b29b5d23bfc --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-revision-expression/child/pom.xml @@ -0,0 +1,14 @@ + + 4.0.0 + + parent-version-range-local + parent + [1,10] + + child + ${revision} + pom + + 1.0-SNAPSHOT + + 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-revision-expression/pom.xml similarity index 100% rename from maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/pom.xml rename to maven-core/src/test/resources/projects/parent-version-range-local-child-revision-expression/pom.xml 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 813b76297fe..e6610d95c9d 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 @@ -1057,7 +1057,9 @@ private ModelData readParentLocally( Model childModel, ModelSource childSource, } // Validate versions aren't inherited when using parent ranges the same way as when read externally. - if ( childModel.getVersion() == null ) + String rawChildModelVersion = childModel.getVersion(); + + if ( rawChildModelVersion == null ) { // Message below is checked for in the MNG-2199 core IT. problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 ) @@ -1066,7 +1068,7 @@ private ModelData readParentLocally( Model childModel, ModelSource childSource, } else { - if ( childModel.getVersion().contains( "${" ) ) + if ( rawChildVersionReferencesParent( rawChildModelVersion ) ) { // Message below is checked for in the MNG-2199 core IT. problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 ) @@ -1099,6 +1101,12 @@ private ModelData readParentLocally( Model childModel, ModelSource childSource, return parentData; } + private boolean rawChildVersionReferencesParent( String rawChildModelVersion ) + { + return rawChildModelVersion.equals( "${project.version}" ) + || rawChildModelVersion.equals( "${project.parent.version}" ); + } + private ModelSource getParentPomFile( Model childModel, ModelSource source ) { if ( !( source instanceof ModelSource2 ) ) @@ -1187,7 +1195,9 @@ public int getValidationLevel() if ( !parent.getVersion().equals( version ) ) { - if ( childModel.getVersion() == null ) + String rawChildModelVersion = childModel.getVersion(); + + if ( rawChildModelVersion == null ) { // Message below is checked for in the MNG-2199 core IT. problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 ) @@ -1196,7 +1206,7 @@ public int getValidationLevel() } else { - if ( childModel.getVersion().contains( "${" ) ) + if ( rawChildVersionReferencesParent( rawChildModelVersion ) ) { // Message below is checked for in the MNG-2199 core IT. problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 ) From b163330b8975a4e2cc4256c87d40ffb97dfd97bc Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Mon, 31 Jan 2022 17:40:36 +0100 Subject: [PATCH 2/2] Add tests for pom.version and pom.parent.version --- .../DefaultMavenProjectBuilderTest.java | 48 ++++++++++++++++++- .../pom.xml | 12 +++++ .../pom.xml | 12 +++++ .../model/building/DefaultModelBuilder.java | 4 +- 4 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 maven-core/src/test/resources/projects/parent-version-range-external-child-pom-parent-version-expression/pom.xml create mode 100644 maven-core/src/test/resources/projects/parent-version-range-external-child-pom-version-expression/pom.xml 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 088e04e919a..74a3a074e19 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 @@ -420,7 +420,53 @@ public void testBuildParentVersionRangeExternallyWithChildProjectVersionExpressi assertThat( e.getMessage(), containsString( "Version must be a constant" ) ); } } - + + /** + * Tests whether external version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildParentVersionRangeExternallyWithChildPomVersionExpression() throws Exception + { + File f1 = + getTestFile( + "src/test/resources/projects/parent-version-range-external-child-pom-version-expression/pom.xml" ); + + try + { + this.getProjectFromRemoteRepository( f1 ); + fail( "Expected 'ProjectBuildingException' not thrown." ); + } + catch ( final ProjectBuildingException e ) + { + assertNotNull( e.getMessage() ); + assertThat( e.getMessage(), containsString( "Version must be a constant" ) ); + } + } + + /** + * Tests whether external version range parent references are build correctly. + * + * @throws Exception + */ + public void testBuildParentVersionRangeExternallyWithChildPomParentVersionExpression() throws Exception + { + File f1 = + getTestFile( + "src/test/resources/projects/parent-version-range-external-child-pom-parent-version-expression/pom.xml" ); + + try + { + this.getProjectFromRemoteRepository( f1 ); + fail( "Expected 'ProjectBuildingException' not thrown." ); + } + catch ( final ProjectBuildingException e ) + { + assertNotNull( e.getMessage() ); + assertThat( e.getMessage(), containsString( "Version must be a constant" ) ); + } + } + /** * Tests whether external version range parent references are build correctly. * diff --git a/maven-core/src/test/resources/projects/parent-version-range-external-child-pom-parent-version-expression/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-external-child-pom-parent-version-expression/pom.xml new file mode 100644 index 00000000000..b37e54a9a98 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-external-child-pom-parent-version-expression/pom.xml @@ -0,0 +1,12 @@ + + 4.0.0 + + org.apache + apache + [1,1] + + child + + ${pom.parent.version} + pom + diff --git a/maven-core/src/test/resources/projects/parent-version-range-external-child-pom-version-expression/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-external-child-pom-version-expression/pom.xml new file mode 100644 index 00000000000..bd30a9af8e8 --- /dev/null +++ b/maven-core/src/test/resources/projects/parent-version-range-external-child-pom-version-expression/pom.xml @@ -0,0 +1,12 @@ + + 4.0.0 + + org.apache + apache + [1,1] + + child + + ${project.version} + pom + 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 e6610d95c9d..551f17a8985 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 @@ -1103,7 +1103,9 @@ private ModelData readParentLocally( Model childModel, ModelSource childSource, private boolean rawChildVersionReferencesParent( String rawChildModelVersion ) { - return rawChildModelVersion.equals( "${project.version}" ) + return rawChildModelVersion.equals( "${pom.version}" ) + || rawChildModelVersion.equals( "${project.version}" ) + || rawChildModelVersion.equals( "${pom.parent.version}" ) || rawChildModelVersion.equals( "${project.parent.version}" ); }