您的当前位置:首页正文

浅谈Maven项目中依赖的搜索顺序

来源:爱站旅游
导读浅谈Maven项目中依赖的搜索顺序
浅谈Maven项⽬中依赖的搜索顺序

⽹上有很多关于maven项⽬中mirror、profile、repository的搜索顺序的⽂章,说法不⼀。官⽅⽂档并没有找到相关的说明,鉴于此,我抽时间做了⼀个验证。依赖仓库的配置⽅式

maven项⽬使⽤的仓库⼀共有如下⼏种⽅式:

1. 中央仓库,这是默认的仓库

2. 镜像仓库,通过 sttings.xml 中的 settings.mirrors.mirror 配置

3. 全局profile仓库,通过 settings.xml 中的 settings.repositories.repository 配置4. 项⽬仓库,通过 pom.xml 中的 project.repositories.repository 配置

5. 项⽬profile仓库,通过 pom.xml 中的 project.profiles.profile.repositories.repository 配置6. 本地仓库

如果所有配置都存在,依赖的搜索顺序就会变得异常复杂。分析依赖搜索顺序

先从最简单开始,慢慢增加配置,查看有什么变化。准备测试环境安装jdk、maven。

使⽤如下命令创建测试项⽬:

复制代码 代码如下:

yes | mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=true -DgroupId=com.pollyduan -DartifactId=myweb -Dversion=1.0 -Dpackage=com.pollyduan创建完成后,为了避免后续测试⼲扰,先执⾏⼀次compile。

cd mywebmvn compile

最后,修改 pom.xml ⽂件,将 junit版本号改为 4.12 。我们要使⽤这个jar来测试依赖的搜索顺序。默认情况

⾸先确保junit4.12不存在:

rm -rf ~/.m2/repository/junit/junit/4.12

默认情况下没有配置任何仓库,也就是说,既没改 $M2_HOME/conf/settings.xml 也没有添加 ~/.m2/settings.xml执⾏编译,查看⽇志中拉取junit的仓库。

mvn compile

...

Downloaded from central: https://repo.maven.apache.org/maven2/junit/junit/4.12/junit-4.12.pom (24 kB at 11 kB/s)

可以看出,默认是从 central 中央仓库拉取的jar.配置镜像仓库 settings_mirror创建 ~/.m2/setttings.xml ,内容如下:

settings_mirror

https://maven.aliyun.com/repository/public central

重新测试:

rm -rf ~/.m2/repository/junit/junit/4.12mvn compile

在⽇志中查看下载依赖的仓库:

复制代码 代码如下:

Downloaded from settings_mirror: https://maven.aliyun.com/repository/public/junit/junit/4.12/junit-4.12.pom (24 kB at 35 kB/s)可以看出,是从 settings_mirror 中下载的jar结论:settings_mirror 的优先级⾼于 central配置pom中的仓库 pom_repositories在 project 中增加如下配置:

pom_repositories local

http://10.18.29.128/nexus/content/groups/public/

true

true

由于我们改变了id的名字,所以仓库地址⽆所谓,使⽤相同的地址也不影响测试。执⾏测试:

rm -rf ~/.m2/repository/junit/junit/4.12mvn compile

在⽇志中查看下载依赖的仓库:

复制代码 代码如下:

Downloaded from pom_repositories: http://10.18.29.128/nexus/content/groups/public/junit/junit/4.12/junit-4.12.pom (24 kB at95 kB/s)

从显⽰的仓库id可以看出:

jar 是从 pom_repositories 中下载的。

pom_repositories 优先级⾼于 settings_mirror配置全局profile仓库 settings_profile_repo在 ~/.m2/settings.xml 中 settings 的节点内增加:

s_profile

settings_profile_repo netease

http://mirrors.163.com/maven/repository/maven-public/

true

true

执⾏测试:

rm -rf ~/.m2/repository/junit/junit/4.12mvn compile -Ps_profile

在⽇志中查看下载依赖的仓库:

复制代码 代码如下:

Downloaded from settings_profile_repo: http://mirrors.163.com/maven/repository/maven-public/junit/junit/4.12/junit-4.12.pom(24 kB at 63 kB/s)从显⽰的仓库id可以看出:

jar 是从 settings_profile_repo 中下载的。

settings_profile_repo 优先级⾼于 settings_mirror。settings_profile_repo 优先级⾼于 pom_repositories 。配置项⽬profile仓库 pom_profile_repo

p_profile

pom_profile_repo local

http://10.18.29.128/nexus/content/groups/public/

true

true

执⾏测试:

rm -rf ~/.m2/repository/junit/junit/4.12mvn compile -Ps_profile,p_profilemvn compile -Pp_profile,s_profile

在⽇志中查看下载依赖的仓库:

复制代码 代码如下:

Downloaded from settings_profile_repo: http://mirrors.163.com/maven/repository/maven-public/junit/junit/4.12/junit-4.12.pom(24 kB at 68 kB/s)从显⽰的仓库id可以看出:

jar 是从 settings_profile_repo 中下载的

settings_profile_repo 优先级⾼于 pom_profile_repo进⼀步测试:

rm -rf ~/.m2/repository/junit/junit/4.12mvn compile -Pp_profile

在⽇志中查看下载依赖的仓库:

复制代码 代码如下:

Downloaded from pom_profile_repo: http://10.18.29.128/nexus/content/groups/public/junit/junit/4.12/junit-4.12.pom (24 kB at106 kB/s)

从显⽰的仓库id可以看出:

jar 是从 settings_profile_repo 中下载的

pom_profile_repo 优先级⾼于 pom_repositories

最后确认 local_repo 本地仓库 ~/.m2/repository这不算测试了,只是⼀个结论,可以任意测试。

只要 ~/.m2/repository 中包含依赖,⽆论怎么配置,都会优先使⽤local本地仓库中的jar.最终结论

settings_mirror 的优先级⾼于 central

settings_profile_repo 优先级⾼于 settings_mirrorsettings_profile_repo 优先级⾼于 pom_repositoriessettings_profile_repo 优先级⾼于 pom_profile_repopom_profile_repo 优先级⾼于 pom_repositoriespom_repositories 优先级⾼于 settings_mirror通过上⾯的⽐较得出完整的搜索链:

local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top