• 后端——工具——构建工具——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>
    

    1、仓库

      Maven的仓库有三种,第一种是本地的Maven仓库。第二种是内部搭建的Maven仓库,例如所在的公司使用Nexus搭建了自己使用的Maven库。第三种是比较权威的Maven仓库,例如Maven的中央仓库,阿里的Maven库等。

    配置本地版本库的项是:

    <localRepository></localRepository>
    

      它的值是本地Maven仓库的路径,默认没有配置,此时默认本地仓库的地址是User_HOME/.m2。

    2、服务器

      在使用Maven时,项目的依赖会从服务器上下载,依赖分为两种,一种是插件的版本库,一种是Jar包的版本库。

      在settings.xml中与服务器相关的配置有三个,分别是servers, mirrors, proxies。

    2.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,其他都是由应用场景决定的。

    2.2  mirrors

      配置服务器的镜像,服务器的镜像是在不同地区搭建的服务器,主要的目的是解决网络的问题。

      例如某大型公司,它在美国拥有自己的服务器,但是我们在亚洲,访问到美国的服务器非常慢,所以它决定在亚洲建立一个镜像服务器,例如在香港,或新加坡,此时设置服务器地址为香港或新加坡的镜像,网络状况就会变的非常好。至于镜像服务器与美国的主服务器是如何同步数据的,这不是我们关系的问题。

      mirrors的配置项如下:

    <mirror>
       <id>镜像的ID</id>
       <name>镜像服务器的名称</name>
       <mirrorOf>镜像服务器的主服务器</mirrorOf>
       <url>镜像服务器的地址</url>
     </mirror>
    

      其中id,name,url都很常见。

      mirrorOf,它是镜像服务器关联的主服务器。它有三种写法。

    1. 第一种全部,使用符号*
    2. 第二种列表,使用repo1, repo2。
    3. 第三种关键字,使用external:* 
    <mirror>
       <id>镜像的ID</id>
       <name>镜像服务器的名称</name>
       <mirrorOf>镜像服务器的主服务器</mirrorOf>
       <url>镜像服务器的地址</url>
     </mirror>
    

      以镜像的概念去理解,镜像本质是由服务器提供方搭建的,它是有限的,Maven仓库的镜像有四个,USA California,USA North Carolina, United Kingdom,France。在亚洲都是没有镜像的。

      若更抽象的去理解,镜像的作用就是说去访问主服务器时网络状况不好,反而去访问镜像服务器。镜像服务器无需配置为上述四个。

      假设用户访问XX.jar包,它访问主服务器,发现配置镜像,转而去请求镜像服务器,镜像服务器上存在XX.jar,请求成功。若镜像服务器上不存在XX.jar,它再去请求主服务器。

      这里有两个关键点:

    1. 镜像服务器访问主服务器的速度要优于直接访问主服务器。
    2. 镜像服务器上存在的资源比率越高,产生的二次请求越少。

      总之一点,配置镜像会让你的请求网络状况变好。若我们访问主服务器都很快的时候,根本不需要镜像。

    2.3 代理

      配置代理服务器,但凡在国内使用过谷歌的都知道代理是怎么回事。

      代理的配置项如下:

    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>代理服务器的协议</protocol>
      <username>用户名</username>
      <password>密码</password>
      <host>代理服务器的IP</host>
      <port>代理服务器的端口号</port>
      <nonProxyHosts>无需代理的域名</nonProxyHosts>
    </proxy>
    

      代理服务器是解除了限制,至于网速快不快说不准。最常见的场景就是在国内无法访问谷歌,添加代理服务器之后就可以访问了。

      Maven仓库在国内的话,还是可以访问到的,没有啥限制,主要是网速。所以配置镜像会比代理好点(个人经验)。

    3、插件组

      pluginGroup全局设置插件的group ID,默认的全局group Id是org.apache.maven.plugins,org.codehaus.mojo。

    4、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与配置项关联起来,对配置项有哪些内容没有约束。

    5、加密

      在配置文件中直接编写敏感信息是不安全的,最常见的就是密码。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盘时才会起进一步保护的效果。

    6、日志

      在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:日志级别显示在方括号中。

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

  • 相关阅读:
    一些常用的代码规范
    策略模式学习,使用go实现策略模式
    数据库作业3:第二章课后题
    数据库作业4:SQL练习1
    对数据库相关的概念自己的理解
    SQL server的初步使用
    对于高德地图SDK的开发使用
    滑稽(好像会动)!
    羊车门作业
    对Python课的看法
  • 原文地址:https://www.cnblogs.com/rain144576/p/14468788.html
Copyright © 2020-2023  润新知