Psql не найден в cmd Lauched через Java - PullRequest
0 голосов
/ 03 июня 2019

Я знаю, что этот вопрос немного похож на этот , но мой относится к Windows и имеет решающее значение. У меня есть следующий кусок кода:

public static void main(String[] args) {
    //String command = "\"psql --version\"";
    String psqlPath = "\"C:\\Program Files\\PostgreSQL\\10\\bin\\psql.exe\"";
    String command = "\""+psqlPath+" --version \"";
    runPostgresqlTableCreator("start cmd.exe /k "+command);
}


private static void runPostgresqlTableCreator(String command) {
        ProcessBuilder processBuilder = new ProcessBuilder();
        processBuilder.command("cmd.exe", "/c", command);
        try {
            Process process = processBuilder.start();
            process.waitFor();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
}

Этот код работает с использованием psqlPath, в результате чего он запускает cmd и печатает версию PostgresQL как psql (PostgreSQL) 10.7. Однако при использовании psql --version он говорит, что 'psql' не распознается как внутренняя или внешняя команда, работающая программа или командный файл . Запуск psql --version на запущенном мной cmd также выводит версию. Переменные среды также установлены правильно. Из приведенной ссылки в ответе говорится, что в Java возникла проблема с распознаванием пути psql из переменных среды (хотя String command = "\"java -version\"" отображает версию Java).

Для Linux вполне допустимо указывать полный путь /usr/local/bin/psql, потому что в большинстве случаев это всегда будет путь. Однако в Windows пользователи могут решить установить PostgresQL в любой каталог и на любой том диска, что затрудняет получение полного пути к psql.exe. В моем проекте настольного приложения, использующего JavaFX, мне нужно запустить несколько команд psql, но для чего-то другого, а не для версии. Я не хочу указывать место, где клиенты могут указать путь к psql.exe в интерфейсе.

Мой вопрос, таким образом, есть ли способ заставить psql работать без использования полного пути? (Обратите внимание, что меня интересует не версия Postgresql).

1 Ответ

0 голосов
/ 03 июня 2019

Вы можете использовать psql без использования полного пути каждый раз, добавляя полный путь к psql к своим системным переменным.Это можно сделать, перейдя на панель управления, открыв дополнительные параметры системы, щелкнув «Переменные среды» в системных переменных и отредактировав переменные среды.Как только это будет сделано, на psql можно ссылаться, просто набрав «psql» в качестве пути.

Примечание: не удаляйте другие переменные.Добавьте путь к psql в список переменных среды.

Вот документ Java, объясняющий также добавление к пути: https://www.java.com/en/download/help/path.xml

Как только переменная среды установлена, вы можете прочитать ееиспользование метода System.getenv (String name) для доступа к определенной переменной.Вы также можете использовать System.getenv () для возврата карты всех переменных среды

System.getenv () JavaDoc: https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getenv--

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...