maven的setting配置文件中mirror和repository的区别
简单点来说,repository就是个仓库。
maven里有两种仓库,本地仓库和远程仓库。远程仓库相当于公共的仓库,大家都能看到。
本地仓库是你本地的一个山寨版,只有你看的到,主要起缓存作用。
当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。如果有则直接返回,否则会向远程仓库请求,并做缓存。
远程仓库可以在工程的pomxml文件里指定。
如果没指定,默认会到这个地方去请求插件和依赖包。
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>
</repository>
本地仓库默认在你本地的用户目录下的m2/repository目录下。
mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。
比如,上班的时候在公司,用电信的网络,连的是电信的仓库。
回到家后,是网通的网络,我想连网通的仓库,就可以通过mirror配置,统一把我工程里的仓库地址都改成联通的,而不用到具体工程配置文件里一个一个地改地址。
mirror的配置在m2/settingsxml里。如:
<mirrors>
<mirror>
<id>UK</id>
<name>UK Central</name>
<url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
这样的话,就会给上面id为central的远程仓库做了个镜像。
以后向central这个仓库发的请求都会发到而不是了。
<mirrorOf>central</mirrorOf>里是要替代的仓库的id。
如果填,就会替代所有仓库。
使用maven时,从来没仔细注意过setting配置节点的作用,直到今天配置总是不起作用,总是报错才开始去认识这些节点的含义。
这里就说mirrorOf,因为其他的怎么配置基本上都不会出错,只有mirrorOf会导致莫名其妙的错误,如果你还不了解mirrorOf,请往下看,你会认识到mirrorOf的重要作用的。
主要参考来自:
Using Mirrors for Repositories
如果你英文很不错,你可以去maven官方查看上面的介绍,上面的介绍主要说明了mirrorOf的用法和作用。
或者在这里继续看下去:
先说mirrors中mirror的作用,mirrors允许配置多个镜像mirror,mirror的作用一般是为了使用一个更快速度的镜像,主要是访问速度的考虑,或者突破屏蔽使用可以访问的镜像。
在maven中不配置mirror时使用的maven的中央库。
在maven中配置一个mirror时,mirror通常会设置成,还有可能是一个具体的值,还有可能是逗号隔开的几个值
例如:
1
2repo3
3repo1,repo2,,!repo3
4external:
在上面4个例子中,第一个例子中的意思就是(根据mirrorOf和repository的id)匹配所有的库(repository),这样就是说如果你需要某个jar,他会从镜像地址去下载这个jar。不管你配置了多少个库,即使这些库的地址不一样,仍然会从镜像地址访问,这里就产生了问题。
问题:为什么我配置好了库(repository),但是下载不下来(或者下载地址不对)?
这个问题已经很明白了,就是镜像(mirror)的问题。
问题:如何解决上述问题呢?
这里请继续看第二个例子和第三个例子。
第二个例子只配置了一个repo3,这个镜像只能匹配id是repo3的库,该库会使用repo3的镜像访问。这里说重点了,即使还存在一个的,这里会先查找完全相同的存储库标识符匹配的镜像,如果找到了,就用匹配的,这里就是repo3,这点可以放心。如果找不到,那就去根据其他的mirrorOf查找去,查找到一个就使用。这里需要注意的是,如果存在多个重复的mirrorOf,只会用排名靠前的第一个(按照配置顺序来)。如果一个都没有,就会用maven中央库。
第三个例子是用逗号隔开的好几个,并且有一个特殊的!repo3,一般!的意思是非,这里的意思就是,就是排除repo3的情况。综合起来第三个的含义就是完全匹配repo1,repo2和其他全部库,排除repo3库。
到这里,第二个问题已经有了答案,给这个库配置单独的镜像,而且位置尽量在前面,id和mirrorOf一致。说到这两个一致,还得说两个不能一致的情况,就是mirror的mirrorOf不能和任何mirror的id一致,因为id在setting中唯一,mirrorOf要和库的id一致,所以势必不能和mirror的id一致,如果一致显然就起不到作用了(这里属于猜测,官方要求不能一致)。
第四个例子很特殊,含义就是匹配本地库之外的全部库。如果本地库存在,就用本地库的。
修改maven根目录下的conf文件夹中的settingxml文件,(或者当前用户目录 的 m2 目录下的 settingxml 文件)
内容如下:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://mavenaliyuncom/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
本文主要记录Jenkins+Rancher+k8s自动化部署相关配置说明,不涉及rancher和jenkins安装部署,包含java server项目、WAR项目、前端VUE项目部署配置介绍。
服务器环境信息:
需要在安装jenkins服务上部署下面相应的软件,请注意软件版本,如已经安装相关软件,可跳过此章节。
需要安装rancher-cli,并且使用jenkins用户预先登录rancher平台:命令参考:
--token:这个用户的token建议设置为永不过期,在rancher管理端 -> api&key > 添加。
建议安装阿里镜像,提高编译速度:
jenkins启动用户需要添加到docker组中:
项目主要是java和vue开发的,所以需要安装Maven Integration plugin插件。
spring boot或者spring cloud自带容器,以及其它服务类型的java后端应用部署。
1、填写项目名称,选择"构建一个maven项目"
点击下面"OK"按钮
2、填写项目描述信息
3、输入项目地址,并选择用户凭证
本文通过condingnet作为代码管理平台,点击"Add"添加自己账号凭证(输入codingnet平台登陆账号密码即可)。
4、配置maven编译脚本
5、编写rancher部署脚本
Dockerfile参数说明:FROM:选择基础镜像包,该项目是用java语言开发需要jdk18所以选择openjdk:8ADD:将bRule-deploy-100targz文件解压并上传到镜像的brule目录EXPOSE:容器内部启动2002端口,根据自身项目填写指定端口,多个端口填写多行EXPOSE标签ENTRYPOINT:容器启动时执行的命令,执行多条命令使用&&拼接,命令行中带&需要加上转移符\&,使用tail -fn监听应用日志,以便容器日志查看。
用于创建docker镜像,就好比创建一个已经安装并且配置好了应用程序的操作系统镜像。
参数说明:19216810021:5000:为本地docker镜像服务器地址brule:latest:应用名称,根据自身项目名称修改
利用上面创建好的操作系统镜像启动一个vmware虚拟机,创建k8s容器。
参数说明:brule:应用名称,根据自身项目名称修改,应用名称规范()image:刚才创建的docker镜像containerPort:容器启动端口,多个端口使用多行containerPort标签声明,端口限制在30000-32000
前面vmware虚拟机创建好后,怎么能让别人访问?这个时候就需要创建一个网络服务,用于打通路由器与vmware本地虚拟机的网络。
参数说明:brule:应用名称,根据自身项目名称修改port:容器启动端口nodePort:对外提供服务端口,外部机器访问
将上面配置好的shell脚本复制到Post Steps -> 执行shell文本域中,并点击"保存" -> "立即构建"即可部署。
1、进入刚才创建好的jenkins任务,点击立即构建
2、点击左下角构建任务,选择"Console Output",查看构建日志
3、登录rancher管理平台,查看构建好的应用
基于J2EE项目的war包部署,前面操作都一致,只是shell部署脚本稍有不同,这里主要详细说明rancher部署脚本。
Dockerfile参数说明:FROM:选择基础镜像包,war统一使用tomcat容器部署,tomcat:85-jre8-slimADD:将operationwar文件解压并上传到镜像的/usr/local/tomcat/webapps/目录EXPOSE:容器内部启动8080端口,根据自身项目填写指定端口,多个端口填写多行EXPOSE标签
这里不需要配置ENTRYPOINT标签,因为tomcat镜像包中已经有了。
用于创建docker镜像,就好比创建一个已经安装并且配置好了应用程序的操作系统镜像。
参数说明:19216810021:5000:为本地docker镜像服务器地址operation:latest:应用名称,根据自身项目名称修改
利用上面创建好的操作系统镜像启动一个vmware虚拟机,创建k8s容器。
参数说明:operation:应用名称,根据自身项目名称修改image:刚才创建的docker镜像containerPort:容器启动端口,多个端口使用多行containerPort标签声明,端口限制在30000-32000
前面vmware虚拟机创建好后,怎么能让别人访问?这个时候就需要创建一个网络服务,用于打通路由器与vmware本地虚拟机的网络。
参数说明:operation:应用名称,根据自身项目名称修改port:容器启动端口nodePort:对外提供服务端口,外部机器访问
将上面配置好的shell脚本复制到Post Steps -> 执行shell文本域中,并点击"保存" -> "立即构建"即可部署。
基于webpack构建的VUE项目部署,前面操作都一致,只是shell部署脚本稍有不同,这里主要详细说明rancher部署脚本。
Dockerfile参数说明:FROM:选择基础镜像包,前端统一使用tomcat容器部署,tomcat:85-jre8-slimCOPY:将/dist目录上传到镜像的/usr/local/tomcat/webapps/fastquery/目录EXPOSE:容器内部启动8080端口,根据自身项目填写指定端口,多个端口填写多行EXPOSE标签
这里不需要配置ENTRYPOINT标签,因为tomcat镜像包中已经有了。
用于创建docker镜像,就好比创建一个已经安装并且配置好了应用程序的操作系统镜像。
参数说明:19216810021:5000:为本地docker镜像服务器地址operation:latest:应用名称,根据自身项目名称修改
利用上面创建好的操作系统镜像启动一个vmware虚拟机,创建k8s容器。
前面vmware虚拟机创建好后,怎么能让别人访问?这个时候就需要创建一个网络服务,用于打通路由器与vmware本地虚拟机的网络。
参数说明:shutcm-fastquery-web:应用名称,根据自身项目名称修改port:容器启动端口nodePort:对外提供服务端口,外部机器访问
将上面配置好的shell脚本复制到Post Steps -> 执行shell文本域中,并点击"保存" -> "立即构建"即可部署。
0条评论