文章目录
- Maven学习
- 1. 简介
- 1.1 介绍
- 1.2 安装
- 1.2.1 下载
- 1.2.2 安装maven
- 1.2.3 配置镜像源(加快下载)
- 1.2.4 IDEA配置maven
- 1.3 基于IDEA进行Maven工程构建
- Maven工程的GAVP
- 创建
- Maven工程项目结构说明
- 1.4 Maven生命周期
- 1.4.1 介绍
- 1.4.2 命令讲解
- 编译(mvn compile)
- 删除(mvn clean)
- 测试(mvn test)
- 报告
- 打包(mvn package)
- 安装(mvn install)
- 1.4.3 可视化构建
- 1.4.4 构建的周期
- 1.4.5 Maven 插件
Maven学习
名称 | 链接 | 备注 |
---|---|---|
maven首页地址 | https://maven.apache.org/ | |
maven历史版本下载 | https://archive.apache.org/dist/maven/maven-3/ | 不同版本需要适配不同的jdk |
maven仓库 | http://mvnrepository.com/ | |
视频链接 | https://www.bilibili.com/video/BV1JN411G7gX | |
阿里云镜像仓库 | https://developer.aliyun.com/mvn/guide |
推荐几个好的 Maven 常用仓库网址:
- http://mvnrepository.com/
- http://search.maven.org/
- http://repository.sonatype.org/content/groups/public/
- http://people.apache.org/repo/m2-snapshot-repository/
- http://people.apache.org/repo/m2-incubating-repository/
1. 简介
1.1 介绍
1.2 安装
1.2.1 下载
第一步,打开页面,选择自己想要的版本https://maven.apache.org/docs/history.html
打开以下页面,进行下载
https://archive.apache.org/dist/maven/maven-3/
如果是windows选择zip。如果是linux选择 bin用户
bin:含有Maven的运行脚本
boot:含有plexus-classworlds类加载器框架
conf:含有Maven的核心配置文件
lib:含有Maven运行时所需要的Java类库
LICENSE、NOTICE、README.txt:针对Maven版本,第三方软件等简要介绍
1.2.2 安装maven
step 1: 配置 MAVEN_HOME(在系统变量中配置)
step 2: 配置Path
%MAVEN_HOME%\bin
step 3: 命令测试(cmd窗口)
mvn -v
# 输出版本信息即可,如果错误,请仔细检查环境变量即可!
1.2.3 配置镜像源(加快下载)
我们需要需改maven/conf/settings.xml配置文件,来修改maven的一些默认配置。我们主要休要修改的有三个配置:
1.依赖本地缓存位置(本地仓库位置)
2.maven下载镜像
3.maven选用编译项目的jdk版本
配置本地仓库地址(注意下方,默认的本地仓库为:${user.home}/.m2/repository)
在自己设置本地仓库路径时,注意不要有中文和空格文件名,且后续如果 jar ,我们需要手动找到并删除
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<!-- conf/settings.xml 55行 -->
<localRepository>D:\maven-repository</localRepository>
配置镜像源
<!--在mirrors节点(标签)下添加中央仓库镜像 160行附近-->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
配置jdk17版本项目构建
<!--在profiles节点(标签)下添加jdk编译版本 268行附近-->
<profile>
<id>jdk-17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>17</jdk>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
</properties>
</profile>
1.2.4 IDEA配置maven
我们需要将配置好的maven软件,配置到idea开发工具中即可! 注意:idea工具默认自带maven配置软件,但是因为没有修改配置,建议替换成本地配置好的maven!
选择本地maven软件
注意:
1、如果本地仓库地址不变化,只有一个原因,就是maven/conf/settings.xml配置文件编写错误!仔细检查即可!
2、一定保证User settings file对应之前修改的settings.xml的路径,若不一致,选中Override复选框,手动选择配置文件
1.3 基于IDEA进行Maven工程构建
Maven工程的GAVP
maven和别的java项目有啥区别呢?
Maven工程相对之前的项目,多出一组
gavp
属性,gav(表示当前工程的坐标)需要我们在创建项目的时候指定,p(表示打包方式)有默认值(默认为 jar 包,因此在 java 中无无需单独设置),我们先行了解下这组属性的含义:
Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四个属性的缩写,其中前三个是必要的,而 Packaging 属性为可选项。这四个属性主要为每个项目在maven仓库中做一个标识,类似人的姓-名!有了具体标识,方便后期项目之间相互引用依赖等!
GAV遵循的规则:
-
GroupID 格式
:com.{公司/BU }.业务线.[子业务线],最多 4 级。说明:{公司/BU} 例如:alibaba/taobao/tmall/aliexpress 等 BU 一级;子业务线可选。
正例:com.taobao.tddl 或 com.alibaba.sourcing.multilang
-
ArtifactID 格式
:产品线名-模块名。语义不重复不遗漏,先到仓库中心去查证一下。正例:tc-client / uic-api / tair-tool / bookstore
-
Version版本号格式推荐
:主版本号.次版本号.修订号1) 主版本号:当做了不兼容的 API 修改,或者增加了能改变产品方向的新功能。
2) 次版本号:当做了向下兼容的功能性新增(新增类、接口等)。
3) 修订号:修复 bug,没有修改方法签名的功能加强,保持 API 兼容性。
例如: 初始→1.0.0 修改bug → 1.0.1 功能调整 → 1.1.1等
-
Packaging定义规则
:指示将项目打包为什么类型的文件,idea根据packaging值,识别maven项目类型!
packaging 属性为 jar(默认值),代表普通的Java工程,打包以后是.jar结尾的文件。
packaging 属性为 war,代表Java的web工程,打包以后.war结尾的文件。
packaging 属性为 pom,代表不会打包,用来做继承的父工程。
创建
首先注意设置项目的 SDK ,选择对应的 JDK 版本,每个新项目通常都无
接下来切换maven环境。不使用idea自带的
项目的目录结构。
-
新建的 maven module 文件 src 下面有 main 有
test
两个文件,main 下面有java
和resources
,test 下面有 java ,注意这个结构是不能改的,这是 maven 工程默认的结构,规定的结构。 -
main 里面放的是核心程序,test 里面放的是测试程序。以后一定要把对应的内容放入到对应的文件中,这是规定。
pom内容讲解
切换打包方式。变成jar包
添加其他jar包
访问以下网站: https://mvnrepository.com/
直接搜索想要增加的 jar 包,这里以 junit 为例:
随便选择一个版本
这里就是 jar 包的所有信息,复制
粘贴到 pom.xml 文件中,放到 dependencies 标签中
<dependencies>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.3</version>
<scope>test</scope>
</dependency>
</dependencies>
我们可以看到在依赖中,添加了别人写的jar包
Maven工程项目结构说明
Maven 是一个强大的构建工具,它提供一种标准化的项目结构,可以帮助开发者更容易地管理项目的依赖、构建、测试和发布等任务。以下是 Maven Web 程序的文件结构及每个文件的作用:
|-- pom.xml # Maven 项目管理文件
|-- src
|-- main # 项目主要代码
| |-- java # Java 源代码目录
| | `-- com/example/myapp # 开发者代码主目录
| | |-- controller # 存放 Controller 层代码的目录
| | |-- service # 存放 Service 层代码的目录
| | |-- dao # 存放 DAO 层代码的目录
| | `-- model # 存放数据模型的目录
| |-- resources # 资源目录,存放配置文件、静态资源等
| | |-- log4j.properties # 日志配置文件
| | |-- spring-mybatis.xml # Spring Mybatis 配置文件
| | `-- static # 存放静态资源的目录
| | |-- css # 存放 CSS 文件的目录
| | |-- js # 存放 JavaScript 文件的目录
| | `-- images # 存放图片资源的目录
| `-- webapp # 存放 WEB 相关配置和资源
| |-- WEB-INF # 存放 WEB 应用配置文件
| | |-- web.xml # Web 应用的部署描述文件
| | `-- classes # 存放编译后的 class 文件
| `-- index.html # Web 应用入口页面
`-- test # 项目测试代码
|-- java # 单元测试目录
`-- resources # 测试资源目录
- pom.xml:Maven 项目管理文件,用于描述项目的依赖和构建配置等信息。
- src/main/java:存放项目的 Java 源代码。
- src/main/resources:存放项目的资源文件,如配置文件、静态资源等。
- src/main/webapp/WEB-INF:存放 Web 应用的配置文件。
- src/main/webapp/index.jsp:Web 应用的入口页面。
- src/test/java:存放项目的测试代码。
- src/test/resources:存放测试相关的资源文件,如测试配置文件等。
1.4 Maven生命周期
1.4.1 介绍
Maven生命周期是一系列阶段的集合,定义了项目的构建过程。常用的生命周期包括:
- clean: 清理项目,删除
target
目录。 - validate: 验证项目是否正确。
- compile: 编译项目的源代码。
- test: 使用单元测试框架运行测试。
- package: 将编译好的代码打包成可分发的格式,比如JAR。
- verify: 对集成测试的结果进行验证,以保证质量。
- install: 将打包好的项目发布到本地仓库。
- deploy: 将项目发布到远程仓库。
这些生命周期是顺序执行的,你可以在某一个生命周期的阶段执行自定义的插件任务。
<build>
<!--扫描文件资源-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<!--插件-->
<pluginManagement><!-- lock down plugins versions to avoid
using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current
/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see
https://maven.apache.org/ref/current/maven-core/default-
bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/
maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
1.4.2 命令讲解
命令 | 描述 |
---|---|
mvn compile | 编译项目,生成target文件 |
mvn package | 打包项目,生成jar或war文件 |
mvn clean | 清理编译或打包后的项目结构 |
mvn install | 打包后上传到maven本地仓库 |
mvn deploy | 只打包,上传到maven私服仓库 |
mvn site | 生成站点 |
mvn test | 执行测试源码 |
这里我们新建一个类
添加依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
新建用户类
package com.lkcoffee.framework;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Desciption:
* @Author: feixiang.li
* @date: 2024-07-25 10:34
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
/**
* 用户ID
*/
private Long id;
/**
* 用户姓名
*/
private String name;
/**
* 用户年龄
*/
private int age;
/**
* 用户地址
*/
private String address;
}
MyTest类
package com.lkcoffee.framework;
/**
* @Desciption:
* @Author: feixiang.li
* @date: 2024-07-25 10:26
**/
public class MyTest {
public static void main(String[] args) {
User user = new User(1L,"joker", 18, "北京");
System.out.println(user);
System.out.println("hello world");
}
}
编译(mvn compile)
我们看下自动生成的target。字节码文件以 .class 为后缀
父工程一般是不生成target目录的。所以代码的话尽量写在子工程
删除(mvn clean)
输入进去过后,会把target目录删除掉
测试(mvn test)
添加依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
创建测试类
package com.lkcoffee.framework;
import org.junit.Assert;
import org.junit.Test;
/**
* @Desciption:
* @Author: feixiang.li
* @date: 2024-07-25 11:39
**/
public class MyTest {
@Test
public void test1(){
int a=10;
int b=20;
// 使用断言
Assert.assertEquals(a+b,30);
}
}
这个时候,我们想要编译文件,就必须输入以下命令,编译test中的代码并且运行test类中的方法。
mvn test
下面的命令是编译test文件夹。但是不运行test类中方法
mvn test-compile
注意点,测试的方法名字和测试的类名是要注意的,有一定的匹配规则,当没有test名字的时候,运行是不编译的
规则如下: 必须以Test开头,或者Test结尾,或者Tests结果,或者TestCase
案例,我们把代码改成一下内容
package com.lkcoffee.framework;
import org.junit.Assert;
import org.junit.Test;
/**
* @Desciption:
* @Author: feixiang.li
* @date: 2024-07-25 11:39
**/
public class MyAAA {
@Test
public void aaa(){
int a=10;
int b=20;
System.out.println("运行了aaa");
// 使用断言
Assert.assertEquals(a+b,30);
}
}
运行mvn test
。我们可以看到代码是不运行的
报告
报告是没有命令的,他在运行的时候,就会自动生成报告信息
比如运行mvn clean test
。
报告的目录在surefire-reports下面。
打包(mvn package)
运行mvn clean package
我们看信息。这里就涉及到很多的插件。插件的使用方式在后面的 plugins配置里面即可。
安装(mvn install)
运行
mvn install
运行完mvn install
。我们可以看到本地的仓库中就可以看到jar。按照maven的坐标进行寻找。
所有的包都是按照maven的坐标按照到本地的。
别的模块想使用
然后再代码中即可使用
1.4.3 可视化构建
把手动输入命令的功能可视化
1.4.4 构建的周期
构建周期作用:会简化构建过程
例如:项目打包 mvn clean package即可。
我们会发现在运行package的时候,会先编译,然后测试,再来打包。
主要两个构建生命周期:
清理周期:主要是对项目编译生成文件进行清理
包含命令:clean
默认周期:定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分
包含命令:compile - test - package - install - deploy
1.4.5 Maven 插件
Maven 插件是执行构建任务的工具,它们与生命周期和阶段相关联。常见的插件包括:
- maven-compiler-plugin: 用于编译Java源代码。
- maven-surefire-plugin: 用于执行单元测试。
- maven-jar-plugin: 用于打包JAR文件。
- maven-failsafe-plugin: 用于执行集成测试。
在 pom.xml
文件中,可以通过配置插件来定制项目的构建过程。以下是一个例子,使用 maven-compiler-plugin
插件配置Java编译器版本:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
这里,我们配置了 maven-compiler-plugin
插件,指定了Java源代码和目标字节码的版本。