Maven知识整理

一、项目中遇到的的问题

1.都是同样的代码,为什么我的机器上可以执行,而其他机器就不行。
2.为什么我的机器上可以正常打包,而配置管理员却打包不成功。
3.项目组加入了新的人员,我要给他说明编译环境如何设置,但是有些细节我也记不清了。
4.我的项目依赖一些jar包,我应该把它放在那,放源码库里?
5.这是我开发的第二个项目,还是需要上面的那些Jar包,再把他们复制到我当前项目的svn库里,那接下来更多的项目呢?
6.我写了一个数据库相关的通用类,并且推荐给了其他项目组,现在已经有了五个项目组在使用了,今天发现了一个bug,修正bug,需要逐个通知各个小组区修改吗?

二、Maven介绍

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven除了以程序构建能力为特色以外。由于Maven的缺省构建规则有较高的可重用性,所以常常用两三行Maven构建脚本就可以构建简单的项目。由于Maven的面向项目的方法,许多Apache Jakarta项目发文时使用Maven。

Maven主要有两个功能

1.依赖管理--jar包管理
2.项目构建--代码编译

项目概念模型文字介绍:
jar包由仓库管理,当项目请求jar包时,可以在pom.xml文件中输入依赖,从仓库中下载jar包。
构建项目从开始到运行,依靠许多插件(Plug-in)来构建。
使用pom.xml添加依赖包,先从本地仓库查找,本地仓库没有,去远程仓库查找,远程仓库没有,则去中央仓库查找。随后逐步返回。这样,远程仓库、本地仓库就都会有依赖包,方便依赖包重复使用。方便下次直接查找本地仓库。

Maven-本地项目安装到本地仓库

1.可以使用命令行 mvn install
2.使用IDEA中的界面右侧Maven当前项目中的install功能;点击install后,IDEA将自动安装到本地仓库中。
将本地项目安装到本地仓库,方便调用。其他人如何调用,引用本地仓库中的项目,可以通过Pom添加依赖,将导入项目的<groupId>\<artifactId>\<version>三行添加到新项目的Pom中。便可以导入引用。

Maven的依赖性和传递性
依赖性和传递性就是对项目中的jar包的管理,可以在pom中定义jar包的GAV坐标,管理依赖。
1.依赖范围标签的取值
scope的属性值介绍:

1.compile:编译范围,默认scope,在工程环境的 classpath(编译环境)和打包(如果是WAR包,会包含在WAR包中)时候
都有效。

2.provided:容器或JDK已提供范围,表示该依赖包已经由目标容器(如tomcat)和JDK提供,只在编译的classpath中加载和使
用,打包的时候不会包含在目标包中 。最常见的是j2ee规范相关的servlet-api和jsp-api等jar包,一般由servlet容
器提供,无需在打包到war包中,如果不配置为provided,把这些包打包到工程war包中,在tomcat6以上版本会
出现冲突无法正常运行程序(版本不符的情况)。

3.runtime:一般是运行和测试环境使用,编译时候不用加入classpath,打包时候会打包到目标包中。一般是通过动态加载或
接口反射加载的情况比较多。也就是说程序只使用了接口,具体的时候可能有多个,运行时通过配置文件或jar包扫
描动态加载的情况。典型的包括:JDBC驱动等。

4.test:测试范围,一般是单元测试场景使用,在编译环境加入classpath,但打包时不会加入,如junit等。

5.system(一般不用,不同机器可能不兼容)
系统范围,与provided类似,只是标记为该scope的依赖包需要明确指定基于文件系统的jar包路径。因为需要通过
systemPath指定本地jar文件路径,所以该scope是不推荐的。如果是基于组织的,一般会建立本地镜像,会把本
地的或组织的基础组件加入本地镜像管理,避过使用该scope的情况。

依赖传递
包括直接依赖和间接依赖:
依赖冲突
如果直接依赖和间接依赖包含有同一坐标不同版本的资源依赖,以直接依赖的版本为准。
如果直接依赖中包含有同一坐标不同版本的资源依赖,以配置顺序下方的版本为准。
可选依赖
在依赖中添加optional选项决定此依赖是否向下传递,如果true则不传递,如果是false就传递,默认为false.
排除依赖
maven的依赖排除能自动将间接依赖引入项目中。这样极大的简化了项目中的依赖管理,但是有时候的关联包因为版本的原因,并不是我们想要的版本,所以我们需要用到排除依赖,通过直接依赖的配置里面添加exclusions -> exclusion 元素,指定要排除依赖的groupId和artifactId就行。

Maven生命周期

生命周期表示一个项目从无到有,从有到无的过程。
Maven生命周期就是为了对所有构建过程的抽象和统一。包括清理、初始化、编译、打包、测试、部署等几乎所有构建步骤。生命周期就可以理解为构建工程的步骤。

Maven插件

Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。每个插件都是一个实现的功能。Maven的生命周期和插件相互绑定,已完成某个具体的构建任务。
例如:添加Tomcat插件
1.创建Maven类型的web项目
2.pom.xml文件中添加插件信息

<plugins>
<plugin>
<!-- 配置插件 -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>

3.点击Add configuration,自定义Maven的Name,命令行。
运行方式 :
命令:tomcat:run 运行tomcat6 (默认)
命令:tomcat7:run 运行tomcat7(推荐,但是需要添加插件)

Maven私服

什么是Maven仓库
用来同一存储所有Maven共享构建的位置就是仓库,
仓库的分类有
本地仓库:~/.m2/repository
远程仓库:
1.中央仓库:Maven默认的远程仓库
2.私服:一种特殊的远程仓库,架设在局域网内的仓库

Maven的私服-Nexus的搭建
1.安装Nexus
为所有来自中央仓库的构建安装提供本地缓存
下载网站::https://help.sonatype.com/repomanager3/download/download-archives—repository-manager-3
注意:安装JDK1.8以上的版本
(1)解压Nexus压缩包
(2)打开windows命令行,切换到解压包bin目录下,运行nexus.exe/install nexus命令,注册服务
(3)启动nexus,在bin文件下运行nexus /run命令
(4)打开网站:http://localhost:8081
(5)使用默认用户名、密码登录(admin\admin123)

查看现有仓库
	proxy:表示远程获取
	group:以组的方式获取
	hosted:本机,第三方jar,如数据库驱动,需要手动添加
	maven-central:maven中央库,默认从https://repo1.maven.org/maven2/获取jar
	maven-releases:私库发行版jar
	maven-snapshots:私库快照(调试版本)jar
	maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使

2.配置所有构件均从私服下载

1.添加镜像配置:将所有访问外网的请求指向私服
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf> <!--匹配所有的远程仓库-->
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
	说明:url配置,描述的便是 上一步中提到的那个Public Reposiories的信息,这个地址便是他的地址,这些写都可
以再界面上看到 ,这里的是localhost是在本机搭建测试用的,如果是公司内部的仓库的话,可自行修改成公司内网ip
地址


2.添加中央仓库配置
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>https://repo1.maven.org/maven2/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
</profile>


3.生效配置
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>

(----------------------------------------------------------------------------------------------------------------)

注意:(此配置与之前的第2步的外网配置没有关系。各自配置就好)

3.配置Maven阿里云镜像仓库

因为外网仓库下载速度慢,所以用到国内的阿里云镜像仓库
修改setting文件

<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>``

`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值