WSL中执行sudo mvn提示command not found 求助
解决WSL Ubuntu 24下Spring Boot绑定80端口及sudo找不到mvn的问题
一、先解决sudo: mvn: command not found的问题
sudo执行时的PATH环境变量和普通用户不一致,导致找不到mvn,有两种快速解决方式:
- 使用mvn绝对路径执行:先在普通用户下执行
which mvn,获取mvn的完整路径(比如/home/xxx/.apache-maven/bin/mvn),然后用sudo执行绝对路径的mvn:sudo /home/xxx/.apache-maven/bin/mvn spring-boot:run - 修改sudo的PATH配置:用
visudo编辑/etc/sudoers文件(必须用visudo,避免语法错误导致sudo失效),找到Defaults secure_path行,把maven的bin目录追加进去,示例:
保存后,sudo就能直接找到mvn命令了。Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/xxx/.apache-maven/bin"
二、更安全的替代方案:不用sudo跑Spring Boot
直接用sudo运行Java应用存在安全风险,推荐用以下方式解决80端口绑定权限问题:
- 给Java进程添加低端口绑定能力:
- 先获取Java的绝对路径:
which java(比如/usr/lib/jvm/java-17-openjdk-amd64/bin/java) - 执行setcap命令赋予权限:
sudo setcap 'cap_net_bind_service=+ep' /usr/lib/jvm/java-17-openjdk-amd64/bin/java
mvn spring-boot:run,就能正常绑定80端口了。 - 先获取Java的绝对路径:
- 端口转发(iptables):
- 把Spring Boot配置文件
application.properties里的server.port改成8080(普通用户可绑定的高端口) - 用iptables设置端口转发:
若需要重启WSL后规则生效,可安装sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080iptables-persistent保存规则:sudo apt install iptables-persistent sudo netfilter-persistent save
- 把Spring Boot配置文件
- 反向代理(Nginx):
- 安装Nginx:
sudo apt install nginx - 修改Nginx配置(比如
/etc/nginx/sites-available/spring-boot-app),添加反向代理规则:server { listen 80; server_name localhost; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } - 启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/spring-boot-app /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl restart nginx - Spring Boot应用设置
server.port=8080,普通用户直接运行即可。
- 安装Nginx:
内容的提问来源于stack exchange,提问作者tim bits
相关产品推荐
相关产品推荐

