Spring Boot 项目用 Maven 跑,其实就三个常用命令。但组合起来 + 遇到依赖冲突时坑不少。
三个常用命令
开发时启动:
mvn spring-boot:run
看到 Started XxxApplication in x.xxx seconds 就通了。
跳过测试加速启动:
mvn spring-boot:run -DskipTests
老项目测试跑几分钟是常态,开发时基本都会跳。
指定环境:
mvn spring-boot:run -Dspring-boot.run.profiles=dev
读 application-dev.yml 里的配置。多环境就用这个切。
打包 + 运行
生产部署更常用两步走:
mvn clean package -DskipTests
java -jar target/*.jar
产物是 fat jar(Spring Boot 把依赖都塞里面),直接 java -jar 起就行。加参数:
java -jar target/myapp.jar \
--spring.profiles.active=prod \
--server.port=8081
后台跑用 nohup:
nohup java -jar target/myapp.jar > app.log 2>&1 &
生产建议走 systemd 或 Docker,不是裸 nohup。
常见问题
1. mvn 不是内部或外部命令
PATH 没配好。先确认:
mvn -v
不通就照 Windows 追加目录到 PATH 里的方法把 MAVEN_HOME\bin 加进去。改完 新开一个终端 或注销重登。
2. No plugin found for prefix 'spring-boot'
pom.xml 里没引 Spring Boot 插件。加:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
spring-boot-starter-parent 已经管好版本,不用写 version。没继承 parent 的话就得写。
3. 端口占用
Web server failed to start. Port 8080 was already in use.
先查是谁:
netstat -ano | findstr 8080 # Windows
lsof -i:8080 # Linux/Mac
杀掉:
taskkill /PID 12345 /F
或者改端口:
server:
port: 8081
4. artifact ${revision} not found
碰到这种:
Could not find artifact net.maku:maku-boot:pom:${revision} in public
问题不在 Maven 仓库、不在网络。是这个项目用了 Maven 的 CI Friendly Versions 特性——pom.xml 里的版本号写成 ${revision}:
<version>${revision}</version>
需要在根 pom.xml 里定义:
<properties>
<revision>4.11.0</revision>
</properties>
或者启动时传:
mvn spring-boot:run -Drevision=4.11.0
推荐:用 flatten-maven-plugin 生成扁平化的 pom:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.6.0</version>
<configuration>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals><goal>flatten</goal></goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals><goal>clean</goal></goals>
</execution>
</executions>
</plugin>
之后 mvn install 会先把 ${revision} 替换成真实版本再安装到本地库,其它模块拉的时候就不会崩了。
5. 依赖下载慢
Maven 默认仓库在国外,换阿里云或华为云:
~/.m2/settings.xml:
<settings>
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
</mirrors>
</settings>
一次配好,永久生效。
6. 开发热重载
Spring Boot 自带 devtools:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
IDEA 里要开 “Build project automatically” + “Registry: compiler.automake.allow.when.app.running”,代码保存自动 recompile + restart。
一句话总结
开发用 mvn spring-boot:run -DskipTests、生产用 mvn clean package + java -jar。${revision} 报错是 CI Friendly Versions,加 flatten 插件解决。
