Spring boot项目打包
java开放项目打包的方式
- 第一方式:打成jar包,一般用于做第3方依赖或第二方依赖;
- 第二种方式:打成war包,一般用于存放在tomcat或Jetty java容器里面进行运行
- 第三种方式:打包成ear(一般常用与企业级)
特别说明:
- 代码是以Spring Boot 第一个项目-helloWorld为基础;并进行了多模块方式的重构参见Spring Boot 多模块 Spring Boot 项目--之多模块重构
- idea 工作环境
- 指定mainClass
- 设置依赖
- 打包war时,必须又标准的maven目录结构及文件
构建jar包
第一步:复制工程的路径
#-D:跳过测试单元;-U:更新第三方包
mvn -Dmaven.test.skip -U clean package
打包结束发现错误信息
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.9.BUILD-SNAPSHOT:repackage (default) on project model: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:2.0.9.BUILD-SNAPSHOT:repackage failed: Unable to find main class -> [Help 1]
#说明信息是:spring-boot-maven-plugin,在主类main中找不到
问题的原因:在我们对项目重构为多模块时,main class不同的module中,找出在pom.xml项目中找不到。
解决办法
在pom.xml中为该插件设置mainClass
<configuration>
<mainClass>com.younghare.springBoothelloworld.SpringBootHelloworldApplication</mainClass>
</configuration>
在cmd终端再次用mvn进行打包,奶奶的,又出现问题。看看小马哥大神什么解决
出现问题信息
#很多包找不到,提示信息。发现时很多包找不到,
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project persistence: Compilation failure: Compilation failure:
[ERROR] /D:/czg/czgIdea/springBoot-helloworld/persistence/src/main/java/com/younghare/springBoothelloworld/repository/UserRepostory.java:[4,49] 程序包com.younghare.springBoothelloworld.domain不存在
[ERROR] /D:/czg/czgIdea/springBoot-helloworld/persistence/src/main/java/com/younghare/springBoothelloworld/repository/UserRepostory.java:[20,41] 找不到符号
[ERROR] 符号: 类 User
[ERROR] 位置: 类 com.younghare.springBoothelloworld.repository.UserRepostory
[ERROR] /D:/czg/czgIdea/springBoot-helloworld/persistence/src/main/java/com/younghare/springBoothelloworld/repository/UserRepostory.java:[30,25] 找不到符号
[ERROR] 符号: 类 User
[ERROR] 位置: 类 com.younghare.springBoothelloworld.repository.UserRepostory
[ERROR] /D:/czg/czgIdea/springBoot-helloworld/persistence/src/main/java/com/younghare/springBoothelloworld/repository/UserRepostory.java:[41,23] 找不到符号
[ERROR] 符号: 类 User
[ERROR] 位置: 类 com.younghare.springBoothelloworld.repository.UserRepostory
[ERROR] -> [Help 1]
发现时很多包找不到,那么我们需要把这些包的依赖添加到主pom.xml的(把persistence的pom.xml中的依赖copy出来)
<dependencies>
<dependency>
<groupId>com.younghare</groupId>
<artifactId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
再cmd中重新执行mvn再次打包,发现错误越来越离谱了
按老师的说法,现在这个web变成我们的主模块,所有我们<build>部分剪切出来,黏贴到web 模块的pom.xml中
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>com.younghare</groupId>
<artifactId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<configuration>
<mainClass>com.younghare.springBoothelloworld.SpringBootHelloworldApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
再次用mvn命令打包,发现成功了
用java -jar 方式启动
#普通启动
java -jar web-0.0.1-SNAPSHOT.jarweb-0.0.1-SNAPSHOT.jar
#指定端口(少了一个“-”运行起来还是8089端口)
java -jar web-0.0.1-SNAPSHOT.jarweb-0.0.1-SNAPSHOT.jar - server.port=9000
#指定端口(正常)
java -jar guns.jar --server.port=9000
构建war包
要打包成war包,在web模块的pom.xml中,需要包<packing>值改为war
<!--
将packing值调整为war的方式(默认值时jar的形式)
-->
<packaging>war</packaging>
再在cmd中用mvn命令打包
#-D:跳过测试单元;-U:更新第三方包
mvn -Dmaven.test.skip -U clean package
解决办法:Maven工程 添加的war包war报错 解决方案
错误提示:Some problems were encountered while processing the POMs
解决办法:IDEA搭建maven多模块工程时碰到的错误Some problems were encounter
打包成war包提示:需要添加WEB-INF/web.xml文件,这是maven打包的标准
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:3.1.0:war (default-war) on project web: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
[ERROR]
解决办法:添加web.xml文件及其目录webapp/WEB-INF
再次用mvn打包,发现正常通过,并生成war包
#正常war包是用tomcat 或jettty启动,在此仍然用java -jar 启动
java -jar web-0.0.1-SNAPSHOT.war
也运行成功
在阿里云ecs上运行又要看log
#后台运行(指定好log文件)
nohup java -jar guns.jar --server.port=8761 > logs_guns.log &
#光标移到下一行时,按ctrl+c
ctrl+c
#动态跟踪log日志(log文件名)
tail -f logs.log
附上我添加的一个备注文档
1:打包成war包的命令参见,可以直接在cmd中运行forGetWar.bat 命令或资源管理器中运行forGetWar.bat
mvn -Dmaven.test.skip -U clean package
2:运行在本地cmd命令窗口运行
cd D:\czg\czgIdea\springBoot-helloworld\web\target
java -jar web-0.0.1-SNAPSHOT.war
3:如果是运行在阿里云ECS或其他服务器上
3.1 :上传web-0.0.1-SNAPSHOT.war 文件到服务器(ftp或xftp等方式)
3.2 :copy 该文件到 /opt/jar/ 目录
3.3 后台方式运行 (注意nohup是不挂服务器,除非云服务器重启;最后的&表示执行命令后要在后台运行。最后会生成日志文件nohup.out。)
nohup java -jar web-0.0.1-SNAPSHOT.war --server.port=8080 &
4:在云服务器上更新war包
4.1 用netstat -anp |grep 8080 查看端口占用情况
4.2 用 kill -9 1999 (其中1999表示查到的进程id)
4:按步骤上上传并执行
推荐资料
微服务 SpringBoot 2.0(二):配置文件解析--itmsbx
将Spring boot文件部署到阿里云上-简书
springboot项目打包部署到阿里云--csdn