推荐网站(不断完善中):个人博客
个人主页:个人主页
相关专栏:CSDN相关专栏
立志赚钱,干活想躺,瞎分享的摸鱼工程师一枚
你问我摸鱼有多深?先进Maven这个坑!
为什么这样说呢?相信很多Java的新手在初步接触Java这个语言一定时间后,会发现有一个很麻烦的地方就是很多要用到的工具
jar包
需要自己手动进行引入,也要自己手动的去找,这给你在高速敲代码的路上带来了阻碍。而Maven这个项目管理工具则很好的解决了这个问题。
体验一下什么是一键构建项目…
Maven是apache下的一个开源项目,是纯Java开发的,主要作用于管理java项目。Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具
总结一下这么官方的话术:方便Java的CV程序员们创建一个
统一结构的项目
让大家看起来
都用起来
都方便!
每个模块都单独开发
,在用maven的时候改变单独模块的源码不需要去同时编译别的模块在我们安装Maven之前,要确保自己的电脑上有我们的Java环境(JDK),这个不再多说啦!
附上地址:Maven官方下载地址
先安装jdk,要求1.7版本以上
把maven软件解压缩,解压目录最好不要有中文
配置环境变量MAVEN_HOME,变量值就是maven的解压路径
配置环境变量PATH,将%MAVEN_HOME%\bin加入Path中,在Windows中一定要注意要用分号;与其他值隔开
验证是否配置成功:打开cmd窗口,输入mvn –v看是否有版本信息弹出如下
全局配置
在你所在的Maven解压文件中settings.xml就是你的全局配置,可以直接改全局配置,但是更好的是可以直接写一个自己的用户配置
用户配置(建议用这个)
当运行完cmd的mvn –v之后会产生一个默认的maven目录:~/.m2/repository。
其中~表示当前用户路径C:\Users\ [UserName] (桌上上的用户文档)
~/.m2/settings.xml
是用户的配置文件(默认没有该文件,需要将全局配置文件拷贝过来在进行修改)
注意:一般本地仓库的地址不使用默认配置,通常情况下需要在用户配置中,配置新的仓库地址。
配置步骤
在此我直接贴上我用的
settings.xml
文件,其中主要的部分就是要修改镜像mirror
地址修改镜像地址的原因可想而知,因为maven在下载资源的时候走的是外网有时候相对较慢,我们可以换成国内
阿里云
的服务资源进行下载。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>D:\java\repository\maven_repositorylocalRepository>
<mirrors>
<mirror>
<id>nexus-aliyunid>
<mirrorOf>*mirrorOf>
<name>Nexus aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>
mirrors>
<profiles>
<profile>
<id>jdk-1.8id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
properties>
profile>
profiles>
settings>
什么是Maven的
仓库
呢?在开头的时候我们有说过,利用Maven我们可以更加方便的引入
jar包
那么我们这些
jar包
不是凭空而来的,而是Maven通过镜像帮你下载到本地,然后统一管理、重复利用
因此我们就有了
仓库
这个概念,并且我们的仓库
还分为几种
如果你进的公司有安全限制,就不会让你直接从公共平台直接下载依赖
)三种仓库的关系图
三种层级关系是层层叠加的。
在
本地仓库
没有你想要的Jar包的情况,会前往当前所在的私有仓库
去下载Jar包到本地。当然如果你没有
私有仓库
,那么就会直接去中央仓库
下载相关的Jar包到本地。
在这里讲述一下在Maven的项目中比较重要的几个东西。
首先是我们的
pom.xml
文件,这个是整个Maven项目的核心,关系到我们相关Jar包的引入与Maven项目的配置其次如果你能成功运行一个Maven项目,你会发现在与
pom.xml
同级别目录下会产生一个target
文件夹,这里面放着的是经过编译后的源码文件以及一些打包的项目文件(war、jar)。
注意:Maven的工程目录结构是固定的,如果不一样,会导致项目无法正常使用
这也就是为什么说,使用Maven项目以后我们可以保证就算是不同的工程师之间也不会因为不同的项目结构而混乱。因为Maven统一了这个项目结构)
先需要对IDEA中的Maven进行一下配置
在红框圈起来的部分则表示选择你Maven解压的地址,这样IDEA才可以根据你本地的Maven来进行项目管理(如果你本地没有其实IDEA是也有自带的)
其次注意:
User settings file
这个属性表示的是加载配置文件的位置,也就是我们前面提到的settings.xml
文件如果你是按照我的建议,直接在用户目录下的
.m2\
文件夹下创建了对应的配置文件,那么就不需要更改。如果你不是这样操作,那么需要你自己手动指定你
settings.xml
文件的路径啦!
创建Maven项目
在创建项目的时候选择可以直接选择
Next
,我们并不需要项目的骨架模板
所以直接下一步即可
填写相关的项目信息
在
Next
之后会出现项目信息让你填写,进行简单填写后直接Next
即可。这样就可以得到一个Maven的JavaSE项目
新建JavaSE的Maven项目
我们会得到一个项目结构如下的Maven项目,会发现和我们之前介绍的Maven项目结构一样。
在Maven中
test
目录下如果没有resources
文件则会调用main
目录下的
细节
在一开始创建Maven项目的时候,有的版本的IDEA编译器会提示如下,一般情况下可以选择自动导入相关依赖。
其意思就是当你去改变
pom.xml
文件内容的时候,如果有新的依赖引入,那么IDEA会帮你自动更新。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QP9B8qhQ-1668131885723)(/Users/dengs/Desktop/NETBOX/Java-19:09/02_管理_Maven&log4j/maven文档/img/10.png)]
创建一个小案例试试
输出后得到:
Hello Maven!
其实无论是什么工具创建Maven工程的本质都是差不多的。
无非就是注意核心的
pom.xml
文件,以及工程目录结构
。在保持好这两个的情况下配置对应IDE工具与Maven相关的配置即可。其实整个Eclipse在市场上的使用率是有所下降的,博主在这里也推荐一份写的还不错Eclipse教程。
大家可以作为参照。
附上地址:传送门
上面我们阐述的是如何创建一个基本的JavaSE所支持的Maven工程。
但是实际我们开发过程中,还有可能遇到的就是
JavaWeb
工程,上面的工程结构并不支持。所以我们要在上述的结构中进行下一步的改造。
我简单的画了一下在Maven中的
JavaWeb
的项目目录结构大家可以看如下图
从图中我们可以看到,相比于原本的
JavaSE
结构,在src
目录下多出了webapp
这个文件,这也就是我们web项目的核心了。因此我们的改造就是要将原本的目录更改成如下样子
修改核心的pom.xml文件
首先,我们需要对maven的核心文件进行配置,说白了就是让Maven知道我们当前的这个项目是一个web项目。
在Java中,Web项目是以
war包
的方式存在的,而普通的JavaSE项目则是以jar包
的形式存在。因此我们需要将我们
pom.xml
文件中的项目打包形式进行变更
创建缺失的文件夹与文件
根据上述内容,我们需要将缺失的文件夹进行补充,并且补上
web.xml
文件以下我给出了
web.xml
文件的模板内容,大家可以复制去用。
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0" >
web-app>
得到的项目效果如下
刷新项目结构
当我们改动完成之后,需要让Maven知道我们已经改变当前的Maven项目了,需要刷新一下我们的项目。
可以点击右上角的刷新按钮
或者可以打开IDEA右侧栏的Maven插件,点击刷新按钮也可以!
配置Tomcat
以上工作准备就绪以后我们的
JavaWeb
工程就完成了。想要运行这个web项目我们还需要服务器的支持,因此需要来配置一下
Tomcat
先选择我们的项目配置
选择添加一个本地的Tomcat服务器,当然你本地需要先解压好Tomcat服务器。
填写好名字,配置好本地Tomcat所在的路径。即可
下一步是点击底部的
Fix
警告,来配置项目依赖。
配置好之后,可以看到如下界面。
通过
Application context
这个属性,可以配置你项目的访问路径
如上图所示,我们当前这个Web项目的访问路径就是
localhost:8080/maven_demo_war/
当然你如果不需要这个项目有开头路径那么你可以将
Application context
的值设置为/
即可
最后:启动我们的项目,尝试进行访问
在访问的之前,如果你没有首页,那么你可以在你的
webapp
目录下创建一个index.html
文件来充当首页。最终访问结果如下:
index.html文件代码
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<h1>这是一个首页h1>
body>
html>
什么是坐标?
在平面几何中坐标(x,y)可以标识平面中唯一的一点。在maven中坐标就是为了定位一个唯一确定的jar包。
Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范拥有了统一规范,就可以把查找工作交给机器
maven的坐标由以下三个部分组成
就是对项目中jar 包的管理。可以在pom文件中定义jar包的GAV(三大元素简称)坐标,管理依赖。
依赖声明主要包含如下元素:
如下所示
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
dependencies>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fux2SgNE-1668131885724)(/Users/dengs/Desktop/NETBOX/Java-19:09/02_管理_Maven&log4j/maven文档/img/11.png)]
其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
假设我们在项目中引用了某个jar包,而这个jar包又需要另外一个jar包才可以运行,这个时候maven就会将这个所需要的jar包也导入进来,这个就是依赖传递
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h49nwO0d-1668131885724)(/Users/dengs/Desktop/NETBOX/Java-19:09/02_管理_Maven&log4j/maven文档/img/12.png)]
如果B中使用A,C中使用B,则称B是C的直接依赖,而称A是C的间接依赖。
C->B B->A
C直接依赖B
C间接依赖A
总结,简单来说可能就在Maven中引入了两个相同的Jar包,但是版本不同,那么在这种情况下,我们的Maven就会自动选择以上两种之一的解决方式。
在遇到依赖冲突的这种情况,我们可以采用依赖排除的方式,来剔除自己不想要的Jar包。
排除掉不想要的Jar包就需要了解该Java包的
artifactId
与groupId
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
<exclusions>
<exclusion>
<artifactId>hamcrest-coreartifactId>
<groupId>org.hamcrestgroupId>
exclusion>
exclusions>
dependency>
排除依赖包中所包含的依赖关系,不需要添加版本号。
如果在本次依赖中有一些多余的jar包也被传递依赖过来,如果想把这些jar包排除的话可以配置exclusions进行排除
提示: 在idea中有maven helper插件可以更方便的管理和排除依赖,直接在idea的插件部分搜索即可
从上述的内容中我们可以知道,依赖非常多,每个Jar包都有不同的AGV元素,我们不能真的每个都记住吧?
所以我们在不知道的情况下其实是可以直接去中央仓库中进行模糊搜索的,只要你大概几的Jar包的名字就可以直接去搜索到相关的内容。
附上地址:
Maven官方中央仓库
一个Maven依赖搜索主页
好了,今天的Maven入门的文章就到这里告一段落了。
本文章主要是讲述了Maven的定义,以及作用。并且通过一步步的案例说明了Maven项目的构建过程。
希望大家在学习的过程中,自己动手搞起来,百看不如一练习。
希望本文章能对你有所帮助!