依赖管理环境激活 依赖管理
在项目中如果我们需要引入一个依赖,一般直接在官网https://mvnrepository.com查找,然后将其添加到maven的pom.xml文件中的
其中
compile:默认编译依赖范围。 被依赖项目在编译,测试,运行都参与,依赖的jar包会在项目打包时包含进去,随着项目直接发布。provided: 依赖的jar包在运行期无效,在项目打包时也不会包含进去,在运行时由服务器提供。如servlet-apiruntime: 运行时使用,依赖的jar无需参与项目的编辑,如jdbc驱动test: 依赖的jar包仅仅参与测试相关的工作,如测试代码的编译、执行system: 不建议使用,不依赖maven仓库解析,需要提供依赖的显示路径,对项目的移植来说极不方便
另外上图中的
一般来说我们在引入依赖的jar包时,会指定其版本号,这样Maven在解析过程中首先尝试直接从本地仓库寻找jar包,若本地仓库不存在,则遍历所有的远程仓库,找到相应的jar包后进行下载使用。
当然如果执行的版本号不是稳定的版本号,而是以-SNAPSHOT结尾的快照版本,那么无论本地仓库中是否存在对应得jar包,Maven都会从远程仓库中进行下载更新本地仓库。
最后其实还有两种不推荐的使用方式,就是
在项目中引入依赖jar包时,我们经常会碰到一个问题,就是依赖冲突,通常的原因一般是同一个jar包由于maven传递依赖等原因被引进了多个不同的版本而导致。
比如上图中project项目会使用哪个fastjson包呢,这里主要依据最短最先原则:
至于exclusions的用法,也非常的简单,比如:
最后再来介绍一下pom.xml文件中
那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上查找对应得版本号。
这里我们需要注意
对于 另外其实对于 需要注意的是,这里我们还需要设置其scope=import,即表示继承此项目为父项目 在实际项目中开发中,通常会用开发、测试、预发、线上等多个环境,配置文件往往也不同。所以打包时需要对配置文件做出选择,Maven就为我们提供了profiles机制。 首先我们需要在pom.xml文件中,进行定义profiles,如下: 上述定义的意思是,当mvn命令执行时,我们可以通过-P dev或者-P prod方式传入我们的意图,即dev/prod的选择,会导致properties里的定义变量package.environment值的不同。 maven打包过程中会默认会将resources文件夹下全部复制,这里我们可以先将resources下的dev和prod文件夹排除,然后根据上述变量package.environment的值来复制指定的配置信息 上述其实就是利用了Maven的生命周期及插件开发中介绍的生命周期default的process-resources,其相对应的maven-resources-plugin插件可以复制指定的主资源文件至主输出目录,其中${project.build.outputDirectory}是maven的内置变量,无需设置 然后我们执行Mavne的打包命令了,按照上述的设置其默认的是dev配置,如果希望指定配置则使用-P,如下: 上述仅仅配置了其默认激活的配置,其中还可以做更多的选项,如部分可使用配置如下: 另外还可以直接在环境中定义属性值,如下:
只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父项目的pom.xml文件;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本
如上图项目结构中,我们在resources目录下新建了dev及prod文件夹,其中我们分别针对不同的环境进行相关的配置,那么我们在打包的时候该如何处理呢?