File API on Windows has always had the maximum length of a path set to MAX_PATH = 260 [1]. Java uses the '\\?\' prefix to overcome this limitation, it can create directories which are longer than MAX_PATH.
But starting a process in such a directory fails.
The attached test case, WindowsLongPathProcess.java, fails with the following exception:
Exception in thread "main" java.io.IOException: Cannot run program "C:\devtools\jdk11\bin\java" (in directory "C:\Users\<user-name>\AppData\Local\Temp\longPathTest14815407149482723603\0123456789...0123456789"): CreateProcess error=267, The directory name is invalid
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
at WindowsLongPathProcess.main(WindowsLongPathProcess.java:34)
Caused by: java.io.IOException: CreateProcess error=267, The directory name is invalid
at java.base/java.lang.ProcessImpl.create(Native Method)
at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:492)
at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:153)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
... 2 more
This problem was discovered when running individual jtreg tests, and a test had a long name.
[1] https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation
But starting a process in such a directory fails.
The attached test case, WindowsLongPathProcess.java, fails with the following exception:
Exception in thread "main" java.io.IOException: Cannot run program "C:\devtools\jdk11\bin\java" (in directory "C:\Users\<user-name>\AppData\Local\Temp\longPathTest14815407149482723603\0123456789...0123456789"): CreateProcess error=267, The directory name is invalid
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
at WindowsLongPathProcess.main(WindowsLongPathProcess.java:34)
Caused by: java.io.IOException: CreateProcess error=267, The directory name is invalid
at java.base/java.lang.ProcessImpl.create(Native Method)
at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:492)
at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:153)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
... 2 more
This problem was discovered when running individual jtreg tests, and a test had a long name.
[1] https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation
- relates to
-
JDK-8348664 Enable long path support in manifest for java.exe and javaw.exe on Windows
-
- New
-
- links to