Maven安装与环境变量配置教程
这篇文章主要讲解了“Maven安装与环境变量配置教程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Maven安装与环境变量配置教程”吧!
目录
一、Maven简介
什么是Maven
Maven的作用
坐标的概念
小结
二、Maven安装配置【操作】
Maven的仓库类型
下载与目录结构
Maven安装配置
1 安装Maven
2 配置Maven仓库
小结
三、Maven项目的目录结构
小结
四、Maven构建项目
项目构建的生命周期
小结
五、Maven管理依赖和插件
Maven的依赖管理
在idea配置Maven(操作)
在idea创建Maven项目
1 创建Maven的java项目
2 创建Maven的web项目
选择项目的骨架
设置项目的坐标
引入依赖
依赖范围
小结
jdk编译版本插件
tomcat7插件
Maven的插件
六、Maven的私服
搭建私服
讲解
什么是Maven的私服
搭建Maven私服
下载nexus
安装nexus
启动nexus
登录nexus
nexus的仓库类型介绍
小结
使用私服
把项目发布到私服
从私服下载jar包
小结
上传jar到本地仓库和私服
目标
把第三方jar打包到本地仓库
把第三方jar打包发布到私服
参数说明
七、Lombok
Lombok介绍与配置
什么是Lombok
Lombok的作用
Lombok的配置
Lombok的常用注解
附:添加依赖出错怎么办
现象:
原因:
解决:
总结
一、Maven简介
1. 什么是Maven
Maven:是Apache提供的免费开源的项目管理工具。它提供了一个项目对象模型(pom.xml)、一个依赖管理系统(根据坐标,帮我们引入依赖)、一套项目生命周期(帮我们方便的进行项目构建)、一组标准集合(Maven工程的目录结构规范,坐标规范)、和一个插件管理系统(提供了进行项目构建的命令)。
2. Maven的作用
项目构建:一个项目开发之后,经历的编译、测试、打包、安装、部署等等一系列的过程,叫项目构建
主要是测试、运维/实施人员使用的
依赖管理:Maven可以帮我们管理jar包,可以轻松的解决依赖的冲突问题
依赖:通常指jar包,不仅仅是jar包
模块化创建项目
3. 坐标的概念
坐标:被Maven管理的每个项目,都必须有自己的唯一标识,这个唯一标识叫坐标坐
标的组成:由三部分组成
groupId:公司名、组织名 域名倒写。比如:
c3p0
,com.jd
artifactId:项目名、包名。比如:
c3p0
version:版本号。比如:
0.9.1.2
,1.0-SNAPSHOT
,5.2.0-RELEASE
小结
什么是Maven:是Apache提供的一个开源免费的项目管理工具
Maven的作用:
项目构建:编译、测试、打包、安装、部署等等一系列的过程,叫项目构建
依赖管理:帮我们管理jar包依赖
模块化创建项目
坐标的概念:
groupId:企业名/组织名 域名倒写
artifactId:包名/项目名
version:版本号
被Maven管理的每个项目/jar包,其唯一标识叫坐标
由三部分组成:
二、Maven安装配置【操作】
1. Maven的仓库类型
本地仓库:本地缓存jar包的文件夹
本地仓库默认在:C:\Users\电脑的用户名\.m2\repository
通常会修改配置文件,修改本地仓库的路径
远程仓库(私服):一些企业、组织、社区搭建的仓库服务
通常企业里人自己搭建私服。私服里的jar包大多数还是来自于中央仓库
有些是企业内部自己搭建、自己使用的
有些是企业搭建面向整个互联网的,比如:阿里私服
中央仓库
是Maven官方团队维护的仓库,里边有最全的jar包。
但是没有授权的jar包,中央仓库里没有,比如:Oracle驱动包
地址:https://repo1.maven.org/maven2
2. 下载与目录结构
下载地址:http://maven.apache.org
Maven的目录结构:
maven |--bin Maven的可执行命令文件夹 |--boot Maven的引导程序(类加载器) |--conf 配置文件夹 |--lib Maven的核心程序代码
3. Maven安装配置
3.1 安装Maven
Maven是免安装的,直接解压
注意:解压路径里,不要有中文、空格、特殊字符
注意检查JDK环境变量是否正确
Maven软件是Java语言编写的
配置Maven环境变量:
增加MAVEN_HOME=Maven的解压目录
修改Path中添加 %MAVEN_HOME%\bin
验证Maven配置
打开cmd,输入命令:mvn -version
3.2 配置Maven仓库
配置步骤:
新建一个目录,例如 :repository,目录里不能有中文、空格、特殊字符
比如我的路径为:D:\develop_software\maven\repository
修改Maven的conf\settings.xml配置文件
扩展:
修改settings.xml里,设置Maven编译的版本jdk1.8。在<profiles>里边增加:
<profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>
小结
仓库类型
本地仓库:自己电脑上缓存jar包的文件夹
远程仓库(私服):一些企业、社区、组织自己搭建的仓库服务
中央仓库:Maven官方团队维护仓库服务
maven的安装:
解压。注意:解压的目录里不要有中文、空格、特殊字符
配置环境变量:
新增MAVEN_HOME, 值就是maven软件的解压目录
修改Path,值里新增%MAVEN_HOME%\bin
配置本地仓库:
创建repository目录里不要有中文、空格 、特殊字符
修改Maven的conf\settings.xml,增加本地仓库的配置:<localRepository>标签
三、Maven项目的目录结构
一个项目要想使用Maven进行管理,那么这个项目的目录结构就必须要符合Maven的要求:
maven项目|--pom.xml 项目对象模型文件,一个Maven项目必定有pom.xml文件|--class="lazy" data-src|--main 项目的主体程序代码目录||--java 项目的Java程序代码放在这文件夹里||--resources 项目的配置文件放在这里||--webapp 项目的web资源放在这里,html,css,js,jsp,音频,图片,视频等等||--WEB-INF ||--其它web资源|--test 项目的单元测试代码目录|--java 项目的单元测试代码|--resources 项目单元测试需要的配置文件
小结
class="lazy" data-src\main\java
:放主体程序代码的java文件
class="lazy" data-src\main\resources
:放主体程序代码的配置文件
class="lazy" data-src\main\webapp
:放主体程序代码的web资源:html、css、js、jsp等等
四、Maven构建项目
1. 项目构建的生命周期
Maven命令执行的规律:
clean:cleancompile:compiletest:compile=>testpackage:compile=>test=>packageinstall:compile=>test=>package=>install人的生命周期:婴儿=>儿童=>少年=>青年=>中年=>老年
Maven有三套生命周期
清理生命周期:CleanLifeCycle
有常用命令:
clean
默认生命周期(构建生命周期):DefaultLifeCycle
有常用命令:
compile->test->package->install->deploy
站点生命周期:SiteLifeCycle
有常用命令:
site
。生成Maven项目的描述信息文档
如果执行了一个目标命令:Maven会把生命周期里的命令,从第一个一直执行到目标命令为止
小结
常用命令:
mvn clean
:清理。删除掉target目录mvn compile
:编译。把主体程序代码进行编译,放到target目录里mvn test
:测试。编译并执行单元测试代码mvn package
:打包。Java项目打成jar包,web项目打包war包mvn install
:安装。把程序包安装到本地仓库,安装位置是坐标对应的文件夹
Maven的生命周期
清理生命周期CleanLifeCycle:
clean
默认生命周期/构建生命周期DefaultLifeCycle:
compile=>test=>package=>install=>deploy
站点生命周期SiteLifeCycle:
site
生命周期的作用:只要执行一个目标命令,Maven会从生命周期里第一个阶段开始,执行到目标命令为止
五、Maven管理依赖和插件
Maven的依赖管理
把Maven配置到idea中
在idea里创建Maven的java项目
在idea里创建Maven的web项目
Maven项目中,引入依赖的方法
Maven的依赖范围配置,解决jar包冲突
1. 在idea配置Maven(操作)
配置Maven
增加运行的配置项:-
DarchetypeCatalog=internal
2. 在idea创建Maven项目
2.1 创建Maven的java项目
创建Module,选择Maven类型,选择骨架org.apache.maven.archetypes:maven-archetype-quickstart
设置项目的坐标
再继续步骤,跟以前的一样:设置module的名称和位置
注意:不要和已有的其它module重名或者重位置
创建后,如果弹窗Maven projects need to be imported
,就选择 启动自动导入。
作用是:如果pom.xml文件有变更,Maven会自动读取,立即生效;否则就要手动导入
如果文件夹缺失,就创建补全,然后刷新
2.2 创建Maven的web项目
1.选择项目的骨架
2.设置项目的坐标
如果上边Add as module to
和Parent
是有配置的,那么要在右边全部选择none
3. 引入依赖
如果项目中需要使用jar包,只需要把jar包的坐标配置到项目的pom.xml中即可。在pom.xml的<dependencies>
标签里增加以下内容:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>依赖范围</scope></dependency>
可以在pom.xml里,输入
dep
,会自动补充坐标模板,我们填充坐标值即可可以使用
alt+insert
,会弹出依赖导入的界面,可以从本地仓库里搜索依赖如果不知道依赖的坐标,可以从中央仓库搜索坐标:https://mvnrepository.com/
4. 依赖范围
如果项目中引入的jar包过多,可能会出现jar包冲突,我们可能设置jar包不同的依赖范围来处理jar包冲突。
Maven的依赖范围有:
compile
:默认的依赖范围,全范围有效。test
:单元测试有效。class="lazy" data-src/test里有效,class="lazy" data-src/main里无效provided
:编译时有效,运行时使用其它地方提供的jar包。runtime
:运行时有效,编译时无效。比如:数据库驱动包system
:引入仓库之外的本地jar包。少用
实际开发中特殊的jar包
Junit
:依赖范围通常设置为test
servlet-api, jsp-api
:依赖范围通常设置为provided
数据库驱动包
:依赖范围可以是默认的,也可以是runtime
其它包,绝大多数都是默认依赖范围c
ompile
小结
依赖范围:
compile:默认的。编译时有效,运行时有效,单元测试有效
test:单元测试有效(class="lazy" data-src\main\test)里有效
单元测试Junit的包
provided:编译时有效,运行时无效(备胎包)
servlet-api,jsp-api
runtime:编译时无效,运行时有效
数据库驱动包
system:引用仓库之外的本地jar包,少用
Maven的插件
maven插件可以完成一些特定的功能。例如,集成jdk插件可以方便的修改项目的编译环境;集成tomcat插件后,无需安装tomcat服务器就可以运行tomcat进行项目的发布与测试。
在pom.xml的
plugins
标签中,通过plugin
标签引入maven的功能插件。
jdk编译版本插件
把
<plugins>
标签,放在pom.xml的<build>
标签内部
<!--jdk编译插件--><plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin></plugins>
tomcat7插件
把
<plugins>
标签,放在pom.xml的<build>
标签内部
<plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <!-- 指定端口 --> <port>82</port> <!-- 项目路径 --> <path>/</path> </configuration> </plugin></plugins>
六、Maven的私服
搭建私服
了解私服的概念
搭建私服
讲解
什么是Maven的私服
公司在自己的局域网内搭建自己的远程仓库服务器,称为私服
私服服务器即是公司内部的 maven 远程仓库, 每个员工的电脑上安装 maven 软件并且连接私服服务器,员工将自己开发的项目打成 jar 并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。
私服还充当一个代理服务器,当私服上没有 jar 包会从互联网中央仓库自动下载,如下图 :
搭建Maven私服
1. 下载nexus
Nexus 是 Maven 仓库管理器, 通过 nexus 可以搭建 maven 仓库,同时 nexus 还提供强大的仓库管理功能,构件搜索功能等。
下载地址: http://www.sonatype.org/nexus/archived/ ,下载: nexus-2.12.0-01-bundle.zip
2. 安装nexus
解压nexus-2.12.0-01-bundle.zip。注意:解压路径里不要有中文、空格、特殊字符
以管理员方式打开cmd,切换进入解压目录的bin文件夹里,运行命令:nexus.bat install
把nexus安装成为Windows的服务
3. 启动nexus
启动nexus服务:以管理员方式打开cmd,输入命令:net start nexus(第一次启动比较慢)
如果把nexus服务设置为开机自启动,以后就不需要再手动启动nexus服务了
但是通常是nexus服务器上设置。我们自己电脑上,没有必要设置开机自启动
关闭nexus服务:以管理员方式打开cmd,输入命令:net stop nexus
4. 登录nexus
打开浏览器,输入地址:http://localhost:8081/nexus
可以打开nexus的
conf/nexus.properties
文件,修改端口号,重启nexus服务后生效
登录“Log in”,输入帐号和密码进行登录(帐号admin,密码admin123)
nexus的仓库类型介绍
hosted
:宿主仓库, 部署自己的 jar 到这个类型的仓库,包括 releases 和 snapshot 两部分, Releases 公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库proxy
:代理仓库, 用于代理远程的公共仓库,如 maven 中央仓库,用户连接私服,私服自动去中央仓库下载 jar 包或者插件。group
:仓库组,用来合并多个 hosted/proxy 仓库,通常我们配置自己的 maven 连接仓库组。virtual
:虚拟仓库,兼容 Maven1 版本的 jar 或者插件
小结
hosted:宿主仓库。nexus私服本身的仓库
proxy:代理仓库。私服所代理的仓库
group:仓库组。针对于使用者,只要配置一个仓库组的地址,就可以引用组里定义的所有子库
virtual:虚拟仓库
使用私服
把项目发布到私服
从私服下载jar包
把项目发布到私服
使用场景
企业中多个团队协作开发通常会将一些公用的组件、开发模块等发布到私服供其它团队或模块开发人员使用。
本例子假设多团队分别开发。某个团队开发完在common_utils, 将 common_utils发布到私服供其它团队使用
配置
在用户自己的Maven软件里修改conf/settings.xml
:
在
servers
标签里,配置私服的帐号和密码
<server> <id>releases</id> <username>admin</username> <password>admin123</password></server><server> <id>snapshots</id> <username>admin</username> <password>admin123</password></server>
在用户需要发布的私服的项目pom.xml里,配置私服仓库的地址。
本公司的自己的 jar 包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库
如果版本为 release 则上传到私服的 release 仓库,如果版本为snapshot 则上传到私服的 snapshot 仓库
把以下内容写到项目的pom.xml的根标签里
<distributionManagement> <repository> <!-- 注意:id的值,是刚刚在settings.xml中配置的server的id --> <id>releases</id> <url>http://localhost:8081/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <!-- 注意:id的值,是刚刚在settings.xml中配置的server的id --> <id>snapshots</id> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository></distributionManagement>
测试
启动nexus服务(如果已启动,就不需要做这一步)
在项目里执行Maven的deploy命令:
根据本项目pom.xml中version定义决定发布到哪个仓库
如果version定义为xx-snapshot,项目将发布到 nexus 的 snapshot仓库
如果version定义为xx-release,项目将发布到 nexus的 release 仓库
从私服下载jar包
使用场景
没有配置 nexus的时候,如果本地仓库没有,就会去中央仓库下载,下载速度不稳定
通常在企业中会在局域网内部署一台私服服务器。这样:
本地项目首先去本地仓库找 jar;
如果没有找到则连接私服从私服下载 jar 包;
如果私服没有 jar 包,私服同时作为代理服务器从中央仓库下载 jar 包
好处是:
由私服对公司项目的依赖 jar 包统一管理
可以提高下载速度, 项目连接私服下载 jar 包的速度,要比项目连接中央仓库的速度快的多。
配置
在settings.xml
的profiles
标签下配置:
注:由于settings.xml
中没有repositories
标签,所以要使用profile
标签来配置仓库
<profile> <!--profile 的 id--> <id>dev</id> <repositories> <repository> <!--仓库 id, repositories 可以配置多个仓库,保证 id 不重复--> <id>nexus</id> <!--仓库地址,即 nexus 仓库组的地址--> <url>http://localhost:8081/nexus/content/groups/public/</url> <!--是否下载 releases 构件--> <releases> <enabled>true</enabled> </releases> <!--是否下载 snapshots 构件--> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <!-- 插件仓库, maven 的运行依赖插件,也需要从私服下载插件 --> <pluginRepository> <!-- 插件仓库的 id 不允许重复,如果重复后边配置会覆盖前边 --> <id>public</id> <name>Public Repositories</name> <url>http://localhost:8081/nexus/content/groups/public/</url> </pluginRepository> </pluginRepositories></profile>
激活profile
定义的仓库
激活后,配置的仓库才会生效
<activeProfiles><activeProfile>dev</activeProfile></activeProfiles>
测试 创建Maven应用testdownload
,配置依赖
<dependency> <groupId>com.baidu</groupId> <artifactId>commons-utils</artifactId> <version>1.0-SNAPSHOT</version></dependency>
编译项目,查看日志会出现:
查看本地仓库里,会有从私服下载的jar包
小结
把项目发布到私服:
在Maven的settings.xml里,配置仓库的帐号和密码
在Maven项目的pom.xml里,配置仓库的地址
执行Maven命令:mvn deploy
从私服里下载jar:
在settings.xml里配置仓库地址
在settings.xml里激活仓库的配置
在Maven项目里,配置依赖
如果这个依赖,在本地仓库里没有,Maven就会从私服里下载到本地仓库,再引入到Maven项目里
上传jar到本地仓库和私服
目标
把第三方jar打包到本地仓库
把jar打包发布到私服
把第三方jar打包到本地仓库
如果有一个jar不在本地仓库、不在私服、不在中央仓库。我们可以把jar安装到本地仓库中,方便后续使用
cmd
命令示例:
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile=fastjson-1.1.37.jar -Dpackaging=jar
查看本地仓库,验证是否安装成功
把第三方jar打包发布到私服
在
settings.xml
中配置私服的server信息
<server> <id>thirdparty</id> <username>admin</username> <password>admin123</password></server>
执行命令
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
查看私服的第三方仓库,验证是否发布成功
参数说明
DgroupId
和DartifactId
构成了 jar 包的坐标,项目就是依靠这两个属性定位。可以自己起名Dfile
表示需要上传的 jar 包的位置。Durl
私服上仓库的位置,打开 nexus——>repositories 菜单,可以看到该路径。DrepositoryId
服务器的表示 id,在 nexus 的 configuration 可以看到。Dversion
表示版本信息。
上传成功后,在 nexus 界面点击 3rd party 仓库可以看到这包。
七、Lombok
1. Lombok介绍与配置
什么是Lombok
Lombok的作用
Lombok的配置
什么是Lombok
Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。
官网: https://www.projectlombok.org/
Lombok的作用
通过添加注解的方式,帮我们生成一些方法,提高开发人员的开发效率。
例如:
开发中经常需要写的javabean,要添加相应的getter/setter,也许还要去写构造器、equals等方法
当属性多时,会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量
使用Lombok,可以帮我们生成这些方法,我们就不用自己编写了
Lombok的配置
添加maven依赖
<dependency><groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId><version>1.18.8</version><scope>provided</scope></dependency>
安装插件
注意:Lombok插件暂不支持idea2020
使用Lombok还需要插件的配合。
打开idea的设置,点击Plugins,点击Browse repositories,在弹出的窗口中搜索lombok,然后安装即可
解决编译时出错问题
编译时出错,可能是没有enable注解处理器。Annotation Processors > Enable annotation processing。设置完成之后程序正常运行。
2. Lombok的常用注解
目标
@Data
@Getter/@Setter
@ToString
@NoArgsConstructor, @AllArgsConstructor
@Data
@Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
@Datapublic class User implements Serializable{ private Integer id; private String username; private String password; private String address; private String nickname; private String gender; private String email; private String status;}
@Getter/@Setter
如果觉得@Data不够精细,可以使用@Getter/@Setter注解
此注解用在属性上,可以为相应的属性自动生成Getter/Setter方法.
public class User implements Serializable{ @Setter @Getter private Integer id; private String username; private String password; private String address; private String nickname; private String gender; private String email; private String status;}
@ToString
类上使用@ToString注解,Lombok会生成一个
toString()
方法生成的
toString
方法会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。通过
exclude
属性指定忽略字段不输出,
@ToString(exclude = {"id"}) public class User implements Serializable{ private Integer id; private String username; private String password; private String address; private String nickname; private String gender; private String email; private String status;}
@xxxConstructor
@NoArgsConstructor: 无参构造器
@NoArgsConstructorpublic class User implements Serializable{ private Integer id; private String username; private String password; private String address; private String nickname; private String gender; private String email; private String status;}
@AllArgsConstructor
: 全参构造器
@AllArgsConstructorpublic class User implements Serializable{ private Integer id; private String username; private String password; private String address; private String nickname; private String gender; private String email; private String status;}
附:添加依赖出错怎么办
现象:
在pom.xml里添加依赖坐标后,报红,引入依赖失败
原因:
可能有多方面因素导致,最常见的原因是:
网络不稳定,导致从中央仓库中下载依赖时失败
本地仓库中有大量的
*.lastUpdated
文件,是下载依赖出错后遗留的不完整数据
解决:
第一步:配置阿里云的仓库镜像
打开Maven软件里conf/settings.xml
在<mirrors>
标签中添加如下内容:
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf></mirror>
第二步:删除本地仓库里的缓存文件
以
.lastUpdated
结尾的文件,是下载依赖失败后遗留的文件,需要清除掉
在本地仓库文件夹里搜索*.lastUpdated
把搜索到的所有文件全部删除
第三步:重新添加依赖
在
pom.xml
中,删除原有的所有依赖重新添加依赖进去。
Maven会自动重新导入依赖,如果本地仓库中没有,就会自动从阿里云仓库镜像下载依赖
感谢各位的阅读,以上就是“Maven安装与环境变量配置教程”的内容了,经过本文的学习后,相信大家对Maven安装与环境变量配置教程这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341