MAVEN拾遗
maven拾遗
maven是一种很常见的项目管理工具。关于它的基础知识,从maven入门教程可以全面学习。
在这里,主要是对日常工作遇到的问题进行记录,加以学习。详细了解maven可以使我们对项目结构理解更为深刻,科学规范的maven设置,可以避免很多错误出现,对maven的精细化设置思想也可以应用到项目开发、管理中。
每一点都清晰,才是清晰
1、packing设置
maven的打包设置,可以设置为jar(默认)、pom、war。
打包方式是与工程构建的生命周期对应的,这里就需要对maven中的生命周期和项目工程中的生命周期概念进行了解,请在下文了解。
1、pom主要是作为项目依赖的版本控制的,也就是说主要是为了在pom.xml中管理各个依赖版本等信息,此外不具有其他意义。
这里,我曾经在一个自定义starter项目中设置packing为pom,结果导致Springboot无法扫描加载该项目中的spring.factories文件定义的配置类。
2、jar 项目,主要是提供给其他项目使用,简单理解为将一些公共的配置类、工具类等集中到一个项目中写入,然后以jar的形式提供给其他项目使用。
3、war 项目主要是打包以部署到服务器使用。
生命周期
1、项目工程的生命周期基本上是指清理、编译、测试、打包和部署。
2、maven根据常见的开发过程,定义了一系列的maven生命周期规范,主要有清理、初始化、编译、测试、打包、集成测试、验证、部署和生成站点这些步骤。主要又被分为clean、default、site三个步骤,目的分别是清理,编译测试打包部署,和建立、发布站点。
3、maven只是定义了生命周期,完成这些步骤需要一定的实现,主要是通过mavne的插件来完成的,并非maven本身。
2、scope设置
maven依赖的作用范围设置。主要可以设置为compile、provided、runtime、test、system。
compile:是依赖的默认作用范围,其依赖在所有的生命周期内都会有效。
provided:在编译、测试期间有效,但是在运行期间就无效了。比如servlet相关的jar,在运行期间因为有相关web容器的存在就不必了。
runtime:在运行和测试期间有效。比如jdbc相关驱动,只有在项目运行的时候–运行、测试阶段,才会有需要。
test:就是测试的时候才会有效。比如junit依赖。
system:在编译和测试时才会有效。主要是引入第三方依赖,无法从maven仓库引入的依赖,与主机密切绑定,必须使用systempath参数指定路径引入。这里需要注意,当打包的时候,该作用范围的依赖很可能不会打入到jar中,需要在打包插件中设置
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>