[ https://issues.apache.org/jira/browse/SUREFIRE-1376?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16065175#comment-16065175 ]
Guillaume Boué commented on SUREFIRE-1376: ------------------------------------------ [~tibor17] Ultimately, the working directory of the command is passed unchanged to [{{Runtime#exec(cmdarray, envp, dir)}}|https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#exec-java.lang.String:A-java.lang.String:A-java.io.File-] (third argument). This is done by [Maven shared utils|https://github.com/apache/maven-shared/blob/maven-shared-utils-0.9/src/main/java/org/apache/maven/shared/utils/cli/Commandline.java#L407] that Surefire uses to execute the command line. I'm not sure how Java handles the working dir after that, but I think it handles it fine: I don't see why the error message would be "Unable to access jarfile" if there were an issue with the working directory. > "The forked VM terminated without properly saying goodbye" when running > Surefire in a very deep project structure on Windows > ---------------------------------------------------------------------------------------------------------------------------- > > Key: SUREFIRE-1376 > URL: https://issues.apache.org/jira/browse/SUREFIRE-1376 > Project: Maven Surefire > Issue Type: Bug > Components: Maven Failsafe Plugin, Maven Surefire Plugin > Affects Versions: 2.20 > Environment: Windows > Reporter: Guillaume Boué > Assignee: Tibor Digana > Fix For: 2.20.1 > > Attachments: SUREFIRE-1376-prefix.patch > > > When Surefire is ran on a project under a very long path (exceeding Windows' > {{MAX_PATH}}), the invocation fails with > {noformat} > org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM > terminated without properly saying goodbye. VM crash or System.exit called? > {noformat} > In the generated dumpstream, there is > {noformat} > # Created on 2017-05-28T10:17:09.474 > Error: Unable to access jarfile > C:\Users\Guillaume\Desktop\surefire-longpath-test-with-windows\surefire-longpath-test-with-windows\surefire-longpath-test-with-windows\surefire-longpath-test-with-windows\surefire-longpath-test-with-windows\surefire-longpath-test-with-windows\target\surefire\surefirebooter2512478076549179739.jar > {noformat} > The problem is that the path to the JAR file exceeds the maximum path length > of 260 characters, and so it cannot be accessed. > Prepending the path to the JAR file with {{\\?\}}, [as documented > on > MSDN|https://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx#maxpath], > makes the test run again correctly. I've attached a possible patch with this > approach (SUREFIRE-1376-prefix.patch, that also handles UNC pathnames), but > perhaps there is a better way to tackle this problem. > In order to reproduce this, it is possible to create a project under lots of > different subdirectories, something like: > {noformat} > └───surefire-longpath-test-with-windows > └───surefire-longpath-test-with-windows > └───surefire-longpath-test-with-windows > └───surefire-longpath-test-with-windows > └───surefire-longpath-test-with-windows > │ pom.xml > │ > └───src > └───test > └───java > └───Test.java > {noformat} > As a side-note, this issue is behind the current Jenkins failures on > [maven-plugins-ITs-m3.1.x-with-maven-plugin-jdk-1.8_windows|https://builds.apache.org/job/maven-plugins-ITs-m3.1.x-with-maven-plugin-jdk-1.8_windows/3702/] > when running the ITs on the Assembly Plugin. -- This message was sent by Atlassian JIRA (v6.4.14#64029)