maven 多仓库,maven依赖本地仓库

  maven 多仓库,maven依赖本地仓库

  00-1010后台混合配置私有和公有仓库maven仓库解决方案第一步,验证私有仓库第二步,搜索公共仓库第三步,搜索第三方仓库第四步,Maven配置mirrorprofileactiveProfile配置结果设置. xml完整配置结论

  00-1010最近在调查一个开源仓库,所以从github下载代码后,cannotresolve org的问题。第四行。cling 3360 ckling-支持33602.1.1发生在IDEA sync处于从属状态时。详情如下:

  无法解析org . fourth line . cling : cling-support :2 . 1 . 1清理损坏的工件数据(。lastUpdated文件)并重新加载项目。cannotresolve org。第四行. cling3360紧贴核心33602.1.1清理破碎的工件数据(。最后更新的文件)并重新加载项目。很明显,问题是Maven仓库找不到需要的jar包。那么如何解决这个问题呢?

  

目录

  00-1010首先我们要知道Maven仓库分为私有仓库、公有仓库和第三方仓库。其中包括:

  私人仓库:一般是公司或个人建造的仓库。公仓是Maven的官方仓库,地址是repo1.maven.org/maven2/.

  国内官方仓库访问速度极慢,所以国内通常使用阿里云仓库。地址:maven.aliyun.com/nexus/conte…

  第三方仓库:一些个人、团体、公司的开放式仓库,仓库里的jar包不发布到公共仓库。熟悉仓库的分类对解决上述问题起着重要的作用。

  

背景

  00-1010遇到缺乏依赖的问题后,首先需要确认私仓中是否存在依赖。看nexus,可以得出私有仓库没有这种依赖性的结论。

  

私有和公共仓库混合配置

Maven的官方仓库提供了一个网页搜索页面,上面有repo1.maven.org/maven2/.的地址,尝试搜索后发现没有必要依赖。如下所示:

  00-1010经过上面的查找,可以得出结论,代码所需要的依赖必须由第三方仓库提供。怎么查出是在哪个第三方仓库?

  此时就需要mvnrepository来帮忙了,它的地址是mvnrepository.com/. mvn repository提供了公共仓库和第三方仓库的索引、查询、下载jar包等实用功能。

  我们尝试搜索所需的依赖项,mvnrepository.com/artifact/or…,结果如下:

  您可以看到在mvnrepository中找到了所需的依赖项。那么问题来了,你怎么知道第三方仓库的地址呢?可以详细看到上图中箭头所指的区域,这里显示的是第三方仓库的maven url。

  实际上,您可以完全跳过对公共仓库的搜索,因为mvnrepository已经包含了公共仓库的依赖项。

  

Maven仓库

maven仓库的maven配置在setting.xml中配置如果要混合私有仓库和公有仓库,需要在setting.xml中添加新的mirror和profile,并激活新的activeProfile。

  00-1010setting.xml有一个镜像节点,用于配置镜像URL。镜子可以搭配

  置多个mirror,每个mirrorid,name,url,mirrorOf属性,详细解释如下:

  id是唯一标识一个mirrorname貌似没多大用,相当于描述url是官方的库地址mirrorOf代表了一个镜像的替代位置,其中,*: 匹配所有,所有内容都从镜像拉取;external:*: 除了本地缓存的所有从镜像仓库拉取;repo,repo1: repo或者repo1,这里的repo指的仓库ID;*,!repo1: 除了repo1的所有仓库;我们这次需要添加的mirror如下:

  

<mirror><id>nexus-4thline</id><mirrorOf>4thline</mirrorOf><name>4thline nexus</name><url>http://4thline.org/m2/</url></mirror>
这里又产生了一个问题,配置了多个mirror,Maven如何排序?答案是,Maven并不是按照setting.xml中配置的顺序执行,而是根据字母排序来指定第一个,然后会遍历所有的仓库,直至找到需要的依赖。

  

  

profile

作用:根据环境参数来调整构建配置的列表,settings.xml中的profile元素是pom.xmlprofile元素的裁剪版本

  id:profile的唯一标识activation:自动触发profile的条件逻辑repositories:远程仓库列表pluginRepositories:插件仓库列表properties:扩展属性列表这里的profile元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。如果一个settings.xml中的profile被激活,它的值会覆盖任何其它定义在pom.xml中带有相同id的profile

  我们这次需要添加的profile如下:

  

<profile> <id>4thline</id> <repositories><repository> <id>4thline</id> <url>http://4thline.org/m2/</url> <releases><enabled>true</enabled> </releases> <snapshots><enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots></repository> </repositories></profile>

  

activeProfile

作用:手动激活profiles的列表,按照profile被应用的顺序定义activeProfile

  

该元素包含了一组activeProfile元素,每个activeProfile都含有一个profile id。任何在activeProfile中定义的profile id,不论环境设置如何,其对应的 profile都会被激活。如果没有匹配的profile,则什么都不会发生。

  

我们这次需要添加的activeProfile如下:

  

<activeProfiles><activeProfile>corp</activeProfile><activeProfile>aliyun</activeProfile><activeProfile>4thline</activeProfile></activeProfiles>

  

配置结果

经过上述配置后,首先我们可以在IDEA的Maven侧边栏中,可以看到多了4thlineprofile。(可以看到IDEA的profiles是按照首字母排序的,和上文中mirror的定义是一致的。)

  

  重新执行Reload All Maven Projects,所有的依赖都正常import。

  

  

  

setting.xml完整配置

完整版的setting.xml如下:

  

<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><localRepository>D:Usersxxx.m2repository</localRepository><pluginGroups></pluginGroups><mirrors><mirror> <id>nexus</id> <mirrorOf>corp</mirrorOf> <name>corp nexus</name> <url>http://maven.corp.com/nexus/content/groups/public</url></mirror><mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>aliyun nexus</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror><mirror><id>nexus-4thline</id><mirrorOf>4thline</mirrorOf><name>4thline nexus</name><url>http://4thline.org/m2/</url></mirror></mirrors><servers><server><id>releases</id><username>xxx</username><password>yyy</password></server><server><id>snapshots</id><username>xxx</username><password>yyy</password></server></servers><profiles xmlns=""><profile><id>corp</id><repositories><repository> <id>public</id> <name>all repoes</name> <url>http://maven.corp.com/nexus/content/groups/public</url> <releases><enabled>true</enabled><checksumPolicy>warn</checksumPolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots></repository></repositories><pluginRepositories><pluginRepository><id>corp</id><url>http://maven.corp.com/nexus/content/groups/public</url><releases><enabled>true</enabled><checksumPolicy>warn</checksumPolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy><checksumPolicy>fail</checksumPolicy></snapshots></pluginRepository></pluginRepositories></profile><profile> <id>aliyun</id> <repositories><repository> <id>aliyun</id> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases><enabled>true</enabled> </releases> <snapshots><enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots></repository> </repositories></profile><profile> <id>4thline</id> <repositories><repository> <id>4thline</id> <url>http://4thline.org/m2/</url> <releases><enabled>true</enabled> </releases> <snapshots><enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots></repository> </repositories></profile></profiles> <activeProfiles><activeProfile>corp</activeProfile><activeProfile>aliyun</activeProfile><activeProfile>4thline</activeProfile></activeProfiles></settings>

  

结论

Maven是每一个Java程序员都再熟悉不过的工具,但是我们真的了解它吗?

  任何一个优秀的框架、组件、工具,除了特殊的另外的特殊优化外,很多时候设计思路是大体相同的,我们在实际工作中不仅仅要扩展自己的涉猎领域,更需要在某些领域深入进入,对个人的提升是更为有益处的。

  到此这篇关于Maven混合配置私有仓库和公共仓库的文章就介绍到这了,更多相关Maven配置私有仓库和公共仓库内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: