1.去官网下载
官网链接
Maven 3.3+ require JDK 1.7
2.解压即可
3.环境配置
因为maven本身就是一个java程序,所以需要jdk环境
同时配置环境变量
MAVEN_HOME:安装目录
编辑环境变量Path,追加%MAVEN_HOME%\bin
1.1 什么是Maven
Maven是项目管理工具
Maven对项目进行模型抽象,充分运用的面向对象的思想,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。简单的来说Maven是一个项目管理工具,它包含了一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),用来运行在生命周期阶段中插件目标的逻辑。
1.2 为什么使用maven
传统的方式是把jar放在lib下,有如下缺陷
(1)jar重复、冗余
(2)管理繁琐,不方便管理
1.3 maven两大核心
(1)依赖管理
(2)项目构建
在 Maven 的术语中,仓库是一个位置(place)。
Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。
1.本地仓库
Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。
运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。
2.中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
中央仓库的关键概念:
这个仓库由 Maven 社区管理。
不需要配置。
需要通过网络才能访问。
3.私有仓库
一般在公司内部搭建nexus私服,通过局域网实现依赖下载,不需要网络访问
使用maven编译,清理,测试,打包,部署项目
1)编译 mvn compile 会生产一个target文件,target下面有一个classes文件夹存放的是我们编译好的类
2) 清理 mvn clean 把编译时生产的target文件夹删掉
3)测试 mvn test 生产的target下面有一个classes和test-classes,maven先帮我们编译项目,然后在执行测试代码
4)打包 mvn package target下面多了一个.jar文件
5)部署 mvn install target下面会有一个.jar文件,使用"mvn install"命令,就把maven构建项目的【清理】→【编译】→【测试】→【打包】的这几个过程都做了,同时将打包好的jar包发布到本地的Maven仓库中,所以maven最常用的命令还是"mvn install",这个命令能够做的事情最多
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
scope
compile :为默认的依赖有效范围。如果在定义依赖关系的时候,没有明确指定依赖有效范围的话,则默认采用该依赖有效范围。此种依赖,在编译、运行、测试时均有效。
provided :在编译、测试时有效,但是在运行时无效。例如:servlet-api,运行项目时,容器已经提供,就不需要Maven重复地引入一遍了。
runtime :在运行、测试时有效,但是在编译代码时无效。例如:JDBC驱动实现,项目代码编译只需要JDK提供的JDBC接口,只有在测试或运行项目时才需要实现上述接口的具体JDBC驱动。
test :只在测试时有效,例如:JUnit。
当引入的两个依赖所关联的其他依赖中有冲突怎么解决?(依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突)
1.第一优先原则
谁出现在pom文件的前面就使用谁
2.路径原则
比如A依赖中有个c jar包,B依赖中有个c jar包,只是c jar包版本不一样
这时我们可以自己去声明一个c Jar包,这样就会使用我们自己刚刚声明的
3.依赖排除
比如A依赖中有个c jar包,B依赖中有个cjar包,只是c jar包版本不一样,这时可以排除A依赖中的c jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.7.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
4.版本管理
声明版本号,以后统一在这里进行管理
使用
${spring.version}
在pom.xml 下添加如下配置(Maven-设置默认Java编译版本1.5)
1.第一种方式放在pom文件(该项目生效)
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
2.第二种方式在setting文件设置(全局生效)
<profile>
<id>jdk1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
再在pom.xml文件中添加tomcat插件,注意导入依赖的位置是在< plugins>< /plugins>标签中
<!-- 加入tomcat插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port> <!-- 访问端口-->
<path>/你的项目路径</path> <!-- 访问路径,一般就是你的项目名注意前面有个‘/’-->
</configuration>
</plugin>