Относительный путь Java работает по-разному в разных проектах с одним и тем же кодом

#java #windows #maven #maven-plugin

#java #Windows #maven #maven-плагин

Вопрос:

Я не уверен, является ли это проблемой Windows или проблемой Java. Вот сценарий

У меня есть проект maven, который использует проект плагина maven для сборки части своего кода. Короче говоря, он ищет файл в корневом каталоге C: /, потому что user.dir выдает неверный результат.

Я создал 2 разные учетные записи Windows, одна из которых является сетевым доменом, а другая — локальной учетной записью. Когда я выполняю сборку с использованием плагина в локальной учетной записи Windows, она работает безупречно. Однако, когда я выполняю сборку в сетевой учетной записи, происходит сбой из-за user.dir .

Учетная запись домена Windows возвращает

 USer dir i s C:
  

Локальная учетная запись Windows

 USer dir i s C:workspace...correct path
  

С помощью следующего кода.

 System.out.println("USer dir is"   System.getProperty("user.dir"));
  

Я также попытался добавить этот код в ту же папку проекта в учетной записи домена Windows, и он правильно находит путь. (Просто создаю тестовый класс, не используя maven или проект плагина).

Кто-нибудь знает какие-либо настройки maven, которые могли бы испортить user.dir или какое может быть возможное объяснение?

Я просмотрел разрешения папок, щелкнул правой кнопкой мыши файл -> Свойства -> Безопасность -> (пришлось создать себя как пользователя) -> Разрешения.
В столбце, унаследованном от, помечено как, тогда как другие учетные записи наследуются от диска C:/ .

Я установил себя в качестве администратора и предоставил себе полные разрешения. Я до такой степени, что не знаю, является ли проблема причиной Windows, Java или Maven, и был бы действительно признателен за любые предложения, указатели, что угодно 🙂

Ответ №1:

Скорее всего, это ошибка способа запуска maven.

Вы можете попробовать запустить maven с,

 mvn -Duser.dir=thecorrectpath
  

Установить user.dir вручную.

Комментарии:

1. Привет, sbridges, спасибо за ваш ответ. Оказывается, что плагин maven, который я использовал, использовал java CommandProcessor, который вызывал то же самое, что и стандартный cmd. Ранее я установил автозапуск в /HKEY_LOCAL_USER /MICROSOFT /COMMANDPROCESSOR/AUTORUN на pushd C:/ для запуска прямо из моего каталога C: . Я думаю, для того, чтобы он работал успешно, он не должен быть принудительным, что позволяет запускать его из моего текущего каталога.