Невозможно запустить sudo mvn в WSL

При попытке запустить sudo с помощью mvn, например. 'sudo mvn spring-boot:run', в WSL (Ubuntu 24) я получаю следующую ошибку: 'sudo: mvn: command not found'. Очевидно, что maven установлен и отлично работает без sudo. Кроме того, запуск sudo с другими командами также работает нормально, например. sudo apt-get update и т. д.

Просто чтобы исключить любые вопросы, почему я пытаюсь запустить 'sudo mvn spring-boot:run', это то, что когда я запускал его без sudo, мое приложение SpringBoot аварийно завершает работу с 'java.net.BindException: Permission denied', вероятно, на порту 80, хотя трассировка стека ошибок не говорит об этом (в application.preperties, server.port=80 и порт не используется, т. е. sudo lsof -i:80 ничего не показывает).

Вышеупомянутая ошибка отказа в доступе возникает как на моем экземпляре WSL, так и на моем экземпляре AWS EC2 (который также использует Ubuntu 24), но я могу преодолеть ее в EC2 с помощью sudo, но я не могу сделать то же самое в WSL.

Был бы благодарен за любые предложения.

Почему вы хотите запустить mvn под sudo?

tripleee 09.06.2024 00:00

@tripleee, из моего ОП: The error (т. е. BindException: разрешение отклонено) happens on both my WSL and my AWS EC2 instance (which also uses Ubuntu 24), but the way I overcome it on EC2 is by using sudo, but I can't do the same on WSL.

tim bits 09.06.2024 00:45

Можете ли вы опубликовать результат type mvn и sudo bash -c 'echo $PATH'?

Philippe 09.06.2024 09:30
stackoverflow.com/a/78457581/874188 есть простое решение аналогичной проблемы. (Следует сказать, что многие другие ответы там ужасно плохи.)
tripleee 09.06.2024 09:43

@tripleee, как вы упомянули, WSL использовал maven, установленный в Windows, поэтому я попытался добавить каталог maven в PATH, как вы предложили в сообщении SO. Однако по какой-то причине новый путь сохраняется только в его части «Windows» (где он уже был установлен), но не в части Linux: $ sudo bash -c 'export PATH=$PATH:/mnt/c/system/apache-maven-3.9.6/bin' $ sudo bash -c 'echo $PATH' $ /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin‌​:/snap/bin $ export PATH=$PATH:/mnt/c/system/apache-maven-3.9.6/bin $ echo $PATH ...:/mnt/c/system/apache-maven-3.9.6/bin Установка PATH в bashrc приводит к тому же результату.

tim bits 10.06.2024 20:54

@Philippe $ type mvn $ mvn is /mnt/c/system/apache-maven-3.9.6/bin/mvn $ sudo bash -c 'echo $PATH' $ /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin‌​:/snap/binпосмотри также мой ответ на тройку

tim bits 10.06.2024 20:55

Можешь попробовать sudo -E mvn spring-boot:run ?

Philippe 10.06.2024 21:11

@Philippe, к сожалению, не помогло, т. е. все еще получаю: sudo: mvn: command not found

tim bits 10.06.2024 21:37

Если вы не можете или не хотите обновлять PATH, укажите полный путь к mvn; sudo /mnt/c/system/apache-maven-3.9.6/bin/mvn spring-boot:run

tripleee 11.06.2024 05:29

Спасибо, это сработало. Я бы предпочел использовать решение Филиппа.

tim bits 12.06.2024 06:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
10
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если у вас есть в /etc/sudoers:

Defaults        secure_path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

Попробуйте добавить каталог maven:

Defaults        secure_path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/mnt/c/system/apache-maven-3.9.6/bin"

Другие вопросы по теме