综述
介绍setting配置文件,它有两种作用域,
第一种作用域是全局的,它位于MAVEN_HOME/conf/settings.xml
第二种作用域是关联用户的,它位于USER_HOME/.m2/setting.xml
第三种作用域是项目相关的,即项目下的pom.xml。
它的全部配置项如下:
<!-- 配置 -->
<settings>
<localRepository></localRepository>
<interactiveMode></interactiveMode>
<usePluginRegistry></usePluginRegistry>
<offline></offline>
<pluginGroups></pluginGroups>
<servers></servers>
<mirrors></mirrors>
<proxies></proxies>
<profiles></profiles>
<activeProfiles><activeProfiles>
</settings>
仓库
maven的仓库有三种,第一种是本地的Maven仓库。第二种是内部搭建的Maven仓库,例如所在的公司使用Nexus搭建了自己使用的Maven库。第三种是比较权威的Maven仓库,例如Maven的中央仓库,阿里的Maven库等。
本地版本库配置:<localRepository></localRepository>
它的值是本地Maven仓库的路径,默认没有配置,此时默认本地仓库的地址是User_HOME/.m2。
服务器
在使用Maven时,项目的依赖会从服务器上下载,依赖分为两种,一种是插件的版本库,一种是Jar包的版本库。
在settings.xml中与服务器相关的配置有三个,分别是servers, mirrors, proxies。
3.1 servers
Servers在配置与服务器建立连接时需要的信息,以及请求的相关参数。
若服务器需要用户名和密码验证(公开的基本上没有):
<server>
<id>插件库或依赖库的ID,即repositories--repository下定义的ID</id>
<username>用户名</username>
<password>密码</password>
</server>
若服务器需要其他配置信息
<server>
<id></id>
<configuration>
<httpConfiguration>
<get>
<readTimeout>100000</readTimeout>
<connectionTimeout>100000</connectionTimeout>
</get>
</httpConfiguration>
</configuration>
</server>
下面的configuration配置相当于配置请求的相关信息。readTimeout,最大的连接超时时间;connectionTimeout,与服务器建立连接的时间。
若服务器需要SSH安全机制,
<server>
<id>插件库或依赖库的ID,即repositories--repository下定义的ID</id>
<privateKey>私有key的路径</privateKey>
<passphrase></passphrase>
</server>
privateKey用于指定秘钥的路径,其实除了id,其他都是由应用场景决定的。
3.2 mirrors
配置服务器的镜像,服务器的镜像是在不同地区搭建的服务器,主要的目的是解决网络的问题。
mirrors的配置项如下:
<mirror>
<id>镜像的ID</id>
<name>镜像服务器的名称</name>
<mirrorOf>镜像服务器的主服务器</mirrorOf>
<url>镜像服务器的地址</url>
</mirror>
其中id,name,url都很常见。
mirrorOf,它是镜像服务器关联的主服务器。它有三种写法。
第一种全部,使用符号*
第二种列表,使用repo1, repo2
第三种关键字,使用external:*
以镜像的概念去理解,镜像本质是由服务器提供方搭建的,它是有限的,Maven仓库的镜像有四个,USA California,USA North Carolina, United Kingdom,France。在亚洲都是没有镜像的。
3.3 proxy
配置代理服务器。
代理的配置项如下:
<proxy>
<id>optional</id>
<active>true</active>
<protocol>代理服务器的协议</protocol>
<username>用户名</username>
<password>密码</password>
<host>代理服务器的IP</host>
<port>代理服务器的端口号</port>
<nonProxyHosts>无需代理的域名</nonProxyHosts>
</proxy>
代理服务器是解除了限制,至于网速快不快说不准。最常见的场景就是在国内无法访问谷歌,添加代理服务器之后就可以访问了。
Maven仓库在国内的话,还是可以访问到的,没有啥限制,主要是网速。所以配置镜像会比代理好点(个人经验)。
插件
pluginGroup全局设置插件的group ID,默认的全局group Id是org.apache.maven.plugins,org.codehaus.mojo。
profile
熟悉spring的都知道,spring-core也有profile的概念,它是根据激活的profile加载不同的配置项,最常见的就是测试时激活test,开发时激活dev,发布时激活release。在maven中profile的含义也是相同的。
它的配置如下:
<profile>
<id>env-dev</id>
<activation>
<property>
<name>target-env</name>
<value>dev</value>
</property>
</activation>
<properties>
<tomcatPath>/path/to/tomcat/instance</tomcatPath>
</properties>
</profile>
它是将profile Id与配置项关联起来,对配置项有哪些内容没有约束。
加密
在配置文件中直接编写敏感信息是不安全的,最常见的就是密码。Maven支持加密。具体的步骤如下:
第一步,设置主密码,它相当于一把钥匙, 可以用它来解密加密后的密码,它自身无法被解密。
mvn -emp your_master_word
第二步,在USER_HOME/.m2目录下创建settingsSecurity.xml文件,其中
<settingsSecurity>
<master>
your_master_password(after encrypt)
</master>
</settingsSecurity>
第三步,设置密码,此时的密码可以在setting.xml中使用。
mvn -ep your_password
第四步,若想修改主密码的位置,可以在settingsSecurity.xml下配置relocation
<settingsSecurity>
<relocation>
主密码的存放位置
</relocation>
</settingsSecurity>
原著中指只有当路径重定向到你私人的U盘时才会起进一步保护的效果。
日志
在MAVEN_HOME/conf/logging/simpleLogger.properties是Maven默认的日志,可以通过修改它,实现自定义Maven的日志。
下面是它的源码:
org.slf4j.simpleLogger.defaultLogLevel=info
org.slf4j.simpleLogger.showDateTime=false
org.slf4j.simpleLogger.showThreadName=false
org.slf4j.simpleLogger.showLogName=false
org.slf4j.simpleLogger.logFile=System.out
org.slf4j.simpleLogger.cacheOutputStream=true
org.slf4j.simpleLogger.levelInBrackets=true
org.slf4j.simpleLogger.log.Sisu=info
org.slf4j.simpleLogger.warnLevelString=WARNING
org.slf4j.simpleLogger.log.org.apache.maven.wagon.providers.http.httpclient=off
org.slf4j.simpleLogger.log.org.apache.maven.wagon.providers.http.httpclient.wire=off
这些配置很类似log4j,logback。
- defaultLogLevel:默认的日志级别,info
- showDateTime:每一条日志上显示时间
- showThreadName:每一条日志上显示线程名称
- showLogName:每一条日志上显示logger的名称
- logfile:默认的输出流,System.out,可以重定向到文件中
- cacheOutputStream:缓存输出流,提升性能,设置为true
- levelInBrackets:日志级别显示在方括号中。
其他不经常使用,此处省略。