下载后maven的配置文件
maven本地仓库,有个默认的位置,就是用户目录下的.m2/repository,最好更改本地仓库的位置,因为以后项目多了可能会导致C盘的maven文件过多占用过大空间
1 | 将setting.xml文件中的这个配置更改为自己的配置 |
中央仓库的配置(一般不需要配置)
1 | <repositories> |
私服仓库的配置(一般也不需要配置)
1 | 参照上面的中央仓库 |
镜像的配置
1 | <mirror> |
JDK的配置
1 | <!--設定jdk為1.8--> |
pom文件(project object model)
pom.xml文件为Maven项目的核心配置文件,Maven的各项插件以及依赖均可以在这里配置javascript
pom文件能够继承,超级pom文件等等,好比pom文件定义了一些东西,另外一个pom也想定义 就能够继承
配置项目中须要哪些jar包,就是在Pom中dependency配置
maven项目中要想下载指定jar包,查找所需jar包的官网:https://mvnrepository.com/
以mybatis为例:
java
1 | <dependency> |
配置以后 编译完会在本地仓库里下载jar包
不只把指定jar包下载 并且还会把它所依赖的包下载
已经下载过的jar包,不会从新下载(maven仓库是同一个仓库,若是换了仓库,也是会从新下载的),若是Jar包版本不同 maven认为是不一样的jar包web
标签和插件
project标签
新建spring-boot项目后自动生成,从头至尾,中间包含所有的标签
1 |
|
modelVersion标签
modelVersion 描述这个POM文件是遵从哪个版本的项目描述符
modelVersion:指定了当前POM模型的版本,对于Maven2及Maven 3来说,它只能是4.0.0;
1 | <modelVersion>4.0.0</modelVersion> |
parent标签
springboot-starter-parent主要作用是用来控制引入依赖包的版本控制的,继续点击artifactId进去会看到真正依赖的版本
spring-boot-starter-parent是一个特殊的starter,它用来提供相关的Maven默认依赖。使用它之后,常用的包依赖可以省去version标签
1 | <parent> |
项目说明标签
1 | 三个必填标签 |
1 | <groupId>com.yxtl.server</groupId> |
scope依赖范围
scope:该标签指定依赖的作用域。
1 | <dependency> |
properties标签
用来定义pom一些属性
比如spring的jar包,各个模块的jar包须要同一个版本,这样就能够把这个版本号维护到properties标签里spring
1 | <properties> |
package标签
指定如何构建项目的类型(war jar pom…),默认是jar
jar包就是java的类进行编译生成的class文件就行打包的压缩包。里面就是一些class文件
war包就是一个web程序进行打包便于部署的压缩包,里面包含我们web程序需要的一些东西,其中包括web.xml的配置文件,前端的页面文件,以及依赖的jar
文件数量对于jar包,这样便于我们部署工程,直接放到tomcat的webapps目录下,直接启动tomcat即可。同时可以使用WinRAR查看war包,直接将后缀.war改成.rar
1 | <packaging>jar</packaging> |
distributionManagement标签
mvn install 会将项目生成的构件安装到本地Maven仓库
mvn deploy 用来将项目生成的构件分发到远程Maven仓库
本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。
Maven区别对待release版本的构件和snapshot版本的构件,snapshot为开发过程中的版本,实时,但不稳定,release版本则比较稳定
我们需要配置POM的distributionManagement来指定Maven分发构件的位置
1 | <distributionManagement> |
scm标签
SCM:Software Configuration Management。可以支持我们常用SVN、CVS等
1 | <scm> |
dependencies标签
包含不少dependency标签
1 | <dependencies> |
repositories标签
1 | <repositories> |
bulid构建行为列表
bulid标签配置maven构建项目时的需要执行的各种行为,一般都是maven的插件
1 | <build> |
resources
指定当前构建的source目录
1 | <resources> |
1 | <testResources> |
plugins
指定进行构建时使用的插件
1 | <plugins> |
maven插件
maven 其实是一个依赖插件执行的框架,每一个任务都是插件执行的mybatis
两种插件类型:
Build plugins 在构建中执行,在pom里配置
reporting plugins 在网站生成中执行的,也须要在pom中配置 框架
经常使用插件列表:
clean 项目构建以后 用于清理项目
compiler 编译java源代码的
jar 构建jar文件
war 构建war文件
tomcat…
各个插件官网文档都有做用的说明maven
modules完成项目聚合
把多个模块聚合到一块。
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
1 | demo-parent为父工程,聚合如下四个子工程: |
package打包注意
demo-admin
依赖 demo-core
,如果在 demo-core
未打包的情况下,单独打包子工程 demo-admin
,此时会报错,说找不到 demo-core
,因为打包的时候通过pom去maven仓库寻找 demo-core
,因 demo-core
不存在所以报错。
如果给 demo-core
执行package命令后,去给 demo-admin
打包还会报同样的错,因为package命令仅仅是在 demo-core
的target目录下生成jar包,并未放入到maven仓库中,所以还是找不到。
所以最终解决方案是执行完package命令后,再执行install命令,此时会把jar安装到maven仓库中。
properties和parent完成依赖继承
把各个模块公用的依赖抽取成父类,供子模块继承使用。
- 父pom
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
- 子pom
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
依赖冲突时
- 依赖路径最短优先
- pom中谁写在前面谁优先
1 | A-->B |
介绍:项目依赖了两个版本的common.jar,在打包时会采用依赖路径最短的common.3.0.jar。
exclusions依赖传递排除
1 | <dependency> |
maven仓库分类
在maven中,仓库可以分为:
本地仓库、远程仓库。
- 远程仓库可以分为:中央仓库、私服仓库。
中央仓库是maven官方指定的仓库,可以理解为“寻找的最后一站”。 - 私服仓库可以是自己建的,也可以是其它主体建的(比如aliyun的maven仓库,jboss的maven仓库等)。
私服可以分为:全局应用的私服仓库、应用到项目自身的私服仓库。
maven寻找得顺序大致可以理解为:
1 | 本地仓库-->私服 |
- 在本地仓库中寻找,如果没有则进入下一步。
- 在全局应用的私服仓库中寻找,如果没有则进入下一步。
- 在项目自身的私服仓库中寻找,如果没有则进入下一步。
- 在中央仓库中寻找,如果没有则终止寻找。
maven常用命令
- package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
- install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,==但没有布署到远程maven私服仓库==
- deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到==本地maven仓库和远程maven私服仓库==
后一个命令会覆盖前一个命令的操作
1 | //分别是打包、安装、发布跳过测试命令 |
Nexus搭建私服
使用Maven进行项目的声明周期管理,方便对项目依赖和插件进行管理,同时便于项目的统一管理,提升项目开发效率。但是实际工作中会有以下问题:
1 因为安全考虑,有些公司不给开发人员提供外网。因此不能使用maven访问远程的仓库地址。
2 大家同时上网,导致网速比较慢,maven下载构件效率比较低。
3 由于版权的问题,有些第三方jar包无法从远程仓库下载。
4 有些jar包是公司内部使用的,自然也无法从远程maven仓库下载。
所以可以使用Nexus搭建私服:https://oss.sonatype.org/#welcome
所谓私服,是一种特殊的远程服务器,代理广域网上的远程仓库,供局域网内Maven用户使用。需要下载maven构件时候, 先从私服请求,不存在则从外部远程仓库下载,缓存到私服后供下载。对于 一些无法从外部下载的构件,就可以上传到私服供下载使用。
Nexus是常用的私用Maven服务器,一般是公司内部使用。下载地址是http://www.sonatype.org/nexus/go,默认端口8081,这里我选择最新版nexus-2.5.0-04。
一 下载安装
地址 http://www.sonatype.com/download-oss-sonatype
环境 win32 选择版本:nexus-2.13.0-01-bundle.tar.zip
解压安装
访问http://localhost:8081/nexus/ 启动后如下页面,在右上角有个Log in 的超链接,点击登录
默认的用户名是 admin 密码是 admin123
Public Repositories: 仓库组
3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库
Apache Snapshots: 用来代理ApacheMaven仓库快照版本的构件仓库
Central: 用来代理maven中央仓库中发布版本构件的仓库
Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
Releases: 用来部署管理内部的发布版本构件的宿主类型仓库
Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库
二 IntelliJ IDE使用私服配置
找到maven的安装目录 D:\JetBrains\IntelliJ IDEA 14.1.5\plugins\maven\lib\maven3\conf
修改setting.xml 添加如下:
1 | </``mirrors``>`` ``<``mirror``>`` ``<``id``>central</``id``>`` ``<``mirrorOf``>*</``mirrorOf``>`` ``<``name``>Central Repository</``name``>`` ``<``url``>http://192.168.1.7:8081/nexus/content/groups/public/</``url``>`` ``</``mirror``>`` ``</``mirrors``> |
修改 工程设置,一定要把user setting file 钩给勾上 . OK 工程无需其它配置 就可以使用私服了
三上传构建到私服
直接用 idea 中的 deploy按钮就可以将 打好的 jar 包或者 war包上传到 私服中 (install 是将jar包 拷贝到本地仓库)
maven setting.xml 添加如下配置:
1 | <servers> |
工程pom.xml 添加如下配置:
1 | <distributionManagement> |
常用功能
Nexus常用功能就是:指定私服的中央地址、将自己的Maven项目指定到私服地址、从私服下载中央库的项目索引、从私服仓库下载依赖组件、将第三方项目jar上传到私服供其他项目组使用。
开启Nexus服务后访问url地址http://localhost:8081/nexus/(推荐使用自己的ip地址),之后登录系统,用户名密码分别是:admin/admin123.
最频繁的就是点击左侧菜单栏的Repositories按钮
一般用到的仓库种类是hosted、proxy。Hosted代表宿主仓库,用来发布一些第三方不允许的组件,比如Oracle驱动、比如商业软件jar包。Proxy代表代理远程的仓库,最典型的就是Maven官方中央仓库、JBoss仓库等等。如果构建的Maven项目本地仓库没有依赖包,那么就会去这个代理站点去下载,那么如果代理站点也没有此依赖包,就回去远程中央仓库下载依赖,这些中央仓库就是proxy。代理站点下载成功后再下载至本机。笔者认为,其实Maven这个自带的默认仓库一般情况下已经够大多数项目使用了。特殊情况时在配置新的仓库,指定url即可,一般熟悉ExtJS的人操作这个Nexus都没什么问题,单词不是很难,不明白的查查单词基本差不多。就是如果Sonatype公司对其做了国际化一的处理就更好了。
hosted 类型的仓库,内部项目的发布仓库
releases 内部的模块中release模块的发布仓库
snapshots 发布内部的SNAPSHOT模块的仓库
3rd party 第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去
proxy 类型的仓库,从远程中央仓库中寻找数据的仓库
group 类型的仓库,组仓库用来方便我们开发人员进行设置的仓库
maven项目索引
下载Maven项目索引,项目索引是为了使用者能够在私服站点查找依赖使用的功能
保存后后台会运行一个任务,点击菜单栏的Scheduled Tasks选项即可看到有个任务在RUNNING。 下载完成后,Maven索引就可以使用了,在搜索栏输入要搜索的项,就可以查到相关的信息。例如spring-core
就可以检索出它的相关信息,包括怎么配置依赖信息。我们要想使用这个私服仓库,先在项目pom中配置相关私服信息
指定仓库
1 | <repositories> |
这样只有本项目才在私服下载组件
这样这个Maven项目构建的时候会从私服下载相关依赖。当然这个配置仅仅是在此项目中生效,对于其他项目还是不起作用。如果相对Maven的其他项目也生效的话。需要修改全局的settings.xml文件。
修改settings.xml为
追加激活profile
1 | <activeProfiles> |
之后所有本机的Maven项目就在私服下载组件。(这样比较好)
项目的发布
1 | <distributionManagement> |
注意配置了还是发布项目到私服失败,原因为没有权限
配置权限在settings.xml
然后运行发布
clean deploy
在控制台发布成功
然后进入到私服上的仓库中,看一下确实存在刚刚发布的项目
宿主库——3rd party
假如我们下载了Oracle的驱动程序jar包想给其他项目组使用,就需要上传该jar包。选中宿主库——3rd party,之后选择Artifact Upload上传至宿主空间。
最后点击上传
复习标签
pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" |
springboot的依赖
spring-boot-starter-parent
1 | <parent> |
spring-boot-starter-thymeleaf
1 | 这个包有坑,这个包包含了spring-boot-starter |
spring-boot-starter
1 | 此包包含了很多配置 |
spring-boot-starter-logging
1 | 此依赖默认在spring-boot-starter-web下 |
spring-boot-starter-web
针对Web应用与网络接口
spring-boot-starter-test
spring-boot-starter-jdbc
针对JDBC
spring-boot-starter-aop
spring-boot-starter-data-jpa
一套JPA应用框架
spring-boot-starter-cache
针对缓存支持
mybatis-plus-boot-starter
mybatis-plus-generator
velocity-engine-core
spring-boot-starter-data-redis
spring-boot-maven-plugin
1 | 放在dependencies之后,可以把项目打包成一个可执行的jar包 |