谷粒学院的这个项目,除了最后的权限管理模块,其他部分都还可以。最不能容忍的就是最后的项目部署,拿了一个最简单的项目来讲解完自动化部署模块之后就没有任何教程了。而且使用自动化部署项目,对于初学者来说,即抽象又不能了解一点底层的原理,现阶段来说不太容易实现。
本次对于本项目的部署采用idea+maven的方式打包项目,首先看一下整个项目的架构。
1、打包准备
所有的顶层模块中的pom文件中的打包方式都改为pom,即在pom文件中添加:
<packaging>pom</packaging>
所有需要打包的子模块的打包方式都改为jar,即在子模块中的pom文件中添加:
<packaging>jar</packaging>
在需要打包,并且有SpringBootApplication注解标注主类的子模块中的pom文件中添加:
<build>
<!--maven的打包插件-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
另外因为service下的子模块中需要读取mapper包下的xml文件,所以需要在service模块下的pom文件中添加:
<build>
<!--打包规则,打包时将resource文件夹打包进去-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
最后,梳理父子模块关系,总工程中只能有其下的顶层模块,不能包含顶层模块下的子模块。在总工程下的pom文件中的体现为:
<modules>
<module>common</module>
<module>service</module>
<module>canal_client</module>
<module>infrastructure</module>
</modules>
同理顶层模块下只有其子模块,以service为例,其pom文件为
<modules>
<module>service-oss</module>
<module>service-vod</module>
<module>service-cms</module>
<module>service_msm</module>
<module>service-ucenter</module>
<module>service-order</module>
<module>service-statistics</module>
<module>service-acl</module>
<module>service-edu</module>
</modules>
注意:模块不能多也不能少。
2、打包流程
先对于总工程进行 clean和 install。
再对于总工程下的每一个顶层模块进行 clean和 package。
顶层模块的打包顺序为:common ==> infrastructure ==> service。
至此,每个子模块的jar包都会出现在target目录下。
3、部署
直接将打包的jar包拷贝到linux服务器的任一文件夹中。
使用下面的命令运行即可:
nohup java -Xms64m -Xmx64m -jar service-acl-0.0.1-SNAPSHOT.jar &
这里由于我只有一台4G和一台2G的服务器,只有选择将2G服务器作为redis、mysql和nacos的运行平台,4G服务器作为微服务运行的平台,所以给每个服务器的内存相对小了一些。即便在这种情况下,打包的微服务也不能完全运行,只能运行6个微服务,给各位做个参考。
下一篇将介绍在线教育的前端打包和部署流程。