in daemon/src/main/java/org/mvndaemon/mvnd/cli/EnvHelper.java [111:146]
static void chDir(String workingDir) throws Exception {
CLibrary.chdir(workingDir);
System.setProperty("user.dir", workingDir);
// change current dir for the java.io.File class
Class<?> fileClass = Class.forName("java.io.File");
if (JavaVersion.getJavaSpec() >= 11.0) {
Field fsField = fileClass.getDeclaredField(JavaVersion.getJavaSpec() >= 21.0 ? "FS" : "fs");
fsField.setAccessible(true);
Object fs = fsField.get(null);
Field userDirField = fs.getClass().getDeclaredField("userDir");
userDirField.setAccessible(true);
userDirField.set(fs, workingDir);
}
// change current dir for the java.nio.Path class
Object fs = FileSystems.getDefault();
Class<?> fsClass = fs.getClass();
while (fsClass != Object.class) {
if ("sun.nio.fs.UnixFileSystem".equals(fsClass.getName())) {
Field defaultDirectoryField = fsClass.getDeclaredField("defaultDirectory");
defaultDirectoryField.setAccessible(true);
String encoding = System.getProperty("sun.jnu.encoding");
Charset charset = encoding != null ? Charset.forName(encoding) : Charset.defaultCharset();
defaultDirectoryField.set(fs, workingDir.getBytes(charset));
} else if ("sun.nio.fs.WindowsFileSystem".equals(fsClass.getName())) {
Field defaultDirectoryField = fsClass.getDeclaredField("defaultDirectory");
Field defaultRootField = fsClass.getDeclaredField("defaultRoot");
defaultDirectoryField.setAccessible(true);
defaultRootField.setAccessible(true);
Path wdir = Paths.get(workingDir);
Path root = wdir.getRoot();
defaultDirectoryField.set(fs, wdir.toString());
defaultRootField.set(fs, root.toString());
}
fsClass = fsClass.getSuperclass();
}
}