[TOC]
0 参考
1 settings.xml详解
1.1 声明规范
1 | <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" |
1.2 localRepository
1 | <!-- 本地仓库的路径。默认值为 --> |
1.3 interactiveMode
1 | <!--Maven是否需要和用户交互以获得输入。如果Maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true。--> |
1.4 usePluginRegistry
1 | <!--Maven是否需要使用plugin-registry.xml文件来管理插件版本。如果需要让Maven使用文件来管理插件版本,则设为true。默认为false。--> |
1.5 offline
1 | <!--表示Maven是否需要在离线模式下运行。如果构建系统需要在离线模式下运行,则为true,默认为false。当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。 --> |
1.6 pluginGroups
1 | <!--当插件的组织Id(groupId)没有显式提供时,供搜寻插件组织Id(groupId)的列表。该元素包含一个pluginGroup元素列表,每个子元素包含了一个组织Id(groupId)。当我们使用某个插件,并且没有在命令行为其提供组织Id(groupId)的时候,Maven就会使用该列表。默认情况下该列表包含了org.apache.maven.plugins和org.codehaus.mojo --> |
1.7 proxies
1 | <!--用来配置不同的代理,多代理profiles 可以应对笔记本或移动设备的工作环境:通过简单的设置profile id就可以很容易的更换整个代理配置。 --> |
1.8 servers
1 | <!--配置服务端的一些设置。一些设置如安全证书不应该和pom.xml一起分发。这种类型的信息应该存在于构建服务器上的settings.xml文件中。--> |
1.9 mirrors
1 | <!--为仓库列表配置的下载镜像列表。高级设置请参阅镜像设置页面 --> |
1.10 profiles
1 | <!--根据环境参数来调整构建配置的列表。settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。它包含了id,activation, repositories, pluginRepositories和 properties元素。这里的profile元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。如果一个settings中的profile被激活,它的值会覆盖任何其它定义在POM中或者profile.xml中的带有相同id的profile。 --> |
1.11 Activation
1 | <!--自动触发profile的条件逻辑。Activation是profile的开启钥匙。如POM中的profile一样,profile的力量来自于它能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以包含profile的id。profile也可以通过在命令行,使用-P标记和逗号分隔的列表来显式的激活(如,-P test)。--> |
1.12 Repositories
1 | <repository> |
1.13 activeProfiles
1 | 默认配置: |
2 示例
1 |
|
3 私有仓库配置浅析
基本逻辑
- pom>启用的profile>maven原有配置
- mirror配置mirrorOf和id匹配优先
简单maven配置
一般大家的配置(略去无关私有仓库配置)都是这样的
1 | <mirrors> |
3.1 mirrors
这个标签重要的属性包括id、mirrorOf。id用来唯一区分。mirrorOf用来关联repository。
url用来表示私服地址。
mirrorOf常见大家配置成*、central、repo啥的
id
唯一标识mirrorOf
指定镜像的规则。就是什么情况会从镜像仓库拉取,而不是从原本的仓库拉取
可选项参考链接:*
匹配所有external:*
除了本地缓存之后的所有仓库repo,repo1
repo
或者repo1
。 这里repo
指的是仓库的id,下文会提到*,!repo1
除了repo1
的所有仓库
name
名称描述url
地址
3.2 profile
这个就简单说下吧,就是算是个配置,可以配多个,具体哪个生效可以通过mvn命令指定,或者配置
3.3 repositories
这里面算是配置的重点
1 | <repository> |
几个重要的配置,一目了然吧,id标识,url地址,是否从该仓库下release,是否从该仓库下快照版本。
这里就有人会懵逼了,这里怎么又配了个地址,跟mirrors里面的地址哪个生效呢?
好的,那咱们试试。先规定一下配置:
1 | <mirrors> |
把地址区分下,mirror里配成xxx,repository配成ccc
随便找一个项目,设定一个不存在的依赖,mvn -U compile下:
可以发现去ccc找了。说明repository里的生效了。
那么mirror里的地址什么时候生效呢?其实刚才说了,mirror里的是靠mirrorOf中的内容和repository中id关联的。比如我们把刚才配置改为
1 | <mirrors> |
把repository中的id改成central
这样就行了。此外mirrorOf中可以配置通配符,例如*,表示任何repository都和这个关联。
其实简单来说就是如果repository的id能和mirrorOf关联上,那么url以mirror的为准,否则以repository中自己的url为准。
其他还有一些点,repositories中可以配置多个repository,配置多个话,一个找不到会找下一个,比如我们在刚才基础上加上阿里的配置
1 | <repositories> |
在构建一次:
3.4 总结
咱们在回顾下起初的配置,可以看到启用的profile是dev,dev中的repository的id是nexus,跟mirrorOf没有匹配,那么生效的配置就是repository中自己的url配置,所以这里完全可以省略掉mirror的配置。当然如果多个profile公用一个私服地址,也可以指定mirror地址,然后repository中的id指定成和mirrorOf相同,同时可以省略掉自己标签中url。
此外还有几个点要说,pluginRepositories,配置信息基本和repository一致,不过这个地址是用来下maven的插件的,就是pom中这样的配置
1 | <plugins> |
还有,pom也可以指定repository:
这样配置会和settings.xml中生效的配置合并,并优先从这个库找,找不到继续走settings.xml配置。
3.5 多仓库配置
第三方包,自己公司的包等除了手动install:install-file
导入之外,最好的办法就是搭建自己公司的私有仓库,这里推荐使用nexus, 这样除了中央仓库之外就需要设置自己的仓库了
设置多仓库有2个方法:
pom设置(java的pom文件)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<project>
...
<repositories>
<repository>
<id>my-repo1</id>
<name>your custom repo</name>
<url>http://jarsm2.dyndns.dk</url>
</repository>
<repository>
<id>my-repo2</id>
<name>your custom repo</name>
<url>http://jarsm2.dyndns.dk</url>
</repository>
</repositories>
...
</project>setting设置(
${user.home}/.m2/settings.xml
)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23<settings>
...
<profiles>
...
<profile>
<id>myprofile</id>
<repositories>
<repository>
<id>my-repo2</id>
<name>your custom repo</name>
<url>http://jarsm2.dyndns.dk</url>
</repository>
...
</repositories>
</profile>
...
</profiles>
<activeProfiles>
<activeProfile>myprofile</activeProfile>
</activeProfiles>
...
</settings>激活配置文件除了放在
activeProfiles
中之外,也可以使用mvn的参数1
2> mvn -Pmyprofile ...
>