经常需要创建新的项目或者在好几个项目之间进行模块开发,而依赖虽然可以使用maven进行管理,但每个新项目pom.xml的处理都要花费不少的时间,开发的时候习惯使用一些依赖,写着写着发现没有该依赖,就需要去pom.xml中去添加该依赖,这会打断开发的流畅度,而且部分没有的依赖下载还需要时间,需要暂停开发等待下载,而且部分依赖还需要熟悉新的版本的规则,对开发很不友好。
我就想参考SpringBoot框架的依赖管理方式,将自己所用过的依赖全部放到一个依赖管理项目中,然后其他项目在开发的时候只需要添加这个依赖管理项目,就可以一次性导入所有依赖,一次性下载添加所有依赖,加快开发的速度,所有导入这个依赖的项目都不需要关注依赖的版本问题,方便开发者撰写代码。所有的依赖放在同一个依赖管理模块中,不必要的就会出现依赖冲突,在这种情况下,我采取了两种方式进行结合使用。
SpringBoot框架中提供了两种方式导入依赖:spring-boot-starter-parent
和spring-boot-dependencies
。spring-boot-starter-parent
和spring-boot-dependencies
均采用packaging
为pom
方式,进行依赖管理,spring-boot-starter-parent
导入了spring-boot-dependencies
依赖,本质上起作用的是spring-boot-dependencies
这个依赖。但这种方式仍然不方便我的日常开发,packaging
为pom
方式进行依赖管理只是进行了依赖版本的管理,但等待下载这个问题仍然没有解决,很多时候使用到某个依赖时才发现某个依赖没有写入pom.xml
或者下载,就需要等待。
但结合IDEA
编辑器的特性,IDEA
编辑器会主动为导入依赖制定索引,即使后面这个依赖删除了,仍然会提示你导入某个依赖,然后自动修改pom.xml
文件。那我们可以写一个packaging
为jar
的依赖项目,在初次使用创建项目的时候导入这个依赖,IDEA
编辑器下载并为这个packaging
为jar
的依赖项目中的所有依赖指定索引,结束后再将这个依赖注释掉,这样在开发的过程中,就可以根据IDEA
编辑器提示导入依赖,自动修改pom.xml
文件。注意这个packaging
为jar
的依赖项目不建议添加过多的依赖,会降低IDEA
编辑器运行的效率,添加比较常用的依赖即可。
结论,我们可以准备两个项目,parent
项目和dependencies
项目,开发者可以在pom.xml
中的<parent>
标签中导入parent
项目,也可以在项目的<dependencyManagement>
标签中导入parent
项目作为项目的依赖版本管理,然后在<dependencies>
标签中导入dependencies
项目,然后使用IDEA
编辑器maven
刷新,下载并导入常用的依赖,完成后将dependencies
项目注释掉,避免项目的依赖项目过于庞大,这样写代码的过程中遇到依赖不存在的情况使用IDEA
编辑器提供的提示,导入依赖,自动更新pom.xml
,依赖版本受parent
项目管理。
注意:我们需要注意依赖的适用范围和依赖冲突这两个问题,依赖的使用范围由<scope>
标签进行声明,只有compile
(默认)和runtime
的依赖才可以被继承,如果dependencies
项目某个依赖设置为test
,那么即使导入了dependencies
项目,IDEA
编辑器也不会导入该依赖,写代码遇到时仍然需要手动修改pom.xml
文件,等待依赖导入。比如spring-boot-starter-test
就是test
范围的,那我们可以在parent
项目中声明spring-boot-starter-test
的范围是test
,但dependencies
项目声明spring-boot-starter-test
范围为compile
(默认)。依赖冲突可以parent
项目在使用<exclusions>
标签进行处理,将发生冲突的模块进行排除,可以根据个人习惯保证parent
项目的依赖不会冲突。
不过这种方式只适用于开发和测试,可以使用maven
的profile
功能,根据我们在开发中使用的依赖选择生成环境的依赖。