工作以来,一直在用maven,也出现过一些比较奇怪的问题。
虽然只要花点时间,大部分问题都解决,但总感觉不踏实,所以稍微总结一下。
第一篇:当前博客
第二篇:结合具体案例分析:https://blog.csdn.net/qq_37855749/article/details/111048657
第三篇:以后时间补上,总结一下maven的构建流程以及基本命令。
为什么需要maven?
需求推动着技术的发展,maven的出现必然是为了解决一些问题。
至于这些问题是什么 ,我想做过传统项目的人应该都能体会到。每当需要一个jar包时,都得去官网找,然后导入。
甚至出现套娃现象,我需要A的jar包,但是A依赖于B这个jar包,B依赖于C这个jar包。。。。。。
后来上手maven后,就再也没遇到过这种事了。
当然,jar包管理只是maven一部分功能的体现,它的项目构建能力同样强大。
下载
https://maven.apache.org/download.cgi
如果想要全局使用mvn命令,则需要配置环境变量。
修改本地仓库和镜像
本地仓库,就是jar包从中央仓库(云端的)拉取下来后,存放的位置。
打开maven conf文件夹中的settings.xml文件
默认是在C盘的一个隐藏文件夹里,但一般我们会改一下。
改成其他盘任意存在的文件夹
mirrors结点可以改镜像,我们改成阿里云的镜像
<mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
-->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
这是一个阿里提供的代理仓库,包含了maven的中央仓库。
如果你需要其他公开的仓库,可以去这个网站查查
https://maven.aliyun.com/mvn/guide
pom.xml文件分析
pom(Project Object Model),项目对象模型,是maven对于被管理项目的一个描述文件。
我们在开发过程中,一般之和它打交道。
我们先大致了解一下这些节点的基本作用,再通过一个实际案例详细说明。
官网上有一个二级节点的预览
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- The Basics -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!-- Build Settings -->
<build>...</build>
<reporting>...</reporting>
<!-- More Project Information -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- Environment Settings -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
- groupId、artifactId、version
组织名(公司名)、项目名称、版本。
这三个组合在一起,就是一个定位器,可以精确定位到一个全球唯一的项目。
- packaging
默认情况下是jar包,
如果是web项目,如SSM,就需要打成war包。
SpringBoot两者都可以。
- dependencies
可以在这个节点里面配置dependency,
例如
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
- parent
当几个工程项目的依赖都差不多时,我们可以建一个父项目
将打包模式packaging设置为pom。
子项目通过parent引入父项目的配置。
- properties
很常用,子节点property。通过变量的形式,指定依赖版本。比较灵活。
- build
配置插件的地方。
这样看标签的含义比较抽象,所以补充了一篇,通过具体的项目案例来分析每个标签的作用,由于篇幅原因,拆成了两篇
地址:
https://blog.csdn.net/qq_37855749/article/details/111048657