Я пытаюсь развернуть код, написанный на Play Framework для Scala. Я запускаю sbt testProd или sbt dist, а затем запускаю .sh, сгенерированный в папке bin. В обоих случаях в коде есть точка, где создается папка с именем floor_plans. Однако сразу после создания папки выполняется проверка, чтобы проверить, является ли папка каталогом и возвращает ли она ложь, что очень странно, потому что я вижу, что папка была создана и имеет соответствующие разрешения.
Вот пример кода:
val dir = new File("floor_plan/building/fl0")
dir.mkdirs()
// I've checked in the terminal and I can see that the directory is
// created with success and it has rwx permission for the owner, the
// group, and rx for others.
if (!dir.isDirectory || !dir.canWrite() || !dir.canExecute()) {
// Although the folder is created and has the proper permission,
// the codes enter in this if, i.e. dir.isDirectory is false and
// so canWrite and canExecute
Logger.debug("Floor plans directory is inaccessible!!")
throw new AnyPlaceException("Floor plans directory is
inaccessible!!!")
}
-
Я запустил несколько тестов и обнаружил, что при создании простого каталога без подкаталога эта проблема не возникает. Я думаю, что проблема с подкаталогами.
val dir = new File("floor_plan/building/fl0")
dir.mkdirs() // this returns true, and I checked that all subdirectories as created with success
dir.isDirectory // this returns false only is there is a subdirectory. If I create a directory with no subdirectory, e.g. new File("floor_plan"), the return is true
Странно то, что когда я запускаю это на Intellij, оно работает нормально. Но когда я запускаю в командной строке sbt testProd, dir.isDirectory каждый раз возвращает false.
Я думал, что mybe Intelij использует другую версию jvm, но, похоже, это не так.
Было бы неплохо узнать, почему это происходит и почему оно работает на IntelliJ, а на терминале - нет.