脚本宝典收集整理的这篇文章主要介绍了Maven 学习笔记,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
M2_HOME
和 PATH
环境变量conf/setting.xml 相当于 maven 的全局配置,我们一般不直接需改该文件,而是复制一份到 ~/.m2
目录下进行修改。
~
表示当前用户的根目录。
本地仓库用于存放依赖包,其默认地址为: ~/.m2/reposITory
。因为本地仓库可能会占用大量的硬盘空间,所以我们要修改本地仓库的地址。
<localRepository>D:devrepository</localRepository>
用于解决下载依赖过慢或无法下载依赖的问题,因为中央仓库不在国内。
加载依赖的过程: 本地仓库 -> (镜像仓库 ->End) 远程仓库。如果配置了镜像仓库,远程仓库将会被屏蔽掉。
<mirrors>
<mirror>
<id>Tencent Mirror</id>
<mirrorOf>central</mirrorOf>
<name>腾讯 Maven 镜像</name>
<url>http://mirrors.cloud.tencent.COM/nexus/repository/maven-public/</url>
</mirror>
</mirrors>
mirrorOf 共有四种匹配规则:
maven 中已经内置了一个 id 为: central 的远程仓库,即中央仓库,具体介绍看下文的 SuPEr POM。
*
external:*
central
!central
在 Settings...
-> Build、Execution、Deployment
-> Build Tools
-> Maven
中配置 Maven home path 即可。
我们一般使用 org.apache.maven.archetypes.maven-archetype-webapp
为原型创建 web 工程,其结构如下。
PRoject
|-- pom.xml
`-- src
`-- main
`-- webapp
|-- WEB-iNF
| `-- web.xml
`-- index.jsp
使用原型创建 web 工程后目录不要进行修改,因为该原型中所使用的插件将遵行该结构进行构建,修改目录结构后将无法正常构建工程(需要重新配置插件参数信息才能正常构建,因此我们遵循该默认结构即可)。
官方介绍: Maven - Introduction to the POM
官方总览: Super POM for Maven 3.6.3
一个普通的 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>
<groupId>org.example</groupId>
<artifactId>my-artifact</artifactId>
<version>1.0-sNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
<?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>
<groupId>org.example</groupId>
<artifactId>any-java-code</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--这里以 Junit 5 为例-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
聚合工程中根工程的 pom.xml 的 packaging 标签指定为 pom,且根工程不编写其他代码。
推荐文章: Maven pom.xml中的元素modules、parent、properties以及import - 青石路 - 博客园
相关内容: 父子工程直接继承依赖、父子工程间接继承依赖(依赖管理)、定义 pom 属性。
如果 A 工程依赖于 B,同时 B 又依赖 于C ,那么 A 工程中将存在 C 的依赖(即 A 中存在 C 的 jar 包),这就是依赖的传递。
最左边一行表示第一直接依赖范围,最上面一行表示第二直接依赖范围,中间的交叉单元格则表示传递依赖范围。
因为存在依赖的传递性,可能 A 工程中的多个直接依赖都又依赖于 C ,且它们的版本不一致,这就会造成依赖冲突。
当发生依赖冲突时 maven 中内置了两个规则来解决冲突问题:
有时候我们不需要根据 maven 内置的依赖冲突解决方案来解决冲突,或则我们不需要依赖传递到根工程,那么我们可以通过排除依赖来实现。
通过 exclusions 标签排除掉 junit-jupiter-engine 传递的依赖 junit-platform-engine:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.0</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
个人推荐的国内镜像站,任选其一即可。
<mirror>
<id>Tencent Mirror</id>
<mirrorOf>central</mirrorOf>
<name>腾讯 Maven 镜像</name>
<url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror>
<mirror>
<id>Aliyun Mirror</id>
<mirrorOf>central</mirrorOf>
<name>阿里云 Maven 镜像</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
<mirror>
<id>huawei Mirror</id>
<mirrorOf>central</mirrorOf>
<name>华为 Maven 镜像</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
<mirror>
<id>163 Mirror</id>
<mirrorOf>central</mirrorOf>
<name>网易 Maven 镜像</name>
<url>http://mirrors.163.com/maven/repository/maven-public/</url>
</mirror>
以上是脚本宝典为你收集整理的Maven 学习笔记全部内容,希望文章能够帮你解决Maven 学习笔记所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。