You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2022/02/01 13:35:21 UTC

[maven] branch master updated: [MNG-6727] Using version range in parent and CI Friendly Version fails

This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new 1d47323  [MNG-6727] Using version range in parent and CI Friendly Version fails
1d47323 is described below

commit 1d473233f21b63f351ded6904f4f9f98db3faaf1
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Tue Feb 1 14:26:54 2022 +0100

    [MNG-6727] Using version range in parent and CI Friendly Version fails
---
 .../project/DefaultMavenProjectBuilderTest.java    | 136 ++++++++++++++++++++-
 .../pom.xml                                        |   4 +-
 .../pom.xml                                        |   4 +-
 .../pom.xml                                        |   4 +-
 .../pom.xml                                        |   4 +-
 .../pom.xml                                        |   6 +-
 .../child/pom.xml                                  |   4 +-
 .../pom.xml                                        |   0
 .../child/pom.xml                                  |   4 +-
 .../pom.xml                                        |   0
 .../child/pom.xml                                  |   6 +-
 .../pom.xml                                        |   0
 .../maven/model/building/DefaultModelBuilder.java  |  20 ++-
 13 files changed, 168 insertions(+), 24 deletions(-)

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 727f28d..a2ca999 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
@@ -28,6 +28,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.File;
 import java.io.InputStream;
@@ -249,11 +250,11 @@ public class DefaultMavenProjectBuilderTest
      * @throws Exception in case of issue
      */
     @Test
-    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" );
 
         ProjectBuildingException e = assertThrows(
                 ProjectBuildingException.class,
@@ -261,7 +262,47 @@ public class DefaultMavenProjectBuilderTest
                 "Expected 'ProjectBuildingException' not thrown." );
         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.
      *
@@ -307,11 +348,11 @@ public class DefaultMavenProjectBuilderTest
      * @throws Exception in case of issue
      */
     @Test
-    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" );
 
         ProjectBuildingException e = assertThrows(
                 ProjectBuildingException.class,
@@ -350,4 +391,91 @@ public class DefaultMavenProjectBuilderTest
         assertThat( project.getName(), is( "PROJECT NAME" ) );
     }
 
+    /**
+     * 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.
+     *
+     * @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-version-expression/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-external-child-pom-parent-version-expression/pom.xml
similarity index 67%
copy from maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml
copy to maven-core/src/test/resources/projects/parent-version-range-external-child-pom-parent-version-expression/pom.xml
index d07ad6e..b37e54a 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-pom-parent-version-expression/pom.xml
@@ -6,7 +6,7 @@
     <version>[1,1]</version>
   </parent>
   <artifactId>child</artifactId>
-  <!-- Must not use expressions from parent due to version range. -->
-  <version>${some.property}</version>
+  <!-- Must not use ${project.parent.version} due to version range. -->
+  <version>${pom.parent.version}</version>
   <packaging>pom</packaging>
 </project>
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-pom-version-expression/pom.xml
similarity index 69%
copy from maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml
copy to maven-core/src/test/resources/projects/parent-version-range-external-child-pom-version-expression/pom.xml
index d07ad6e..bd30a9a 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-pom-version-expression/pom.xml
@@ -6,7 +6,7 @@
     <version>[1,1]</version>
   </parent>
   <artifactId>child</artifactId>
-  <!-- Must not use expressions from parent due to version range. -->
-  <version>${some.property}</version>
+  <!-- Must not use ${project.version} due to version range. -->
+  <version>${project.version}</version>
   <packaging>pom</packaging>
 </project>
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-parent-version-expression/pom.xml
similarity index 67%
copy from maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml
copy to maven-core/src/test/resources/projects/parent-version-range-external-child-project-parent-version-expression/pom.xml
index d07ad6e..a8cf950 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-parent-version-expression/pom.xml
@@ -6,7 +6,7 @@
     <version>[1,1]</version>
   </parent>
   <artifactId>child</artifactId>
-  <!-- Must not use expressions from parent due to version range. -->
-  <version>${some.property}</version>
+  <!-- Must not use ${project.parent.version} due to version range. -->
+  <version>${project.parent.version}</version>
   <packaging>pom</packaging>
 </project>
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%
copy from maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml
copy to maven-core/src/test/resources/projects/parent-version-range-external-child-project-version-expression/pom.xml
index d07ad6e..bd30a9a 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 @@
     <version>[1,1]</version>
   </parent>
   <artifactId>child</artifactId>
-  <!-- Must not use expressions from parent due to version range. -->
-  <version>${some.property}</version>
+  <!-- Must not use ${project.version} due to version range. -->
+  <version>${project.version}</version>
   <packaging>pom</packaging>
 </project>
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-revision-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-revision-expression/pom.xml
index d07ad6e..aa724d8 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-revision-expression/pom.xml
@@ -6,7 +6,9 @@
     <version>[1,1]</version>
   </parent>
   <artifactId>child</artifactId>
-  <!-- Must not use expressions from parent due to version range. -->
-  <version>${some.property}</version>
+  <version>${revision}</version>
   <packaging>pom</packaging>
+  <properties>
+    <revision>1.0-SNAPSHOT</revision>
+  </properties>
 </project>
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-parent-version-expression/child/pom.xml
similarity index 68%
copy from maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml
copy to maven-core/src/test/resources/projects/parent-version-range-local-child-project-parent-version-expression/child/pom.xml
index 066a11e..ac42c93 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-parent-version-expression/child/pom.xml
@@ -6,7 +6,7 @@
     <version>[1,10]</version>
   </parent>
   <artifactId>child</artifactId>
-  <!-- Must not use expressions from parent due to version range. -->
-  <version>${some.property}</version>
+  <!-- Must not use ${project.parent.version} due to version range. -->
+  <version>${project.parent.version}</version>
   <packaging>pom</packaging>
 </project>
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-project-parent-version-expression/pom.xml
similarity index 100%
copy from maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/pom.xml
copy to maven-core/src/test/resources/projects/parent-version-range-local-child-project-parent-version-expression/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-project-version-expression/child/pom.xml
similarity index 70%
copy from maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml
copy to maven-core/src/test/resources/projects/parent-version-range-local-child-project-version-expression/child/pom.xml
index 066a11e..1435070 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 @@
     <version>[1,10]</version>
   </parent>
   <artifactId>child</artifactId>
-  <!-- Must not use expressions from parent due to version range. -->
-  <version>${some.property}</version>
+  <!-- Must not use ${project.version} due to version range. -->
+  <version>${project.version}</version>
   <packaging>pom</packaging>
 </project>
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-project-version-expression/pom.xml
similarity index 100%
copy from maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/pom.xml
copy to maven-core/src/test/resources/projects/parent-version-range-local-child-project-version-expression/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-revision-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-revision-expression/child/pom.xml
index 066a11e..b29b5d2 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-revision-expression/child/pom.xml
@@ -6,7 +6,9 @@
     <version>[1,10]</version>
   </parent>
   <artifactId>child</artifactId>
-  <!-- Must not use expressions from parent due to version range. -->
-  <version>${some.property}</version>
+  <version>${revision}</version>
   <packaging>pom</packaging>
+  <properties>
+    <revision>1.0-SNAPSHOT</revision>
+  </properties>
 </project>
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 d09c705..de84b90 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
@@ -1320,7 +1320,9 @@ public class DefaultModelBuilder
                 }
 
                 // 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 )
@@ -1329,7 +1331,7 @@ public class DefaultModelBuilder
                 }
                 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 )
@@ -1360,6 +1362,14 @@ public class DefaultModelBuilder
         return new ModelData( candidateSource, candidateModel, groupId, artifactId, version );
     }
 
+    private boolean rawChildVersionReferencesParent( String rawChildModelVersion )
+    {
+        return rawChildModelVersion.equals( "${pom.version}" )
+                || rawChildModelVersion.equals( "${project.version}" )
+                || rawChildModelVersion.equals( "${pom.parent.version}" )
+                || rawChildModelVersion.equals( "${project.parent.version}" );
+    }
+
     private ModelSource getParentPomFile( Model childModel, Source source )
     {
         if ( !( source instanceof ModelSource2 ) )
@@ -1441,7 +1451,9 @@ public class DefaultModelBuilder
 
         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 )
@@ -1450,7 +1462,7 @@ public class DefaultModelBuilder
             }
             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 )