maven是一个跨平台的依赖管理工具,可统一管理依赖、自动构建项目。
配置阿里云镜像
https://help.aliyun.com/document_detail/102512.html
聚合仓库里的依赖多,一般使用聚合仓库(group)。
可点击右上角的使用指南,把maven的配置粘到maven配置文件中即可,给的配置默认就是聚合仓库的。
IDEA中使用Maven
可以使用IDEA自带的maven,也可以使用自己下载的。
需要在IDEA没有打开项目的情况下配置,如果打开了项目,则maven配置只对该项目生效。
1、配置路径
2、配置参数
默认直接到远程仓库下载依赖,配置为:先在本地仓库中找,有就直接使用,没有才去远程仓库下载
-DarchetypeCatalog=internal
Maven中的相关概念
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
- groupId 公司、组织的名称
- artifactId 项目名称
- version 项目版本号。SNAPSHOT 快照,开发中的版本,不稳定;Release,发布版本。
以上3部分组成依赖的坐标,唯一标识一个依赖。scope是依赖的作用时期
- test 只作用于测试时
- runtime 只作用于运行时
- provided 只作用于编译时
- compile 默认值,可缺省,编译、测试、运行时都有效
Maven常用命令
mvn -v或version #查看maven版本
mvn clean #清理,删除target文件夹(之前编译、打包产生的文件)
mvn compile #编译
mvn test #测试
mvn package #打包为jar或war(取决于pom.xml中的打包配置)
mvn install #安装,把jar包放到本地仓库中
mvn deploy #部署
Maven项目目录
- .idea IDEA对项目的一些配置,留着
- .mvn 打包用的,基本用不到,删掉
- src main放源码,test放测试代码。java下放java代码,resources下放资源文件。
- .gitignore 指定上传到git仓库时哪些类型的文件被忽略、不上传
- HLEP.md 说明、帮助,没啥用,删掉
- .iml IDEA的一些配置,留着
- mvnw、mvnw.cmd 这2个是IDEA自带的maven命令,可以删掉
- pom.xml
总结:将.mvn、HLEP.md、mvnw、mvnw.cmd删掉,只保留.idea、src、.gitignore、.iml、pom.xml,看起来清爽一些
多模块开发
经常要把一个项目拆分为多个模块进行开发,比如微服务。2种方式
- 新建空项目,里面新建子模块
- 父子工程(聚合工程)推荐。 新建maven项目,删除不需要的东西,里面新建子模块。子模块会继承父项目的依赖,可以用父项目的pom.xml统一子项目的依赖版本。注意:并不是所有依赖都会继承,子模块不继承scope是provided、test的依赖。
常见问题
jar包冲突
jar包冲突:重复引入某个依赖(相同版本或不同版本),maven不知道使用哪个。
在pom.xml中引入一个依赖,maven会自动导入这个依赖的依赖,方便的同时也容易造成jar包冲突。
直接导入的依赖叫做直接依赖,间接导入的依赖叫做间接依赖,比如我们导入A,A依赖B,maven自动导入B,A是直接依赖,B是间接依赖。
解决jar包冲突:
如果不知道是哪些jar包冲突了,先看依赖关系图,找到冲突的jar包。
- 如果冲突的包都是直接依赖、或者都是间接依赖,把要用的那个放前面,先声明的优先级高;或者把要用的写成直接依赖,直接依赖优先级比间接依赖高
- 可以用<exclusion>排除不要的间接依赖,一个<exclusion>排除一个间接依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
</dependency>
版本号显示为红色
原因是jar包版本太高,远程仓库中还没有,改低一点即可
配置了阿里镜像后仍从中央仓库下载依赖
这个问题常见于拉取别人的项目,在pom.xml中手动添加maven仓库配置即可
<repositories>
<repository>
<id>nexus-aliyun</id>
<name>nexus-aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
如果还是不行,新建了一个maven项目,看是否从阿里的镜像仓库下载依赖、是否连接到阿里的仓库。
Maven项目默认使用JDK1.5
2种解决方式
方式一、在pom.xml设置源码、编译使用的jdk版本
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
也可以在插件中设置
<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>
方式二、修改IDEA的配置
修改源码版本,Sources 、Dependencies中的jdk版本都看一下
修改编译使用的jdk版本(目标版本)
说明
IDEA 2020.1版取消了maven的自动导入,修改pom.xml后,需要手动Reimport。
转载:https://blog.csdn.net/chy_18883701161/article/details/106277245