maven使用
下载
- 按照对应的jdk版本进行下载 :
https://maven.apache.org/
- 并在环境变量中配置M2_HOME以及在path下配置%M2_HOME%\bin
- 在命令行窗口下执行mvn -v,如果出现以下结果安装成功
什么是maven
- maven是一款服务于java平台的自动化构建工具
- maven是apache组织开源的项目
- maven本身是java开发的
- 可以使用maven对java项目进行构建、依赖管理
maven的作用
- 依赖管理
- 一键构建
- 有许多的插件,可以支持整个项目的开发、打包、测试及部署等一系列行为。
- 下载jar包
maven的相关词汇
- 仓库
- 本地仓库:当前电脑上部署的仓库,为当前电脑上所有的Maven工程服务。
- 远程仓库:架设在Internet上,为全世界的所有Maven工程服务。
- 私服:架设在当前局域网环境下,为当前局域网范围内的所有Maven工程服务。
- 坐标:
使用下面三个向量在仓库中唯一定位一个Maven工程
<!--组id 一般为公司名+项目名-->
<groupId>junit</groupId>
<!--模块名-->
<artifactId>junit</artifactId>
<!--对应模块的版本-->
<version>3.8.1</version>
- 作用域:
scope: - test 仅在测试时有效;
- compile 在编译、运行、测试、打包都有效;
- provided 编译、测试时有效,运行、打包无效;
- runtime 测试、运行、打包时有效;
- system 不推荐使用,使用system作用域不会去本地仓库寻找依赖,要指定本地路径
命令行创建项目
1. mvn archetype:generate -DgroupId=com.jinxiangyang -DartifactId=java -DarchetypeArtifactId=maven-archetype-quickstart
使用maven-archetype-quickstart脚手架进行创建、该命令创建组id为com.jinxiangyang,工件id为java
1. mvn archetype:generate -DgroupId=com.jinxiangyang -DartifactId=web -DarchetypeArtifactId=maven-archetype-webapp
使用maven-archetype-webapp脚手架进行创建、该命令创建组id为com.jinxiangyang,工件id为web
maven生命周期
- validate 验证项目
- compile 执行编译
- test 测试
- package 打包
- verify 检查
- install 安装
- deploy 部署
maven项目结构
- java项目
- web项目
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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 使用parent标签指定当前工程的父工程-->
<!-- <parent>-->
<!-- 父工程的坐标-->
<!-- <groupId>com.atguigu.maven</groupId>-->
<!-- <artifactId>pro03-maven-parent</artifactId>-->
<!-- <version>1.0-SNAPSHOT</version>-->
<!-- </parent>-->
<!-- 当前Maven工程的坐标/子工程坐标 -->
<!-- 如果子工程坐标中的groupId和version与父工程一致,那么可以省略 -->
<groupId>com.jingxianyang</groupId>
<artifactId>server</artifactId>
<!-- version:模块的版本号,根据自己的需要设定-->
<!-- 例如:SNAPSHOT 表示快照版本,正在迭代过程中,不稳定的版本-->
<!-- 例如:RELEASE 表示正式版本-->
<version>0.0.1-SNAPSHOT</version>
<!-- 当前Maven工程的打包方式,可选值有下面三种: -->
<!-- jar:表示这个工程是一个Java工程 -->
<!-- war:表示这个工程是一个Web工程 -->
<!-- pom:表示这个工程是“管理其他工程”的工程,父工程不需要src目录 -->
<packaging>war</packaging>
<properties>
<!-- 工程构建过程中读取源码时使用的字符集 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- 通过自定义属性,统一指定mysql依赖的版本 -->
<jingxianyang.mysql.version>8.0.29</jingxianyang.mysql.version>
<jingxianyang.servlet.version>3.1.0</jingxianyang.servlet.version>
<jingxianyang.druid.version>1.2.8</jingxianyang.druid.version>
<jingxianyang.dbutils.verison>1.6</jingxianyang.dbutils.verison>
<jingxianyang.thymeleaf.version>3.0.15.RELEASE</jingxianyang.thymeleaf.version>
<jingxianyang.junit.version>4.13.2</jingxianyang.junit.version>
<jingxianyang.logback.version>1.2.11</jingxianyang.logback.version>
<jingxianyang.lombok.version>1.18.22</jingxianyang.lombok.version>
</properties>
<!-- 子模块-->
<!-- <modules>-->
<!-- <module>pro04-maven-module</module>-->
<!-- </modules>-->
<!-- 使用dependencyManagement标签配置对依赖的管理 -->
<!-- 被管理的依赖并没有真正被引入到工程 -->
<!-- 子工程引用父工程中的依赖信息时,可以把版本号去掉。 -->
<!-- 把版本号去掉就表示子工程中这个依赖的版本由父工程决定。 -->
<!-- 具体来说是由父工程的dependencyManagement来决定。 -->
<!-- dependencies复数标签:里面包含dependency单数标签-->
<dependencies>
<!-- dependency单数标签:配置一个具体的依赖-->
<!-- 查找依赖的地址https://mvnrepository.com/ -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${jingxianyang.lombok.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${jingxianyang.mysql.version}</version>
<!-- scope标签配置依赖的范围 -->
<!-- runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。-->
<!-- <scope>runtime</scope>-->
<!-- provided:只在编译或测试的时候使用-->
<!-- <scope>provided</scope>-->
<!-- compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,-->
<!-- 运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。-->
<!-- <scope>compile</scope>-->
<!-- test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包-->
<!-- <scope>compile</scope>-->
<!-- test 和 provided 范围不能传递-->
<!-- <scope>import</scope>-->
<!-- import 依赖范围使用要求:-->
<!-- 打包类型必须是 pom-->
<!-- 必须放在 dependencyManagement 中-->
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${jingxianyang.servlet.version}</version>
<scope>provided</scope>
<!-- 使用excludes标签配置依赖的排除-->
<!-- <exclusions>-->
<!-- 在exclude标签中配置一个具体的排除-->
<!-- <exclusion>-->
<!-- 指定要排除的依赖的坐标(不需要写version)-->
<!-- <groupId>commons-logging</groupId>-->
<!-- <artifactId>commons-logging</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${jingxianyang.junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${jingxianyang.logback.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 对构建过程进行自己的定制-->
<!-- <build>-->
<!-- 当前工程在构建过程中使用的最终名称-->
<!-- <finalName>demo-me</finalName>-->
<!-- </build>-->
<build>
</build>
<!--mvn package 打包操作-->
<!--mvn clean 删除 target 目录-->
<!--mvn compile 主程序编译-->
<!--mvn test 测试操作 测试操作中会提前自动执行编译操作,测试成功就说明编译也是成功的-->
<!--mvn test -complie 测试程序编译-->
<!--mvn install 安装操作-->
<!--mvn dependency:list 查看当前工程依赖的jar包列表-->
<!--mvn dependency:tree 以树形结构查看当前Web工程的依赖信息-->
<!--mvn clean install -Dmaven.test.skip=true -D 表示后面要附加命令的参数,字母 D 和后面的参数是紧挨着的,中间没有任何其它字符 表示在执行命令的过程中跳过测试-->
<!--mvn help:effective-pom 查看有效 POM-->
<!--mvn archetype:generate-->
<!-- mvn主命令:-->
<!-- 子命令:-->
<!-- archetype插件-->
<!-- generate目标-->
<!--创建web工程命令-->
<!--mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4-->
<!--pom四个层次-->
<!-- 超级POM:所有 POM 默认继承,只是有直接和间接之分。-->
<!-- 父POM:这一层可能没有,可能有一层,也可能有很多层。-->
<!-- 当前pom.xml 配置的 POM:我们最多关注和最多使用的一层。-->
<!-- 有效POM:隐含的一层,但是实际上真正生效的一层。-->
<!-- 官网说明地址:https://maven.apache.org/plugins/maven-help-plugin-->
<!-- 目标 说明-->
<!-- help:active-profiles 列出当前已激活的 profile-->
<!-- help:all-profiles 列出当前工程所有可用 profile-->
<!-- help:describe 描述一个插件和/或 Mojo 的属性-->
<!-- help:effective-pom 以 XML 格式展示有效 POM-->
<!-- help:effective-settings 为当前工程以 XML 格式展示计算得到的 settings 配置-->
<!-- help:evaluate 计算用户在交互模式下给出的 Maven 表达式-->
<!-- help:system 显示平台详细信息列表,如系统属性和环境变量-->
</project>
maven的setting.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<!-- 本地仓库 -->
<!-- 默认用户目录下.m2/repository -->
<localRepository>D:/Program Files/Apache Software Foundation/apache-maven-3.9.0/repository/</localRepository>
<pluginGroups>
</pluginGroups>
<proxies>
<!-- 配置代理 -->
</proxies>
<servers>
</servers>
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>alimaven1</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
</mirrors>
<profiles>
<!--配置jdk版本-->
</profiles>
<!-- 激活哪些配置项 -->
<activeProfiles>
<activeProfile>alwaysActiveProfile</activeProfile>
<activeProfile>anotherAlwaysActiveProfile</activeProfile>
</activeProfiles>
</settings>
除以上基础配置maven还有部署镜像等功能,可以通过插件进行配置
idea使用maven
- 配置即可使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X4nAqrdk-1688553045337)(image-5.png)] - 创建常用项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MzRuTjsz-1688553045338)(image-7.png)] - 创建Spring boot项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sxtr63WW-1688553045339)(image-5.png)]
Profile>
除以上基础配置maven还有部署镜像等功能,可以通过插件进行配置
idea使用maven
-
配置即可使用
-
创建常用项目
-
创建Spring boot项目