Maven
2019-01-24 本文已影响0人
半数的年
还没有maven的时候,我们在项目添加依赖包的时候,需要自己下载添加到lib,但在项目中引入的依赖包其又依赖别的依赖包,并且可能存在版本冲突的问题。
一、认识maven
解决复杂依赖传递问题,打包项目
- 约定优于配置
- 简单易用
- 支持测试
- 插件丰富
二、安装和配置
- MVN_HOME
-
配置setting.xml
加载配置的顺序
1、阿里镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
2、profies可以配置开发、测试、生产不同环境时的配置

三、maven项目结构

1、pom.xml
(1)、groupId 域名反过来
(2)、artfactId 功能命名
(3)、version 版本号
- 主版本号.次版本号.增量版本号-<里程碑版本>
- mvn clean package -U (每次上线版本release强制从远端仓库重新拉一次)
(4)、packaging 打包方式 默认是jar
(5)、dependencyManagement
a)、只能出现在父pom
b)、统一版本号
c)、声明 (子POM里用到再引)
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
(6)、dependency
- Type 默认jar
- scope 定义依赖包在什么时候,并且会不会在打包上(优化pom文件)
a)compile 编译 (默认)
b)test 测试
c)provided 例如 tomcat已经提供servlet的依赖包,这个依赖在编译时就不会被打包上
d)runtime运行时 例如JDBC驱动实现在运行时才会用到,编译时不会用到。
e)system 本地一些jar 在maven中央仓库没有的依赖包,例如短信jar -
依赖传递
第一列表示直接依赖的scope,第一行表示间接依赖的scope
image.png
-
依赖仲裁
a)、最短路径原则
b)、加载先后原则,当最短路径相等时,则是按书写顺序的先后
image.png
- exclusions
排除包 例如spring内引用common-logging,在项目并不会用来,可用来排除这个依赖包。
四、生命周期

五、常用命令
- compile
- clean 删除target/ 生成的包
- test test case junit/testNG
- package 打包
- install 把项目install到local repo
- deploy 发本地jar发布到remote
六、实现plugin
七、搭建私服
- a)、下载nexus http://books.sonatype.com/nexus-book/reference3/index.html
- b)、安装启动
http://127.0.0.1:8081
nexus.exe /run
admin/admin123 - c)、发布pom.xml 配置
<distributionManagement>
<repository>
<id>xiaoyuan-nexus-release</id>
<name>Nexus Release Repository</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>xiaoyuan-nexus-snapshot</id>
<name>Nexus Snapshot Repository</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
- d)、setting.xml配置
<servers>
<server>
<id>xiaoyuan-nexus-release</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>xiaoyuan-nexus-snapshot</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
八、自定义archetype(脚手架)
- 生成一个archetype
a)、mvn archetype:create-from-project
b)、cd /target/generated-sources/archetype
c)、mvn install - 从archetype创建项目 mvn archetype:generate -DarchetypeCatalog=local
九、实现dev、test、pro不同环境下的配置
-
不同环境下的配置文件
image.png
- pom.xml配置
<profiles>
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<profiles.active>pro</profiles.active>
</properties>
</profile>
</profiles>
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<excludes>
<exclude>conf/**</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources/conf/${profiles.active}</directory>
</resource>
</resources>
</bulid>
-
在打包时则使用 mvn clean package -P pro,生成对应的配置文件
image.png