博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
版本依赖管理之 Maven 修炼手册
阅读量:6658 次
发布时间:2019-06-25

本文共 12694 字,大约阅读时间需要 42 分钟。

0x01 为什么使用版本依赖工具Maven?

1.1 仓库简介

  • 没有Maven 时,项目用到的.jar 文件通常需要拷贝到lib目录下,项目多了,拷贝的文件副本就多了,占用磁盘空间,且难以管理。
  • Maven使用 一个称之为仓库的目录,根据构件的坐标统一存储这些构件的唯一副本,在项目中通过依赖声明,可以方便的引用构件。

比如javax.servlet-api-4.0.1.jar 实际存储如图所示:

image

对应的Maven配置就是:

javax.servlet
javax.servlet-api
4.0.1
provided

对应的本地Maven仓库地址文件路径就是:

C:\Users\fairy\.m2\repository\javax\servlet\servlet-api\2.4

1.2 Maven仓库分类

image

  • Maven 仓库分为本地仓库和远程仓库寻找构件时,首先从本地仓库找,找不到则到远程仓库找,再找不到就报错。
  • 在远程仓库中找到了,就下载到本地仓库再使用
  • 中央仓库是Maven核心自带的远程仓库

1.2.1 本地仓库

Maven本地默认仓库地址为:

${user.home}.m2/repository

更改本地仓库位置的方法:

1. 全局修改

修改Maven安装目录下的配置文件

%MAVEN_HOME%/conf/settings.xml

配置如下:

${user.home}/.m2/repository
2. 针对当前用户(推荐)

修改用户目录下的配置文件

${user.home}.m2/settings.xml

共享统用settings.xml配置如下:

${user.home}/.m2/repository

1.2.2 中央仓库

安装完Maven,本地仓库几乎是空的,这时候需要从远程仓库下载所需的构件。

即中央仓库。
仓库地址:

UK
UK Central
http://uk.maven.org/maven2
central

美国官方中央仓库地址:

http://repo.maven.apache.org/maven2

英国官方中央仓库地址:

http://uk.maven.org/maven2

阿里云中央仓库地址:

alimaven
aliyun maven
https://maven.aliyun.com/repository/public
false
true

1.3 Maven 坐标

Maven的所有构件都是通过坐标进行组织和管理。maven的坐标通过五个元素进行定义,其中groupId,artifactld,version 是必须的,package 是可选的(默认为jar)

classifier 是不能直接定义的。

  • group :定义当前Maven项目所属的实际项目,跟Java包名类似,通常与域名反向一一对应。
  • artifactId,定义当前Maven项目的一个模块,默认情况下,Maven 生成的构件其文件名会以artifactId 开头,如
    javax.servlet-api-4.0.1.jar
  • version: 定义项目版本
  • packaging:定义项目打包方式,如jar,war,zip... 默认为jar
  • scope:依赖范围,取值有compile,test,provided,默认为compile

1.4 Maven 依赖范围

执行不同的Maven命令(mvn package,mvn test,mvn install......),会使用不同的classpath,运行classpath。

scope选项的值,决定了该依赖构件会被引入到哪一个classpath中。

  • compile:编译依赖范围,默认值。此选项对编译、调试、运行的时候都需要该依赖。
  • test:测试依赖范围。只对测试有效,表明只在测试的时候需要,在编译和运行时将无法使用该依赖,如Junit。
  • provided:已提供依赖范围。编译和测试有效,运行无效。如servlet-api,在项目运行时,tomcat等容易已经提供,无须Maven重复引入

1.5 Maven 依赖传递

image

  • 如上图所示,hibernate-core 依赖hibernate-commons-annotations,而hibernate-commons-annotations又依赖slf4j-api,hibernate对slf4j-api的依赖就是传递依赖,我们只需要引入hibernate-core构件的依赖,不用考虑它还有其他的依赖,也不用担心会引入多余或冲突的依赖,maven 会自动为我们引入依赖和传递其依赖。

1.5 使用Maven好处

  • Maven可以对第三方依赖库进行统一的版本管理。
  • 使用maven可以统一项目的目录结构
  • maven 还支持多种插件
  • 使用maven 可以大大降低项目文件的大小。

0x02 Maven的下载安装配置

  1. 解压并配置环境变量:
M2_HOMEC:\Apps\maven\apache-maven-3.6.0

如下所示:

image
3.复制安装目录下的settings.xml到用户目录下
安装目录路径如下:

%MAVEN_HOME%/conf/settings.xml

比如我的就是:

C:\Apps\maven\apache-maven-3.6.0\conf\setings.xml

用户目录路径如下:

${user.home}.m2/repository

比如我们的就是:

C:\Users\fairy\.m2\settings.xml
  1. 配置settings.xml
${user.home}/.m2/repository
true
false
org.mortbay.jetty
org.sonatype.plugins
org.sonarsource.scanner.maven
myShareProfile
alimaven
aliyun maven
https://maven.aliyun.com/repository/public
false
true
Centeral
Central Maven2
http://central.maven.org/maven2
false
true
UK
UK Central
http://uk.maven.org/maven2
false
true
SpringPlugin
Spring Plugins
http://mvnrepository.com/repos/sonatype-releases
false
true
SpringLibs
Spring Libs
http://repo.spring.io/libs-milestone/
true
true
spring-snapshots
Spring Snapshots
https://repo.spring.io/libs-snapshot-local
true
spring-milestones
Spring Milestones
https://repo.spring.io/libs-milestone-local
false
spring-releases
Spring Releases
https://repo.spring.io/libs-release-local
false
Snoatype
Snoatype
http://mvnrepository.com/repos/sonatype-releases
false
true
Atlassian
Atlassian Repository
https://maven.atlassian.com/content/repositories/atlassian-public/
false
true
Hortonworks
Hortonworks Repository
http://repo.hortonworks.com/content/repositories/releases/
false
true
Jboss
JBoss Releases Repository
https://repository.jboss.org/nexus/content/repositories/releases/
false
true
Nexeo
Nuxeo Releases Repository
https://maven-eu.nuxeo.org/nexus/content/repositories/public-releases/
false
true
XWiki
XWiki Releases Repository
http://maven.xwiki.org/releases/
false
true
Apache
Apache Releases Repository
https://repository.apache.org/content/repositories/releases/
false
true
nexus-aliyun
http://maven.aliyun.com/nexus/content/groups/public
true
true
spring-snapshots
Spring Snapshots
https://repo.spring.io/libs-snapshot-local
true
spring-milestones
Spring Milestones
https://repo.spring.io/libs-milestone-local
false
myShareProfile

0x03 Eclipse中的Maven使用

STS 是Spring官方团队出品的,最友好支持Spring的Eclipse衍生版本。

STS 下载地址:

STS 已经继承了Maven插件,Maven并不执行任何具体的构件任务,所有这些任务都交给具体的插件来完成,例如:

  • 编译源代码是由maven-compile-plugin完成的。
  • 把Web 应用部署到tomcat 下是由tomcat-maven-plugin完成的,maven Tomcat 插件现在主要有两个版本,tomcat-maven-plugin和tomcat7-maven-plugin,使用方式基本相同。

STS 中配置Maven

配置安装目录

STS默认安装了一个版本的Maven,但是一般我们更换我们自己安装的。

image

配置用户设置

image

STS 中创建Maven Web项目

1.空白处右键 New-------> Other...

image
2.输入maven关键字,找到maven Project
image
3.进入New Maven Project界面
image
4.选择项目模板
Catalog下拉选择Internal,Filter 过滤器选择web,选中,然后Next
image
5.填写项目信息,然后点击Finish即可
image
6.修改JDK改变目录结构

完成后我们看到的目录结构会是这个样子的

image

因此我们需要修改下JDK,选中项目右键----Build Path----->Configure Build Path...

image

切换到library选项卡,选中图中所示的,点击Edit...

image

选择工作空间的JDK1.8

image

然后可以发现我们的项目结构已经发生改变了。

image

7.修改项目配置
切换到Navigator视图
image

然后可以看到

image

将原来的1.5 改成1.8

org.eclipse.jdt.core.prefs修改前

eclipse.preferences.version=1org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5org.eclipse.jdt.core.compiler.compliance=1.5org.eclipse.jdt.core.compiler.problem.forbiddenReference=warningorg.eclipse.jdt.core.compiler.processAnnotations=disabledorg.eclipse.jdt.core.compiler.release=disabledorg.eclipse.jdt.core.compiler.source=1.5

org.eclipse.jdt.core.prefs修改后

eclipse.preferences.version=1org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8org.eclipse.jdt.core.compiler.compliance=1.8org.eclipse.jdt.core.compiler.problem.forbiddenReference=warningorg.eclipse.jdt.core.compiler.processAnnotations=disabledorg.eclipse.jdt.core.compiler.release=disabledorg.eclipse.jdt.core.compiler.source=1.8

8.pom.xml 修改如下:

4.0.0
com.xingyun
helloworld_web_maven_sample
war
0.0.1-SNAPSHOT
helloworld_web_maven_sample Maven Webapp
http://maven.apache.org
3.1.0
javax.servlet
javax.servlet-api
${servlet.version}
jar
provided
helloapp
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
http://localhost:8080/manager/text
tomcat
admin
admin
/${project.build.finalName}
maven-compiler-plugin
3.0
1.8
1.8
UTF-8

9.选中项目执行安装依赖

mvn install

当看到Build Success 说明成功

9.运行项目,命令执行后我们的项目就运行到tomcat7中了
选中项目右键-----Run As------>maven build...

tomcat7:run

image

10.然后打开浏览器访问网站即可

image

附录一

感谢你耐心阅读本篇,最后送上一个神器命令,这个命令可帮助我们解决Maven依赖冲突.

使用场景,
比如A-1.2.jar 包依赖于 B-0.1.jar ,
然而项目中已经引入了一个较高版本B-1.1.jar,
我们想要的结果是只有A-1.2.jar 和B-1.1.jar
首先通过这个Maven照妖镜命令查找Maven依赖树

mvn dependency:tree

当执行成功后可以看到这个

image
其中,org.apache.ws.xmlschema 是 group id,
xmlschema-core: 是artifactId
jar: 指的压缩类型
2.2.1 指的是版本号

xml-resolver
xml-resolver
1.2
org.apache.ws.xmlschema
xmlschema-core

exclusions的意思是移除自身传递的依赖jar包

附录二

再学一招,除了刚才的方法外,我们还可以指定全局统一版本的方法

这个配置的作用不会下载依赖,仅仅用来统一版本号

antlr
antlr
2.7.7

附录三

配置项目本地私有包

com.xingyun
test
1.0
system
${project.basedir}/src/main/resources/lib/test-1.0.jar

注:

${project.basedir}是Maven内置属性,

内置属性(Maven预定义,用户可以直接使用)

  • ${basedir} 表示项目根目录,即包含pom.xml文件的目录;
  • ${version} 表示项目版本;
  • ${project.basedir} 同${basedir};
  • ${project.baseUri} 表示项目文件地址;
  • ${maven.build.timestamp} 表示项目构件开始时间;
  • ${maven.build.timestamp.format} 表示属性${maven.build.timestamp}的展示格式,默认值为yyyyMMdd-HHmm,可自定义其格式,其类型可参考java.text.SimpleDateFormat。用法如下:
yyyy-MM-dd HH:mm:ss

附录四

Maven 生命周期

validate,initialize,generate-sources,process-sources,generate-resources,process-resources,compile,process-classes,generate-test-sources,process-test-sources,generate-test-resources,process-test-resources,test-compile,process-test-classes,test,prepare-package,package,pre-integration-test,integration-test,post-integration-test,verify,install,deploy,pre-clean,clean,post-clean,pre-site,site,post-site,site-deploy.

本篇完~

转载地址:http://ooxto.baihongyu.com/

你可能感兴趣的文章
X86服务器虚拟化的资源划分和性能优化
查看>>
2015年11月 广州深圳 MVP 线下活动
查看>>
⑨①-成功者的路永远都是相通的
查看>>
一次DPM备份Exchange DAG的故障处理过程
查看>>
Docker视频发布
查看>>
利用Powershell查询AD中账号属性
查看>>
office2003/2007/2010版本降低宏安全设置方法
查看>>
高性能的MySQL(7)字符集和校对
查看>>
[Node] 重要外部模块
查看>>
设计先行,编码在后
查看>>
项目视频光盘项目中所学概览-html5+批处理+bat转exe
查看>>
javascript pattern
查看>>
将行政区域导入SQL SERVER
查看>>
好书记录
查看>>
Linux系统下查看目录大小
查看>>
对称加密DES和TripleDES
查看>>
Activity的启动模式总结
查看>>
Android 获取屏幕尺寸与密度
查看>>
Windows 8 应用开发 - 本地数据存储
查看>>
Android中dip、dp、sp、pt和px的区别
查看>>