Я не думаю, что вы можете сделать это на чистой Java.Я почти уверен, что вам нужно будет либо запустить внешнюю команду, либо сделать вызов в нативный код, чтобы определить, находится ли файл JAR в общей сетевой папке.
Первая часть, которую вам нужно сделать, - это получитьабсолютный путь к файлу JAR:
Class mainClass = MyMainClass.class;
File jarFile = new File(mainClass.getProtectionDomain()
.getCodeSource()
.getLocation()
.toURI());
Я нашел «гист» на github, написанный Аароном Дигуллой, который выполняет вторую часть задачи:
Код Аарона принимает абсолютный путь Windows, извлекает букву диска и затем запускает команду Windows net use <drive-letter>:
, чтобы проверить, является ли диск общим диском.
Anальтернативой может быть реализация логики, которую пакетный файл выполняет следующим образом:
- Извлечение имени диска для файла JAR
- Использование
net use ...
для проверки общего диска - Используйте ту же технику, чтобы убедиться, что установка Java не находится на общем диске 1 .
- Используйте команду
java
для запуска приложения
Наконец, вероятно, плохая идеяefuse для запуска на общем диске.У пользователя могут быть причины сделать это, о которых вы не знаете.Я хотел бы предложить побудить пользователя и дать ему возможность продолжить в любом случае.Или что-то в этом роде.
В качестве альтернативы, укажите в инструкциях по установке приложения, что не рекомендуется для установки JRE / JDK и приложения на общем диске (или эквивалентном).
1 - Установка Java на общем диске даст такую же плохую, если не худшую производительность, как JAR приложения на общем диске.