关于vhr项目部署所遇到的问题总结,Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin
从gitee或者github上拉取项目后,大概是下面这样的一个目录结构:
首先声明,个人是纯后端开发人员,对vue仍处于了解阶段,根据我的经验,找到前端同事协助并启动了前端项目,当然得安装node.js和vue脚手架这些,本来想着启动看看系统页面长什么样子,但碍于权限问题,折腾半天也没弄出什么名堂来。然后转攻后端项目。
项目需要用到maven构建,mysql,redis,rabbitmq,三者通过docker可以快速安装并使用,本账号也有一些文章可以参考,maven install成功后,启动遇到的第一个问题就是:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin,这个通过修改pom文件就得到了解决。
红色框中的内容,原项目没有,加上就不会报上面的错,重新编译后启动又遇到一个新的问题:Found non-empty schema(s) “PUBLIC” but no schema history table,这个配置一下application.yml文件也可以解决。
红色框中的内容为新加内容,原项目中没有。
对了,mysql数据库中,我自己新建了一个名为vhr的数据库,并执行了项目中的sql脚本,初始化表结构及数据。这次启动后端项目就没有什么问题了。
我傻傻的同时启动了前端项目和后端项目,访问前端的8080端口,可以正常访问,验证码也能够刷新出来的,但是,成功登陆后,菜单栏为空,没有任何导航地址,一开始我以为是前后端通信的问题,最后发现,直接访问后端的8081端口即可。
这个项目虽然是前后端分离,但部署的时候,原创者npm run build对前端项目打包后,拷贝到了vhr-web的resources/static目录下,所以直接启动vhr-web项目即可。vhr-web为一个单独的module,但pom文件中添加了vhr-service依赖,后者又添加了mapper依赖,再关联上了model依赖,第一次看到这种目录还是挺别扭的。
最后,上面提到的flyway相关的问题,其实是一个数据库版本管理工具。我们把刚才创建的vhr数据库删掉,因为里面已经初始化了所有的表结构,再重新创建一个新的数据库,名字还是vhr,接着,再vhr-web的pom中添加flyway依赖:
<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId>
</dependency>
前面配置了flyway相关的参数就不再配置了,重新启动项目。
flyway自动根据sql初始化数据库,并且,创建了一张名为flyway_schema_history的表来记录我们的数据库更新日志。打开该表可见:
当前最新的版本为1,如果想要更新数据库,可在db.migration放入更新的版本sql脚本,项目启动后会自动更新,以此来有效管理项目中数据库的版本,得到及时的更新。