Bootstrap

maven 配置 ~ setting.xml

综述

       介绍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。

  1. defaultLogLevel:默认的日志级别,info
  2. showDateTime:每一条日志上显示时间
  3. showThreadName:每一条日志上显示线程名称
  4. showLogName:每一条日志上显示logger的名称
  5. logfile:默认的输出流,System.out,可以重定向到文件中
  6. cacheOutputStream:缓存输出流,提升性能,设置为true
  7. levelInBrackets:日志级别显示在方括号中。

    其他不经常使用,此处省略。

 

 

;