Получение FileSystemException "Необходимая привилегия не удерживается клиентом", используя Files.createSymbolicLink в Play Framework

Я пытаюсь использовать новый метод Java 7 Files.createSymbolicLink() в Play! Framework, и я получил следующее исключение:

RuntimeException occured : java.nio.file.FileSystemException: c:\work\foo\bar:
A required privilege is not held by the client.

Это моя первая встреча с моделью разрешений Java, поэтому я понимаю, что происходит, но еще не знаю, как ее исправить (я бы хотел предоставить контроллерам больше разрешений).

Если кто-то может ответить здесь быстрее, чем я найду ответ, я (и будущие читатели) будет благодарен.

Ответы

Ответ 1

Это не проблема с разрешениями Java, но проблема с разрешениями операционной системы. См. FileSystemException.

Подклассы FileSystemException: AccessDeniedException, AtomicMoveNotSupportedException, DirectoryNotEmptyException, FileAlreadyExistsException, FileSystemLoopException, NoSuchFileException, NotDirectoryException, NotLinkException.

Из AccessDeniedException:

Проверено исключение, возникшее при отказе в работе файловой системы, обычно из-за разрешения файла или другой проверки доступа. Это исключение не связано с AccessControlException или SecurityException, созданным контроллерами доступа или менеджерами безопасности, когда доступ к файлу запрещен.

Ответ 2

После просмотра этого ответа и помня, что я запускаю Windows 7 с UAC Я понимаю, что это проблема Windows.

  • Ничто не может быть сделано из Java, чтобы это ушло.
  • Я должен как-то отключить UAC для Play (запустить как admin и т.д.), но вопрос не связан с Play (или java-разрешениями) вообще.

Действительно, при запуске:

runas /noprofile /user:Administrator cmd
cd c:\myapp
play run

все работает хорошо.