maven配置解析和最佳配置

  • 2019 年 10 月 30 日
  • 筆記

最近公司更换了软件源,发现之前的maven的配置存在一些问题,特别是mirrors和server的使用。 本文就maven的settings.xml配置进行了解析,并给出了一般最常用的配置。

配置解析

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0                            https://maven.apache.org/xsd/settings-1.0.0.xsd">    <!-- 本地仓库(建议放在非C盘) -->    <localRepository/>      <!-- 交互模式,默认值为true,如果为false,则会在配置时使用默认值 -->    <interactiveMode/>      <!-- 表示maven是否需要在离线模式下运行: 当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。 -->    <offline/>      <!-- 当插件的组织id(groupId)没有显式提供时,供搜寻插件组织Id(groupId)的列表。默认情况下该列表包含了org.apache.maven.plugins和org.codehaus.mojo -->    <pluginGroups/>      <!-- 网络代理配置 -->    <proxies/>      <!-- 仓库的授权信息:支持username&password, privateKey&passphrase -->    <servers/>      <!-- 仓库的镜像 -->    <mirrors/>      <!-- 根据环境参数来调整构建配置的列表 -->    <profiles />      <!-- 手动激活profiles的列表,按照profile被应用的顺序定义activeProfile -->    <activeProfiles/>  </settings>

mirrors vs servers

  • mirros就是当要访问指定仓库时,实际上访问镜像仓库(一般用在私建中央仓库代理,提高效率,或者使用国内的仓库镜像,比如aliyun的镜像)
  • server就是实际仓库配置

更多区别参见Maven:mirror和repository 区别

配置示例

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0                            https://maven.apache.org/xsd/settings-1.0.0.xsd">      <localRepository>E:m2_repository</localRepository>    <interactiveMode/>    <usePluginRegistry/>    <offline/>    <pluginGroups/>    <servers>      <server>        <id>tenmao-release</id>        <username>tenmao</username>        <password>123456</password>      </server>      <server>        <id>tenmao-snapshot</id>        <username>tenmao</username>        <password>123456</password>      </server>    </servers>    <mirrors>      <mirror>          <id>nexus-aliyun</id>          <mirrorOf>central</mirrorOf>          <name>Nexus aliyun</name>          <url>http://maven.aliyun.com/nexus/content/groups/public</url>      </mirror>    </mirrors>      <profiles>      <profile>        <id>default</id>        <activation>          <activeByDefault>true</activeByDefault>        </activation>      <repositories>          <repository>            <id>tenmao-release</id>            <url>https://mirrors.tenmao.com/repository/maven/tenmao_release</url>            <releases>              <enabled>true</enabled>            </releases>            <snapshots>              <enabled>false</enabled>            </snapshots>          </repository>            <repository>            <id>tenmao-snapshot</id>            <url>https://mirrors.tenmao.com/repository/maven/tenmao_snapshot</url>            <releases>              <enabled>false</enabled>            </releases>            <snapshots>              <enabled>true</enabled>            </snapshots>          </repository>      </repositories>    </profile>  </profiles>      <proxies>      <!--代理元素包含配置代理时需要的信息 -->      <proxy>        <!--代理的唯一定义符,用来区分不同的代理元素。 -->        <id>myproxy</id>        <!--该代理是否是激活的那个。true则激活代理。当我们声明了一组代理,而某个时候只需要激活一个代理的时候,该元素就可以派上用处。 -->        <active>true</active>        <!--代理的协议。 协议://主机名:端口,分隔成离散的元素以方便配置。 -->        <protocol>http</protocol>        <!--代理的主机名。协议://主机名:端口,分隔成离散的元素以方便配置。 -->        <host>web-proxy.tenmao.com</host>        <!--代理的端口。协议://主机名:端口,分隔成离散的元素以方便配置。 -->        <port>8080</port>        <!--不该被代理的主机名列表。该列表的分隔符由代理服务器指定;例子中使用了竖线分隔符,使用逗号分隔也很常见。 -->        <nonProxyHosts>*.oa.com|192.168.58.*|10.*|mirrors.tenmao.com</nonProxyHosts>      </proxy>    </proxies>    <activeProfiles/>  </settings>

注意事项

  • 代理中多个跳过代理域名使用|隔开: <nonProxyHosts>*.oa.com|192.*|10.*</nonProxyHosts>

参考