maven入门
目录:
一:打包
二:项目目录
三:生命周期
四:jar冲突
五:仓库与私服搭建
六:定制项目模型
maven的主要功能就是打包,管理包。
一:打包:
原始的javac命令打jar包,有了maven之后打jar包更加方便。
mvn package
mvn install
mvn deploy
三者的区别:
package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库;
install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库;
deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库。
二:项目目录:
Maven固定的目录结构:
src/main/java
src/main/resource
pom.xml
pom.xml文件结构常用节点:
Jar包管理:<dependencies></dependencies>
模块(子项目)管理:<module></module>
插件配置:<build></build>
全局变量配置:<properties></properties>
三:生命周期
1clean --> 2build --> 3site
clean: pre-clean clean post-clean
build: process-resources,compile,test-compile,test,package,process-classes,install,deploy
site:site,post-site,site-deploy
三个生命周期完全独立,maven只定义生命周期,具体的执行交由plugin插件来完成,
运行任何一个阶段,其前面的所有阶段都会被运行,如:mvn install,会default引一阶段运行到install阶段。
插件plugin是绑定到生命周期,承担实际功能的组件。mvn运行时,自动关联插件来运行
SNAPSHOT:快照版本,随时更新,不稳定;
RELEASE:发布(正式)版本,所有非-SNAPSHOT结尾的版本号,是稳定的版本号。一旦发布永远不变。有的仓库会配置成redeploy覆盖
四:jar冲突
原因:
依赖传递导致的jar冲突,
依赖的使用原则:1路径最短优先,2同路径长度下,谁先声明谁优先
解决:指定排除错误依赖,exclusion标签
五:仓库与私服搭建
maven仓库,就是放置所有的jar文件的位置
本地仓库:
本地环境安装maven后,会生成一个本地仓库位置(.m2/respository/ ),可在maven的配置文件中更改此位置(建议更改)
远程仓库和中央仓库:
当maven要查找构件时,发现本地仓库中没有,则需要从远程仓库下载构件到本地仓库
中央仓库:
当我们不配置远程仓库时,maven会默认一个仓库,即maven官方的仓库,称之中央仓库
maven依赖的搜索顺序:
步骤 1 - 在本地仓库中搜索,找到则成功。
步骤 2 - 在远程仓库中搜索,找到则下载。
步骤 3 - 如果没有设置远程仓库,Maven 默认去中央仓库搜索,找到则下载。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。
使用nexus搭建私服:
搭建私服的原因:
1.例如基金公司或者银行是不提供外网给项目组人员的,因此不能访问到Maven的远程仓库,但是希望项目Jar包可以通过Maven进行管理,此时就可以在局域网里找一台有外网权限的机器搭建Nexus私服,然后开发人员通过私服可以下载到远程仓库的Jar包。
2.如果公司有一些公共的代码需要打成jar包提供给其他的项目使用,这些jar包也想交给Maven管理,这时候我们就可以把这些公共的jar包上传到私服中,然后团队成员就可以在项目中通过Maven的方式添加改公共jar包的依赖。
nexus的仓库类型:
proxy:代理远程仓库,缓存由此方式下载的jar
hosted(宿主):内部项目的发布仓库
group(门面,仓库组):仓库的组合,对外提供服务的路径
配置私服:
配置此url有两种方式:
1、全局配置方式
在maven的setting文件里,通过mirror指定私服地址,此方式对全局生效
2、局部配置方式
在本项目的pom里,指定repository配置,此方式只对本项目生效
六,自定义项目模型(archetype典范)
通过Maven原型maven-archetype-archetype来创建自定义Archetype的方法。此插件是maven官方的项目结构,不一定符合我们的企业本义
下面,我们自已定义一种项目结构模式,并将其打成标准包,供企业整体员工后续使用。
步骤:
1-生成archetype项目
在选定的项目根目录下,执行命令:mvn archetype:create-from-project
2-打包archetype插件并安装
此archetype项目也是一个maven工程,一样有构建/安装/发布等动作
进入项目根目录,执行命令:mvn clean install
3-IDE工具加载archetype,新建工程
add archetype