Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Cannot Reproduce
-
3.6.3
-
None
-
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"