repository 仓库
- 本地仓库
本机一般 .m2 本地仓库地址可以在 settings.xml 里边指定
- 远程仓库
比如公司私有仓库 pom 可以通过配置多个 repository 来,如果好多项目共用的话,可以在 settings 文件配置 profile,这样新项目就不需要重复配置 repository 了
- 中央仓库 maven 必须至少知道一个远程仓库,中央仓库就是默认的仓库,不需要显示配置在maven 的 super pom 中配置的 兜底用的,找不到的 jar 会找它
如果中央仓库慢可以用 mirrors 来替换它,它的 id 是 central,在 mirrorOf 标签中配置它的标签就是替换了
仓库在哪里配置
可以在 settings 或者 pom.xml 中配置 可以嵌入到 profile 中,也可以单独通过 repository 配置然后 profile 通过 id 引用
谁用仓库
profile (构建) 标签会指定仓库 下载 jar 会有一个默认的搜索顺序,见 repo 优先级
server 和 repository如何关联
通过 distributionManagement 标签根据 id 关联起来
依赖仓库的配置方式
- 中央仓库,这是默认的仓库
- 镜像仓库,通过 sttings.xml 中的 settings.mirrors.mirror 配置
- 全局profile仓库,通过 settings.xml 中的 settings.repositories.repository 配置
- 项目仓库,通过 pom.xml 中的 project.repositories.repository 配置
- 项目profile仓库,通过 pom.xml 中的 project.profiles.profile.repositories.repository 配置
- 本地仓库
依赖优先级关系由近(本地仓库)及远(中央仓库)
强烈注意: 你的 maven 的环境变量会覆盖一切. 当你发现你修改 settings 不生效的时候,检查下你的 maven home 配置
repo 优先级
代码语言:javascript复制本地仓库jar>global settings active profile> user settings active profile>pom profile>pom repo>user mirror>global mirror
pom中的repo配置高于user/global settings中的mirror
user/global settings中的activa profile高于pom中的repo
global settgings中的active profile高于user settings中的active profile
user settings active profile高于mirror(checked)
但是settings定位不同,它倾向于提供一些公共的附属信息,而不是个性化的构建信息.它会
尽量融合到你的pom中。
mirror镜像又是个什么东西
就是一个备份或冗余.并且你有的我也有并且我比你快 用镜像仓库替代默认的远程仓库
用来替代在 pom 中 repository 定义的仓库(miorrorOf 标签通过唯一的仓库 id) maven 的中央仓库 id 是 central(在 super pom 中配置)
注意:当远程仓库被镜像匹配到的,则在获取 jar 包将从镜像仓库获取,而不是我们配置的 repository 仓库, repository 将失去作用
如果你不是以上两个目的就不用配置镜像了
mirror优先级
见 repo 优先级 pom 不支持配置
profile是个什么东西
代码语言:javascript复制定义构建程序的资源和配置,如: - 远程仓库列表
- 构建时本地路径及远程路径
- 唯一标志
- 自动触发逻辑
- 扩展属性列表
- 插件仓库列表
profile通过什么配置
代码语言:javascript复制通过profiles/profile标签配置
profile在哪里配置以及有什么区别
代码语言:javascript复制在settings和pom都可以配置
但是settings只能提供给pom: repository,plugin repository,以及free-form properties供pom使用
可以理解为setting的profile是对pom中的profile信息的补充以达到build的目的
profile 相关标签说明
- activation
自动触发/激活 profile 的条件逻辑 不是激活profile的唯一方式,还可以通过命令行-P yourWantedtoActiveProfile,anotherProfiletoActive
可以配置自动激活条件特别多,具体参考文档
代码语言:javascript复制mvn help:active-profiles
- properties
对profile的扩展,配置一些属性值${x}
代码语言:javascript复制<!--
1. env.X: 在一个变量前加上"env."的前缀,会返回一个shell环境变量。例如,"env.PATH"指代了$path环境变量(在Windows上是%PATH%)。
2. project.x:指代了POM中对应的元素值。例如: <project><version>1.0</version></project>通过${project.version}获得version的值。
3. settings.x: 指代了settings.xml中对应元素的值。例如:<settings><offline>false</offline></settings>通过 ${settings.offline}获得offline的值。
4. Java System Properties: 所有可通过java.lang.System.getProperties()访问的属性都能在POM中使用该形式访问,例如 ${java.home}。
5. x: 在<properties/>元素中,或者外部文件中设置,以${someVar}的形式使用。
ex. <user.install>${user.home}/our-project</user.install>
-->
注:如果该profile被激活,则可以在pom.xml中使用${user.install}。
- profile 中 Repositories
远程仓库列表,它是 maven 用来填充构建系统本地仓库所使用的一组远程仓库。
远程仓库唯一标志/名称 release/snapshots 配置 远程仓库 url
- pluginRepositories
maven插件的仓库
- activeProfiles
手动激活profiles的列表,配置的是在pom中配置的profile的id 按照profile被应用的顺序定义activeProfile
不管在哪里配置的profile都记得要激活 pom 激活方式
代码语言:javascript复制<activation>
<activeByDefault>true</activeByDefault>
</activation>
settings 激活方式
代码语言:javascript复制<activeProfiles>
<activeProfile>
profile_user_settings
</activeProfile>
</activeProfiles>
与 pom 中 profile 的区别与联系
settings.xml 中的 profile 元素是 pom.xml 中 profile 元素的裁剪版本 它包含了 id、activation、repositories、pluginRepositories 和 properties 元素。 这里的 profile 元素只包含这五个子元素是因为这只关心构建系统这个整体
如果一个 settings.xml 中的 profile 被激活,它的值会覆盖任何其它定义在 pom.xml 中带有相同 id 的 profile。 settings 的 profile 一般是个 pom 的 profile 提供补充信息, 一般是公共的,适合所有项目的
settings 文件是个什么东西
从 settings.xml 的文件名就可以看出,它是用来设置 maven 参数的配置文件。并且, settings.xml 是 maven 的全局配置文件。而 pom.xml 文件是所在项目的局部配置。 Settings.xml 中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。
settings.xml 文件位置
settings.xml 文件一般存在于两个位置:
全局配置: ${M2_HOME}/conf/settings.xml
用户配置: