Uploaded image for project: 'Maven'
  1. Maven
  2. MNG-6947

StringSearchModelInterpolatorTest fails to interpolate ${project.basedir} across Java versions

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Cannot Reproduce
    • 3.6.3
    • None
    • Core
    • None

    Description

      This has been discovered while using MAVENCODEBASE with relative paths and symlinks.

      This is a very subtile bug and I yet don't understand. Here is how to reproduce:

      Have Maven cloned repo on a symlinked dir:

      osipovmi@deblndw011x:~/var/Projekte/maven (master *=)
      $ pwd -P
      /var/osipovmi/Projekte/maven
      

      and invoke Maven with -f and a non-normalized path:

      mvn -f $PWD/../maven -V -pl maven-model-builder test
      

      With Java 8 all tests pass, with Java 11+ the mentioned test fails:

      [ERROR] Tests run: 34, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.086 s <<< FAILURE! - in org.apache.maven.model.interpolation.StringSearchModelInterpolatorTest
      [ERROR] testInterpolateObjectWithPomFile(org.apache.maven.model.interpolation.StringSearchModelInterpolatorTest)  Time elapsed: 0.012 s  <<< FAILURE!
      java.lang.AssertionError:
      
      Expected: is (is "/net/home/osipovmi/var/Projekte/maven/maven-model-builder/target" or is "/net/home/osipovmi/var/Projekte/maven/maven-model-builder/./target")
           but: was "/var/osipovmi/Projekte/maven/maven-model-builder/./target"
              at org.apache.maven.model.interpolation.StringSearchModelInterpolatorTest.testInterpolateObjectWithPomFile(StringSearchModelInterpolatorTest.java:366)
      

      I have applied the following patch:

      $ git diff
      diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java
      index dbb72c4f7..b2d4b0965 100644
      --- a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java
      +++ b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java
      @@ -356,9 +356,11 @@ public void testInterpolateObjectWithPomFile()
               ModelBuildingRequest config = createModelBuildingRequest( p );
      
               SimpleProblemCollector collector = new SimpleProblemCollector();
               assertProblemFree( collector );
      -
      +        System.out.println( baseDir.getAbsolutePath() );
      +        System.out.println( System.getProperty( "user.dir" ) );
      +        System.out.println( obj.values.get( "key" ) );
               assertThat( baseDir.getAbsolutePath(), is( System.getProperty( "user.dir" ) ) );
               assertThat( obj.values.size(), is( 1 ) );
               assertThat( (String) obj.values.get( "key" ), is( anyOf(
      

      and receive:

      Java 8:
      /net/home/osipovmi/var/Projekte/maven/maven-model-builder
      /net/home/osipovmi/var/Projekte/maven/maven-model-builder
      /net/home/osipovmi/var/Projekte/maven/maven-model-builder/./target
      
      Java 11:
      /net/home/osipovmi/var/Projekte/maven/maven-model-builder
      /net/home/osipovmi/var/Projekte/maven/maven-model-builder
      /var/osipovmi/Projekte/maven/maven-model-builder/./target
      
      Java 14:
      /net/home/osipovmi/var/Projekte/maven/maven-model-builder
      /net/home/osipovmi/var/Projekte/maven/maven-model-builder
      /var/osipovmi/Projekte/maven/maven-model-builder/./target
      

      When I apply

      $ git diff
      diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java
      index dbb72c4f7..b2d4b0965 100644
      --- a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java
      +++ b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java
      @@ -356,9 +356,11 @@ public void testInterpolateObjectWithPomFile()
               ModelBuildingRequest config = createModelBuildingRequest( p );
      
               SimpleProblemCollector collector = new SimpleProblemCollector();
      -        interpolator.interpolateObject( obj, model, new File( "." ), config, collector );
      +        interpolator.interpolateObject( obj, model, new File( System.getProperty( "user.dir" ) ), config, collector );
               assertProblemFree( collector );
      

      The code works. Unfortunately, I do not know whether this fixes the cause because the test is faulty or just the symptom and the issue is in Core. Is has to be noted that user.dir is backed by getcwd() which always returns an absolute, canonical path.

      All tests perfomed on:

      $ mvn -v
      Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T20:33:14+02:00)
      Maven home: /usr/local/apache-maven-3.5.4
      Java version: 11.0.7, vendor: Oracle Corporation, runtime: /usr/local/openjdk11
      Default locale: de_DE, platform encoding: UTF-8
      OS name: "freebsd", version: "12.1-stable", arch: "amd64", family: "unix"
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            michael-o Michael Osipov
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: