发表于: 2017-09-05 23:18:50

1 1014


今天完成的事情:今天学习了mybatis+spring+junit.配置了spring,junit.尝试写了一个项目.学习了用generator工具自动生成代码.学习了maven仓库

配置spring

学习generator工具

学习maven仓库

Maven仓库详解

1.Maven仓库(Repository):   Maven仓库就是放置所有JAR文件(WARZIPPOM等等)的地方(有网上有本地),所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,这节省了磁盘资源(用哪个下载哪个)。此外,由于Maven仓库中所有的JAR都有其自己的坐标,该坐标告诉Maven它的组ID,构件ID,版本,打包方式等等,因此Maven项目可以方便的进行依赖版本管理。你可以建立一个组织层次的Maven仓库,供所有成员使用。简言之,Maven仓库能帮助我们管理构件(主要是JAR)。

2.分类

2.1.maven仓库分类

·         remote repository(远程仓库):相当于公共的仓库,大家都能访问到,一般可以用URL(统一资源定位符)的形式访问

·         local repository(本地仓库):存放在本地磁盘的一个文件夹,例如,windows上默认是C:\Users\{用户名}\.m2\repository目录

2.2. Remote Repository主要有3种:

·         中央仓库:http://repo1.maven.org/maven2/ (被墙了,进不去)

·         私服:内网自建的maven repository,其URL是一个内部网址 

·         其他公共仓库:其他可以互联网公共访问maven repository

repository里存放的都是各种jar包和maven插件。当向仓库请求插件或依赖的时候,会先检查local repository,如果local repository有则直接返回,否则会向remote repository请求,并缓存到local repository。也可以把做的东西放到本地仓库,仅供本地使用;或上传到远程仓库,供大家使用。

3 RepositoryMirror

3.1 定义

1.其实,mirror(它不是仓库)表示的是两个Repository之间的关系,在maven配置文件(setting.xml)里配置 了<mirrors><mirror>..........</mirror></mirrors>, 即定义了两个Repository之间的镜像关系。

2.如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为XY的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取。

 

3.2 目的

因为maven官方中央仓库在国外用着不方便,所以国内有许多公共的镜像仓库(和中央仓库一样使用)

配置两个Repository之间的镜像关系,一般是出于访问速度和下载速度考虑。

例如, 有一个项目,需要在公司和住所都编码,并在项目pom.xml配置了A Maven库。在公司,是电信网络,访问A库很快,所以maven管理依赖和插件都从A库下载;在住所,是网通网络,访问A库很慢,但是访问B库很快。这 时,在住所的setting.xml里,只要配置一 <mirrors><mirror>....</mirror></mirrors>,让B库成为A 库的mirror,即可不用更改项目pom.xml里对于A库的相关配置。

如果该镜像仓库需要认证,则配置setting.xml中的<server></server>即可。

3.3  注意

需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。

4 私服

私服是一种特殊的远程Maven仓库,它是架设在局域网内的仓库服务,私服一般被配置为互联网远程仓库的镜像,供局域网内的Maven用户使用。

Maven需要下载构件的时候,先向私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,同时缓存在私服之上,然后为Maven下载请求提供下载服务,另外,对于自定义或第三方的jar可以从本地上传到私服,供局域网内其他maven用户使用。

优点主要有:

  1. 节省外网宽带
  2. 加速Maven构建
  3. 部署第三方构件
  4. 提高稳定性、增强控制:原因是外网不稳定
  5. 降低中央仓库的负荷:原因是中央仓库访问量太大

 

5.公共仓库:internal repository是指在局域网内部搭建的repository,它跟central repository的区别仅仅在于其URL是一个内部网址 ,mirror则相当于一个代理,它会拦截去指定的远程repository下载构件的请求,然后从自己这里找出构件回送给客户端。配置mirror的目的一般是出于网速考虑。 可以看出,internal repositorymirror是两码事。前者本身是一个repository,可以和其它repository一起提供服务,比如它可以用来提供公司内部的maven构件;而后者本身并不是repository,它只是远程repository的网络加速器。 

6.工作原理:

此时,B Repository被称为A Repository的镜像。

7.settings.xml(位置:maven软件安装文件夹conf文件夹里maven\apache-maven-3.3.3\conf)文件配置

其他公共仓库配置:不过,很多internal repository搭建工具往往也提供mirror服务,比如Nexus就可以让同一个URL,既用作internal repository,又使它成为所有repositorymirror

如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为XY的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都胡够从它的镜像中获取。举个例子,http://maven.net.cn/content/groups/public/ (公共仓库网址)是中央仓库http://repo1.maven.org/maven2/ 在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的务。因此,可以配置Maven使用该镜像来替代中央仓库。编辑settings.xml,代码如下:

<settings>

  ...

  <mirrors>

    <mirror>

      <id>maven.net.cn</id>

      <name>one of the central mirrors in   china</name>

      <url>http://maven.net.cn/content/groups/public/</url>

      <mirrorOf>central</mirrorOf>

    </mirror>

  </mirrors>

  ...

</settings>

该例中,<mirrorOf>的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像,用户也可以使用同样的方法配置其他仓库的镜像。另外三个元素id,name,url与一般仓库配置无异,表示该镜像仓库的唯一标识符、名称以及地址。

私服配置: 关于镜像的一个更为常见的用法是结合私服。由于私服可以代理任何外部的公共仓库(包括中央仓库),因此,对于组织内部的Maven用户来说,使用一个私服地址就等于使用了所有需要的外部仓库,这可以将配置集中到私服,从而简化Maven本身的配置。在这种情况下,任何需要的构件都可以从私服获得,私服就是所有仓库的镜像。这时,可以配置这样的一个镜像,如例:  

?

1

2

3

4

5

6

7

8

9

10

11

12

<settings>

  ...

  <mirrors>

    <mirror>

      <id>internal-repository</id>

      <name>Internal Repository Manager</name>

      <url>http://192.168.1.100/maven2</url>

      <mirrorOf>*</mirrorOf>

    </mirror>

  </mirrors>

  ...

</settings>

该例中<mirrorOf>的值为星号,表示该配置是所有Maven仓库的镜像,任何对于远程仓库的请求都会被转至http://192.168.1.100/maven2/(私服的网址)。如果该镜像仓库需要认证,则配置一个Idinternal-repository<server>即可。为了满足一些复杂的需求,Maven8.支持更高级的镜像配置: 
1.<mirrorOf>*</mirrorOf> 
匹配所有远程仓库。 
2.<mirrorOf>external:*</mirrorOf> 
匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。 
3.<mirrorOf>repo1,repo2</mirrorOf> 
匹配仓库repo1repo2,使用逗号分隔多个远程仓库。 
4.<mirrorOf>*,!repo1</miiroOf> 
匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。 

明天的计划:明天争取把今天这个项目跑通

遇到的问题:今天的项目properties文件没被调用,使用应该项目没连接上数据库.

收获:学习了maven仓库.学习配置spring.

 

 

 



返回列表 返回列表
评论

    分享到