Maven学习笔记-安装及使用
一、什么是MavenMaven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)Maven是用Java语言编写的。他管理的东西统统以面向对象的形式进行设计,最终他把一个项目看成一个对象,而这个对象叫做POM(projectobject model),即项目对象模型二、Maven有什么用?(1)项目构建:提供标准的,跨平台的自动化构建项目的方式(2)依赖管理:方便快捷的管
一、什么是Maven
Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
Maven是用Java语言编写的。他管理的东西统统以面向对象的形式进行设计,最终他把一个项目看成一个对象,而这个对象叫做POM(project object model),即项目对象模型
二、Maven有什么用?
(1)项目构建:提供标准的,跨平台的自动化构建项目的方式
(2)依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题
(3)统一开发结构:提供标准的,统一的项目开发结构,如下图所示:
各目录存放资源类型说明:
src/main/java:项目java源码
src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
src/main/webapp:web资源(比如html,css,js等)
src/test/java:测试代码
src/test/resources:测试相关配置文件
src/pom.xml:项目pom文件
三、Maven下载及安装
https://maven.apache.org/download.cgi
Mavne不需要安装,减压缩可以使用。文件结构
各目录结构说明:
bin:可执行程序目录,
boot:maven自身的启动加载器
conf:maven配置文件的存放目录
lib:maven运行所需库的存放目录
配置环境变量:
然后进入命令提示符
需要注意的是:依赖java-jdk,而且变量名需要设置为JAVA_HOME,否则会出现错误。
四、仓库和坐标的概念
仓库有三种:本地仓库,私服,中央仓库,其中私服和中央仓库都属于远程仓库
中央仓库:maven团队自身维护的仓库,属于开源的
私服:各公司/部门等小范围内存储资源的仓库,私服也可以从中央仓库获取资源(保存具有版权的资源,包含购买或自主研发的jar;一定范围内共享资源,能做到仅对内不对外开放)
本地仓库:开发者自己电脑上存储资源的仓库,也可从远程仓库获取资源
我们说maven的仓库里存储了各种各样的资源(jar包),那这些资源我们如何找到它们呢?我们需要知道它们具体的一个位置才能知道如何找到它们,这个就叫坐标
坐标:maven中的坐标用于描述仓库中资源的位置,相当于放在电脑中不同文件夹的路径。
那maven中的坐标是如何构成的呢?
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>3.0-alpha-2</version>
</dependency>
maven坐标的主要组成如下:
groupId:定义当前资源隶属组织名称(通常是域名反写,如:org.mybatis;com.itheima)
artifactId:定义当前资源的名称(通常是项目或模块名称,如:crm,sms)
version:定义当前资源的版本号
查询其他资源的坐标可以使用 https://mvnrepository.com/ 这个网站。
五、仓库的配置
配置文件位于conf/setting.xml中文件。
默认的本地仓库位于:${user.home}/.m2/repository,如用户名为zs,则仓库的地址为:C:\Users\zs.m2\repository,不便于管理,我们使用自定义路径:D:\maven\LocalWarehouse
设置阿里镜像:
<!--配置阿里云maven私有仓库(即配阿里私服)-->
<mirror>
<id>alimaven</id>
<mirrorOf>*</mirrorOf>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<!-- maven官方镜像 -->
<mirror>
<id>mirrorId</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name </name>
<url>https://repo1.maven.org/maven2/</url>
</mirror>
<!-- 阿里云镜像1 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://central.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- 阿里云镜像2 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/nexus/content/repositories/central/</url>
<mirrorOf>central</mirrorOf>
</mirror>
设置完成以后,复制一份setting.xml文件,放置在和LocalWarehouse同级目录下。
以后我们使用资源的时候,首先去本地仓库找去,如果没有就去私服或者中央仓库去下载到本地仓库。
maven的构建命令以mvn
开头,后面添加功能参数,可以一次性执行多个命令,用空格分离,如果在IDE中可以直接点击右边的菜单就可以完成。
mvn compile
:编译
mvn clean
:清理
mvn test
:测试
mvn package
:打包
mvn install
:安装到本地仓库
六、在IDE中配置Maven
但是每次新建项目的时候,都会还原到初始的配置,导致重新下载依赖,解决的方法如下:
依赖配置:pom.xml
<?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/maven-v4_0_0.xsd">
<!-- 指定了当前POM模型的版本,对于Maven2及Maven3来说,它只能是4.0.0;-->
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<!--本项目对应的坐标,如果把这段代码的拷贝到别的项目的pom.xml的dependency中,则这个项目中的依赖就会传递给目标项目,这就是依赖传递-->
<name>maven04</name>
<groupId>org.lvmanba</groupId>
<artifactId>maven04</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 插件:构建项目所需要的信息-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!--依赖:设置当前项目运行所需的jar,一个项目可以设置多个依赖,如果引入相同的包,后面的覆盖前面的-->
<dependencies>
<!-- 设置具体依赖-->
<dependency>
<!-- 依赖所属群组id-->
<groupId>junit</groupId>
<!-- 依赖所属项目id-->
<artifactId>junit</artifactId>
<!-- 版本号-->
<version>4.12</version>
<!-- scope限制该包的作用范围
1、compile:默认的scope,可以在生命周期中使用。
2、provided:scope 只能作用在编译和测试时,同时没有传递性;使用这个时,不会将包打入本项目中,只是依赖过来。
3、runtime:表示dependency不作用在编译时,但会作用在运行和测试时。
4、test:表示dependency作用在测试时,不作用在运行时。
5、system:跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它。
6、import:它只使用在<dependencyManagement>中,表示从其它的pom中导入dependency的配置。
-->
<scope>test</scope>
<!-- 被继承以后是否显示,相当于私有-->
<optional>true</optional>
</dependency>
</dependencies>
</project>
更多推荐
所有评论(0)