文章目录
在安装好maven之后,我们一般不使用maven默认的配置,比如本地仓库、阿里云私服地址等;下面的settings.xml文件的配置就是我在日常中会用到的一些配置项,仅作maven入门级参考:
localRepository:
可以指定本地仓库位置,默认本地仓库位置在${user.home}/.m2/repository下
<localRepository>E:\work\maven\repository</localRepository>
interactiveMode:
是否需要和用户交互已获得输入,默认开启 一般不做修改,自己理解交互就是我们建maven项目的时候设置 groupId(组织名)、artifactId(构件名)、version(版本号)等信息的输入
<interactiveMode>true</interactiveMode>
offline:
表示Maven是否需要在离线模式下运行,需要为true,默认为false。有时候公司出于安全或者网络原因,不能够连接到远程仓库,但本地依赖齐全,可以使用 (很少,基本都是有自己私服的) 因为你本地没有的依赖还是要下载,暂时没发现特别大的用处
<offline>false</offline>
pluginGroups:
在pluginGroups元素下面可以定义一系列的pluginGroup元素。表示当通过plugin的前缀来解析plugin 的时候到哪里寻找。pluginGroup元素指定的是plugin的groupId。默认情况下,Maven会自动把 org.apache.maven.plugins和org.codehaus.mojo添加到pluginGroups下 (自己暂时没使用)
<pluginGroups>
<pluginGroup>com.your.plugins</pluginGroup>
</pluginGroups>
proxies:
设置通过代理访问远程仓库,有些私服仓库是不予许直接访问的
参数说明:
- id:代理的ID,默认default
- active:是否激活该代理,默认true
- protocol:代理服务器的协议,默认http
- host:代理服务器的主机
- port:代理服务器的端口,默认8080
- nonProxyHosts:不使用代理服务器的域名,多个域名使用|分割
<proxies>
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
</proxies>
servers:
当需要连接到一个私有服务器的时候需要的认证信息,主要有username/password和privateKey/passphrase这两种方式。
参数说明:
********************第一种通过用户名密码连接
- id,这是server的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配
- username,鉴权用户名
- password,鉴权密码
********************第二种通过秘钥连接
- 私钥位置和指定了一个私钥的路径(默认是${user.home}/.ssh/id_dsa)。
- privateKey,私钥位置
- passphrase,私钥密码
- filePermissions,文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(permission)。这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775。
- directoryPermissions,目录被创建时的权限。
<servers>
<server>
<id>deploymentRepo</id>
<username>repouser</username>
<password>repopwd</password>
</server>
<server>
<id>siteServer</id>
<privateKey>/path/to/private/key</privateKey>
<passphrase>optional; leave empty if not used.</passphrase>
</server>
</servers>
mirrors:
用于定义一系列的远程仓库的镜像。我们可以在pom中定义一个下载工件时候所使用的远程仓库。但有时候这个远程仓库会比较忙,所以这个时候人们就想着给它创建镜像以缓解远程仓库的压力,也就是说会把对远程仓库的请求转换到对其镜像地址的请求。每个远程仓库都会有一个id,这样我们就可以创建自己的mirror来关联到该仓库,那么以后需要从远程仓库下载工件的时候Maven就可以从我们定义好的mirror站点来下载,这可以很好的缓解我们远程仓库的压力。在我们定义的mirror中每个远程仓库都只能有一个mirror与它关联,也就是说你不能同时配置多个mirror的mirrorOf指向同一个repositoryId。(私服)
参数说明:
- id,用来区别mirror的,所有的mirror不能有相同的id
- mirrorOf,用来表示该mirror是关联的哪一个仓库,其值为其关联仓库的id。当要同时关联多个仓库时,这多个仓库之间可以用逗号隔开;当要关联所有的仓库时,可以使用“”表示;当要关联除某一个仓库以外的其他所有仓库时,可以表示为“,!repositoryId”;当要关联不是localhost或用file请求的仓库时,可以表示为“external:*”(最后一种没使用过)。
- name,自定义名称
- url,表示该镜像的url。当Maven在建立系统的时候就会使用这个url来连接到我们的远程仓库。例如:阿里云:http://maven.aliyun.com/nexus/content/groups/public
<mirrors>
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
</mirrors>
profiles:
用于指定一系列的profile。当一个profile在settings.xml中是处于活动状态并且在pom.xml中定义了一个相同id的profile时,settings.xml中的profile会覆盖pom.xml中的profile
参数说明:
- id,配置的唯一标识符
activation:
- activeByDefault,当其值为true的时候表示如果没有其他的profile处于激活状态的时候,该profile将自动被激活。
- jdk,表示jdk的版本满足条件的时候激活,在这里是1.4。版本指定还可以用一个范围来表示,例如:[1.4,1.8) 符合开闭区间原则,例子中为1.4,1.5,1.6,1.7,则[1.4,1.8]为1.4,1.5,1.6,1.7,1.8
- os,表示当操作系统满足条件的时候激活(一般项目不做限制)
- property,表示当Maven检测到了这样一个键值对的时候就激活该profile (例如下面代码中的可以在执行命令中:mvn compile –DmavenVersion=1.0.0)
- file,表示当文件存在或不存在的时候激活,exists表示存在,missing表示不存在。如下面的例子表示当文件config/application-pro.yml存在的时候激活该profile
properties:
当该profile是激活状态的时候,properties下面指定的属性都可以在pom.xml中使用(具体未使用过,有人了解可以评论下自己也学习下)
<profiles>
<profile>
<id>alimaven</id>
<activation>
<activeByDefault>false</activeByDefault>
<jdk>1.4</jdk>
<os>
<name>Windows 7</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
<property>
<name>mavenVersion</name>
<value>1.0.0</value>
</property>
<file>
<exists>config/application-pro.yml</exists>
</file>
</activation>
<properties>
<tomcatPath>/path/to/tomcat/instance</tomcatPath>
</properties>
</profiles>
repositories:
定义远程仓库的地址,包含一系列的repository元素,当对应profile激活状态时,作为pom的远程仓库,是用来配置maven项目的远程仓库。例如,定义一个maven的远程仓库,图为阿里maven私服地址信息。
- id,指定远程仓库的唯一标识符
- name,远程仓库名称
- url,远程仓库地址。例如:阿里云:http://maven.aliyun.com/nexus/content/groups/public
- releases、snapshots:这是对于工件的类型的限制,一般来说snapshots版本代表正在开发中的版本,release代表比较稳定的发布版本,
- enabled,表示这个仓库是否允许这种类型的工件,
- updatePolicy,表示多久尝试更新一次。可选值有always、daily、interval:minutes(表示每多久更新一次)和never (自己在实际中未使用过)
- checksumPolicy,表示当这个校验文件缺失或不正确的时候该如何处理,可选项有ignore、fail和warn (自己在实际中未使用过)
pluginRepository:
配置maven插件的远程仓库地址,其他属性和repositories一样使用,如下示例
小结:如果配置了repositories而没有配置pluginRepository,那么在创建maven项目下载时会发现,那些插件还是会从maven中央仓库去下载,而不是我们配置激活的阿里地址,这就是我所以理解的pluginRepository的意义吧
<profiles>
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
activeProfiles:
包含一系列的activeProfile元素,表示对于所有的pom都处于活跃状态的profile,activeProfile中填写profile中配置的id
<activeProfiles>
<activeProfile>alwaysActiveProfile</activeProfile>
<activeProfile>anotherAlwaysActiveProfile</activeProfile>
</activeProfiles>
新手自学分享,有错误地方望指点