基于maven构建一个父子工程,并没有多难,自己动手建了个demo,并总结成基于maven,构建父子项目一文,项目是建好了,也可以正常运行,事情还没有完,当把这个应用到实际的开发中,又遇到了很多问题,经过反反复复的思考琢磨,最终将这些问题解决。
本文主要记录遇到的及解决的问题
- 架包如何引入,怎样防止冲突;
- 一个模块依赖另一个模块,另一个模块的架包找不到怎么办?
- 项目部署后,找不到主文件,咋回事?
- 打包时,正常clean,但是生成架包时,却报找不到怎么办?
- 打好包后,发布运行时,cmd窗口闪了一下,就关闭了,这是为何?
在写遇到的问题前,有一个问题需要解决,什么是父子项目(工程),为什么建立父子项目?
所谓父子项目(工程),就是建立一个文件夹(父文件夹),其他项目(每个项目都是一个独立的文件夹)都在这个文件夹下,这些放在父文件夹下的文件成为子项目。为什么要建立父子项目,主要原因是,项目越建越多,为了便于文件的管理,减少相同代码的冗余。也便于maven架包的管理,当多个项目需要引入同一个架包时,只需要在父项目的pom文件中引入即可,其他子项目继承了父项目,也就不需要再引入了。
使用过Spring Boot的人都知道,为了给项目减压,把一个项目分成多个模块,每个模块又单独成一个服务。
基于Maven建立父子项目,刚好就是把原本属于一个项目的各个模块又集结在一起。说白了,就是一个project下,有N个module,父子工程就是这样建成。
第一个问题,架包如何引入,怎样防止冲突?
架包的引入,本人采用第一引入原则,什么是第一引入原则,就是在需要引入架包的项目导入架包,除非是公共的架包,否则不在父项目中引入。把所有的架包都放在父项目的pom文件中,不是一个好IDEA,还有可能引起架包间的冲突。
一个模块依赖另一个模块,另一个模块的架包找不到怎么办?
第一,先检查所引用的架包,项目里面是否有报错信息,有报错信息就解决掉,一般都是这个问题。
第二,防止缓存,有时删除添加架包,需要一点时间,点击菜单栏的Project->clean,把需要的项目一一clean一下。
项目部署后,找不到主文件,咋回事?
选中项目的主文件,右键点击Run As下的Java Application 或Spring boot App,却报错 主文件找不到,这是怎么回事呢?
第一种解决办法,还是执行Project->clean,把需要的项目一一clean一下,就ok了。
第二种解决办法,选中项目,右键 Run As-> maven clean,maven clean过后,再maven-> update project,把缓存清一清,把需要的架包下载下来。
打包时,正常clean,但是生成架包时,却报找不到怎么办?
项目建好了,也能正常运行,但是打包的时候出错了,这个好办,选中主项目,先对主项目进行maven clean,然后在maven install,这样就能顺利打包了,并且可以在每个子项目的target下面找到对应的jar包。
打好包后,发布运行时,cmd窗口闪了一下,就关闭了,这是为何?
查看pom文件,并和一起能够正常运行的项目进行对比,发现在pom文件中缺少了这样几行代码:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
spring-boot-maven-plugin的意思是,能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。没有加上面的代码,就没有入口文件,没有入口文件,就运行不了,运行不了就报找不到主文件,好吧,这两天遇到的错误,都是找不到主文件。
除了这个错误,还有一个错误,说是找不到配置文件,刚开始以为打包后,resources的资源无法识别,修改了很多配置,依旧找不到。但是在本地运行时,一切是正常的,配置文件是能够读取的,不应该打包后获取不到,又调查了半天,是因为所引用的架包,读取的配置文件在当前项目里没有。所引用的架包在自己的项目里有对应的配置文件,但是被引用后却获取不到了,父子工程后,还有这个区别。
首次建立父子工程时,有些问题还是很纠结的。比如,项目如何分层,架包在哪个节点导入,也曾见过一个项目把所有的架包都在父项目中导入的,结果呢,从注释中可以看出来,曾经遇到了架包冲突,还要再加入额外的依赖架包来解决冲突。这些都是个事儿,而且不是小事。
搭建项目做架构,只能自己在项目进行中,经常分析,实时进行调整,感觉不方便了,麻烦了,费劲了,都要调整,调整到舒适为止。当然,有时不仅仅是怕麻烦,还担心调整架构后,项目会不会出现什么新的问题,如果怕,就先写demo,把会发生的情况都在demo里面预演一遍,这样才是万全之策,小白心态吧。
父子工程,还有一个事情特别重要,谨防循环依赖,千万不能循环依赖。一个架包导入一次就够了,不要重复导入。有些在项目启动时候就自动运行的架包,要不要加入到父项目,这个也是需要值得注意的,根据实际需要吧,根据子项目是如何拆分的来做决定吧。
遇到问题的心态,这个很重要。遇到问题的心态,决定能够多长时间解决问题。遇到问题,应该沉着泠静,先把报错信息的含义弄明白,不要动不动就百度。报错信息,是解决问题的方向,报错信息搞明白了,离解决问题也就不远了。如果不对报错信息思考,只是一味的百度,有些复杂的问题,还真是百度不出来,特别是环境差异引起的报错。
遇到问题,还是那句话,把错误信息读懂了,多读几遍,再去解决问题,千万不要慌里慌张的,十万火急的样子。另外,看资料,尽量看官网,一手资料。
微信扫一扫,关注程就人生
网友评论