Maven基础
Maven是什么
传统项目管理状态分析
Maven的作用
maven本质上是一个项目管理工具,是将项目开发和管理过程抽象成一个项目对象模型(POM:project object model)
maven可以为我们进行项目构建(提供标准化,跨平台的zi'dong话项目构建方式),依赖管理(方便快捷的管理项目的依赖资源jar包,避免资源及版本的冲突),同意开发结构:提供标准统一的项目结构。
Maven的安装
https://maven.apache.org/download.cgi该网站下载安装。
maven属于是绿色软件,解压即安装
Maven文件结构
Maven环境变量配置
-
依赖于java,需要配置JAVA_HOME
-
设置Maven自身的MAVEN_HOME
-
运行cmd输入mvn检测是否安装成功
Maven的基础概念
仓库
仓库:用于存储各种资源,包含各种jar包
仓库分类:
-
本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
-
远程仓库:非自己电脑上的仓库,为本地仓库提供资源
-
-
中央仓库:Maven团队维护,存储所有资源的仓库
-
私服:部门/公司范围内存储的仓库,从中央仓库获取资源
-
-
私服的作用:
-
-
保存具有版权的资源,包含自主研发或购买的jar(中央仓库的的jar包都是开源的,不能存储具有版权的资源)
-
一定范围内共享资源,仅对内部开放,不对外共享。
-
坐标
坐标是用来在仓库中资源的位置的。
https://repo1.maven.org/maven2/该链接中是maven中央仓库资源。
maven坐标的组成:
-
groupId:定义当前Maven项目隶属于组织的名称(通常是域名反写)
-
version:定义当前项目的版本号
-
packaging:定义当前项目的打包方式
本地仓库配置
-
-
默认的仓库配置
${user.home}/.m2/repository
-
自定义自己的仓库位置
<settings>
<localRepository>D:\maven\repository</localRepository>
</settings> -
中央仓库的配置位置
在lib文件中随便找一个jar包用winrar打开,然后返回上一级目录搜索pom*.*,找到pom-4.0.0.xml文件,定位到。将文件拖出后打开。
-
远程镜像仓库的配置(当需要访问中央仓库的时候,就会去访问镜像仓库。ps:中央仓库在国外,访问速度慢)
<!-- 配置具体仓库的下载镜像 -->
<mirror>
<!-- 此镜像的唯一标识符,用来区分不同的mirror元素 -->
<id>ali-maven</id>
<!-- 对哪种仓库进行镜像,简单说就是代替哪个仓库 -->
<mirrorOf>central</mirrorOf>
<!-- 镜像的名称 -->
<name>aliyun maven</name>
<!-- 镜像的URL -->
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
-
Maven项目构建命令
后面的命令在执行的时候都会执行前面的命令,如:在执行install的时候前面的生命周期都会执行。
创建maven项目(idea)
-
创建一个空的项目
-
file——>setting——>build,execution——>Build Tools ——> Maven
选择自己的安装的maven,选择自己的配置文件。
在新项目配置中采用同样的配置
-
创建maven 项目
idea使用maven命令
在idea的右边有一个maven选项,打开后点击声明周期可以运行maven的命令(与命令效果相同)
也可以点击上方的锤子选择Maven,添加命令在执行达到一样的效果(优点:可以使用debug模式运行)
idea使用原型模板创建项目
使用原型创建java项目
使用原型创建web项目
运行web项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--指定pom的模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--组织id-->
<groupId>org.example</groupId>
<!--项目名称-->
<artifactId>untitled1</artifactId>
<!--版本号,release(完成版),snapshot(开发版)-->
<version>1.0-SNAPSHOT</version>
<!--打包方式为web是war包-->
<packaging>war</packaging>
<name>untitled1 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<!--构建-->
<build>
<!--设置插件-->
<plugins>
<!--具体的插件位置-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!--具体的配置-->
<configuration>
<!--端口-->
<port>80</port>
<!--虚拟路径-->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
-
使用命令选项运行
Maven的依赖管理
依赖配置
<dependencies>
//单个依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
依赖传递
-
直接依赖:当前项目通过文件依赖配置建立的依赖关系。
-
间接依赖:被依赖的资源如果依赖于其他资源,那么当前项目间接依赖于其他资源。
依赖传递冲突
-
路径优先:当依赖中出现相同的资源时,层级越深优先级越低,层级越浅,优先级越高
-
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
-
特殊优先:当同级出现了相同资源的不同版本,后配置的覆盖先配置的
-
总结:比较时哪个先出现先用哪个
可选依赖
在被依赖的配置文件中对不想被依赖的依赖选项添加一个optional选项,默认时false,将其修改为true即可(控制别人能不能引用自己引用的依赖)
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
<optional>true</optional>
</dependency>
排除依赖
如果不想引用间接依赖的中一些依赖,可以主动排除这个依赖(不去引用别人引用的依赖)
<dependency>
<groupId>org.example</groupId>
<!--项目名称-->
<artifactId>untitled1</artifactId>
<version>1.0-SNAPSHOT</version>
//排除包含
<exclusions>
//具体排除的依赖
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖的范围
-
作用范围
scope | 主代码 | 测试代码 | 打包 | 范例 |
---|---|---|---|---|
compolie(默认) | Y | Y | Y | log4j |
test | Y | junit | ||
provided | Y | Y | servlet-api | |
runtime | Y | jdbc |
依赖范围的传递性
-
带有依赖范围的资源在传递的时候,作用的范围将受到影响
行中为直接依赖选项,列为间接依赖的选项
compolie | test | provided | runtime | |
---|---|---|---|---|
compolie | compolie | test | provided | runtime |
test | ||||
provided | ||||
runtime | runtime | test | provided | runtime |
间接依赖 |
项目的构建生命周期
Maven对项目构建生命周期分为三个阶段,不同阶段有不同的过程事件
-
clean:清理工作
-
defult:核心工作,例如编译,测试,打包,部署等
-
site:产生报告,发布站点
插件
<!--具体插件:对test区域源代码的打jar-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<!--插件的行为-->
<executions>
<!--具体行为-->
<execution>
<goals>
<!--目标:执行的结果,这里时打jar包,并未所有的插件都有-->
<goal>jar</goal>
<!--可以打多个jar包-->
<goal>test-jar</goal>
</goals>
<!--在哪个阶段执行-->
<phase>generate-test-sources</phase>
</execution>
</executions>
</plugin>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。