记一次将项目拆分成多模块的过程
之前做的项目一直都是单模块的,直到有一次去外地出差,看到公司的一个springmvc项目把service和mapper拆分成单独的一个项目。我很是惊讶,向大哥讨教才知道是把单个项目拆分成多个模块,觉得很是高级。
前不久向松哥买了一个微人事教学资料,很巧,他的项目到后期也整合成多模块项目,于是想记录一下。
前置准备工作配置maven
如果你的项目是idea来开发并且使用的是他自带的maven,那你就去你的idea安装目录下的plugins目录下的maven目录,如果你用的maven2或者maven3,找到对应目录下的conf目录下的settings.xml,如果你使用的是自己的,也是一样,找到settings.xml
1.使用notepad++打开,定位到标签
按如下配置:
<profiles>
<!-- profile
| Specifies a set of introductions to the build process, to be activated using one or more of the
| mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
| or the command line, profiles have to have an ID that is unique.
|
| An encouraged best practice for profile identification is to use a consistent naming convention
| for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
| This will make it more intuitive to understand what the set of introduced profiles is attempting
| to accomplish, particularly when you only have a list of profile id's for debug.
|
| This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo. -->
<profile>
<id>jdk-1.8</id>
<activation>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
<!--<repositories>
<repository>
<id>jdk14</id>
<name>Repository for JDK 1.4 builds</name>
<url>http://www.myhost.com/maven/jdk14</url>
<layout>default</layout>
<snapshotPolicy>always</snapshotPolicy>
</repository>
</repositories>-->
</profile>
准备好之后开始改造自己项目
首先关闭idea或退出当前工程;
进入自己工程所在位置,把文件夹下的文件删的只留下src和pom.xml
我这里是已经删过了的,正常的话会有一些idea自己配置或者是maven的;
创建新的maven工程
不用骨架构建,直接next
创建好的一个新的maven项目叫vhr,然后接着创建一个子maven项目,作为服务端就叫vhrserver
在子项目vhrserver里开始创建不同的模块,我这里创建mapper、model、service还有一个web(其实就是之前的准备改造的工程),这里还有必要做一个说明,在模块改造的时候,不知道是不是因为idea太智能了还是咋地,我移进来的原工程(在这里是vhr-web)项目结构出现严重错乱,所以请各位老铁在拷贝进新工程里的时候一定要有所备份以防不测。
创建好之后才是麻烦的开始,你要捋清楚你原来的文件要放到新工程的哪里?当然我这个一目了然哈,model mapper service,我觉得不会有谁不知道吧?心里怎么放都有点b数的。但是最烦的就是捋清依赖关系。下面开始描述具体步骤,有些我自己遇到的坑,请留意。
首先要转移父工程位置到最外层
vhrserver的pom.xml里面为什么会没有vhr-web这个模块呢?
大哥解释是跟vhrserver没关系,暂时可以不加
开始放model
首先要创建好一个包,然后:
去原工程把所有的model类全部拷贝进来(当然,你喜欢怎么拷贝 就怎么拷贝)
还有我要把spring-boot-starter-web依赖导进来,为什么呢?因为我的有些类用了他里面的注解,比如@JsonFormat不添加会爆红。还有security的依赖也要放进去,
然后开始搞mapper
也是老样子把所有的类拷贝进来,方法如上;
第二要添加依赖,因为大家知道,mapper是需要实体类的,所有这里要把实体类的依赖添加进来。
这里呢我要重点强调一件事情:
这个版本号需要锁定,如果不锁定,你将会看到满世界的红线。
锁定方法是:
选中对应的model依赖按住快捷键Ctrl+alt+空格键,会自动提示,选择就行。
mapper里面还要druid和mybatis的依赖,也从之前的vhr-web工程里剪切进去。
oduile,我忘记了说一件事得补充一下
因为我这里是把mapper的xml文件和类放在了一起没有放在静态目录下,所以这里我还需要在pom文件里写一个配置,让springboot识别他。
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resource</directory>
</resource>
</resources>
</build>
接着开始搞service
所有类拷贝
添加依赖,众所周知,service依赖于mapper。什么,你不知道?你没在service的类里面写过return mapper.*****吗?
所以放依赖:
我这里还把原本的utils包放到了service下面,所以还需要他们对应的依赖
web层(因为这里有控制层controller)所以要把service的依赖导进去
其余的web端不动,可能会有人问,为什么mysql的包不导入到mapper里面,他是连接数据库的关键啊,为什么要放在web里面呢?
因为mysql驱动仅仅只是在运行时生效,你放到mapper里面,其实不起任何作用。更何况我的项目里,web模块里还有一个类需要jdbc包,所有要在web模块保留mysql。
玩到这个时候,你启动自己的项目,你会发现他会报错:
在看maven
为什么会有这样的错误呢,是因为我们在操作的时候,忘记了把后导入进来的vhr-web工程添加父依赖,他无法锁定版本号。只需要添加自己父依赖就OK。
好了开始启动
我这里启动没有任何问题,可能到了你那,可能会提示你配置SDK啊什么的,正常配置就可以了。