Skip to content

配置

环境变量

Win

054233D5EF8BA6D8C70FB8C8989B3E60

CC8A597D39A412453E4AF6D94EA17378

mac

我配在用户级环境文件设置

vim ~/.bash_profile

properties
export LC_ALL=en_US.UTF-8

export LANG=en_US.UTF-8



export MAVEN_HOME=/Users/liuchenyun/dev/devtool/apache-maven-3.8.4

export PATH=$PATH:$MAVEN_HOME/bin

因为配置的用户级系统变量,每次登陆时读取环境变量,所以这次手动更新,以后不需要

properties
source ~/.bash_profile

配置setting.xml

全局 settings、用户 setting、pom 的区别

  • 全局 settings.xml 是 maven 的全局配置文件,一般位于 ${maven.home}/conf/settings.xml,即 maven 文件夹下的 conf 中。
  • 用户 setting 是 maven 的用户配置文件,一般位于 ${user.home}/.m2/settings.xml,即每位用户都有一份配置文件。
  • pom.xml 文件是项目配置文件,一般位于项目根目录下或子目录下。

配置优先级从高到低:pom.xml > 本地 settings > 全局 settings

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">
      <!-- 本地仓库 -->
      <localRepository>
      <!-- maven 是否需要和用户交互以获得输入。默认为 true。 -->
      <interactiveMode>
      <!-- 系统不能联网时,可以通过次配置来离线运行。默认为 false -->
      <offline>
      <!-- -->
      <pluginGroups>
      <!-- 私服设置 -->
      <servers>
      <!-- 镜像仓库 -->
      <mirrors>
      <!-- 配置代理 -->
      <proxies>
      <!-- 构建配置 -->
      <profiles>
      <!-- 激活的 profile。 -->
      <activeProfiles>
</settings>

localRepository

配置本地仓库

默认配置在Default: ${user.home}/.m2/repository,我们把注释里的摘出来配置。

win

xml
 <localRepository>E:\maven\mavenRepository</localRepository>

mac

跟wins中一样,但setting标签的约束版本不同,仔细对比,copy过来

xml
<localRepository>\Users\liuchenyun\dev\devtool\mavenRepository</localRepository>

mirrors

配置仓库镜像

配置在

阿里云镜像地址,搜索maven

xml
  <!-- 外网 -->
<mirror> 
<id>nexus-aliyun</id> 
<mirrorOf>*</mirrorOf> 
<name>Nexus aliyun</name> 
<url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>

<!-- 内网 -->
<mirror>
    <id>ispeco-snapshots</id>
    <mirrorOf>*</mirrorOf>
    <name>Repository for ispeco</name>
    <url>http://maven.ispeco.com/maven</url>
</mirror>

servers

当使用 maven 私服时,某些私服需要配置认证信息,需要在此处填写相应的配置。

之所以不写在 pom.xml 中是因为一般项目在上传至代码仓库时同样会将 pom.xml 上传,而 setting.xml 一般位于用户本地,因此相对比较安全。

其下面可以定义一系列的server子元素,表示当需要连接到一个远程服务器的时候需要使用到的验证方式。

这主要有username/password和privateKey/passphrase这两种方式

xml
<!--配置服务端的一些设置。一些设置如安全证书不应该和pom.xml一起分发。这种类型的信息应该存在于构建服务器上的settings.xml文件中。 -->
  <servers>
    <!--服务器元素包含配置服务器时需要的信息 -->
    <server>
      <!--这是server的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配。 -->
      <id>server001</id>
      <!--鉴权用户名。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。 -->
      <username>admin</username>
      <!--鉴权密码 。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。密码加密功能已被添加到2.1.0 +。详情请访问密码加密页面 -->
      <password>admin123</password>
      <!--鉴权时使用的私钥位置。和前两个元素类似,私钥位置和私钥密码指定了一个私钥的路径(默认是${user.home}/.ssh/id_dsa)以及如果需要的话,一个密语。将来passphrase和password元素可能会被提取到外部,但目前它们必须在settings.xml文件以纯文本的形式声明。 -->
      <privateKey>${usr.home}/.ssh/id_dsa</privateKey>
      <!--鉴权时使用的私钥密码。 -->
      <passphrase>some_passphrase</passphrase>
      <!--文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(permission)。这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775。 -->
      <filePermissions>664</filePermissions>
      <!--目录被创建时的权限。 -->
      <directoryPermissions>775</directoryPermissions>
    </server>
  </servers>
  ...
</settings>
xml
<server>
      <id>ftp-ispeco</id>
      <username>upload</username>
      <password>uuuppp</password>
    </server>
    <server>
      <id>ftp-ispeco-snapshots</id>
      <username>upload</username>
      <password>uuuppp</password>
    </server>
  <server>
      <id>snapshot_maven</id>
      <username>mavenc</username>
      <password>admin123</password>
   </server>
   <server>
      <id>release_maven</id>
      <username>mavenc</username>
      <password>admin123</password>
   </server>

proxies

用来配置代理。proxies:其下面可以定义一系列的proxy子元素,表示Maven在进行联网时需要使用到的代理。当设置了多个代理的时候第一个标记active为true的代理将会被使用。

xml
<proxies>
    <!--代理元素包含配置代理时需要的信息 -->
    <proxy>
      <!--代理的唯一定义符,用来区分不同的代理元素。 -->
      <id>myproxy</id>
      <!--该代理是否是激活的那个。true则激活代理。当我们声明了一组代理,而某个时候只需要激活一个代理的时候,该元素就可以派上用处。 -->
      <active>true</active>
      <!--代理的协议。 协议://主机名:端口,分隔成离散的元素以方便配置。 -->
      <protocol>http</protocol>
      <!--代理的主机名。协议://主机名:端口,分隔成离散的元素以方便配置。 -->
      <host>proxy.somewhere.com</host>
      <!--代理的端口。协议://主机名:端口,分隔成离散的元素以方便配置。 -->
      <port>8080</port>
      <!--代理的用户名,用户名和密码表示代理服务器认证的登录名和密码。 -->
      <username>proxyuser</username>
      <!--代理的密码,用户名和密码表示代理服务器认证的登录名和密码。 -->
      <password>somepassword</password>
      <!--不该被代理的主机名列表。该列表的分隔符由代理服务器指定;例子中使用了竖线分隔符,使用逗号分隔也很常见。 -->
      <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
    </proxy>
  </proxies>
xml
<proxies>
    <proxy>
      <id>chengdu</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>192.168.20.142</host>
      <port>8888</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>

profiles

据环境参数来调整构建配置的列表。用于定义一组 profile

seetings 中的 profile 是 pom.xml 中 profile 元素的裁剪版本。

它包含了 id、activation、repositories、pluginRepositories 和 properties 元素。这里的 profile 元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是 settings.xml 文件的角色定位),而非单独的项目对象模型设置。如果一个 settings.xml 中的 profile 被激活,它的值会覆盖任何其它定义在 pom.xml 中带有相同 id 的 profile。

以下详解:https://blog.csdn.net/Michaelwubo/article/details/134682797

repositories

properties

id

pluginRepositories

activation
xml
 <profile>
      <id>ispeco</id>
      <repositories>
        <repository>
          <id>ispeco</id>
          <name>iSPECO Maven Repo</name>
          <url>http://maven.ispeco.com/maven</url>
          <releases>
            <!-- always, daily(default), interval:15(minutes), never -->
            <updatePolicy>interval:60</updatePolicy>
            <checksumPolicy>fail</checksumPolicy>
          </releases>
          <snapshots>
            <enabled>false</enabled>
            <!-- always, daily(default), interval:15(minutes), never -->
            <updatePolicy>interval:30</updatePolicy>
            <checksumPolicy>ignore</checksumPolicy>
          </snapshots>
        </repository>
        <repository>
          <id>ispeco-snapshots</id>
          <name>iSPECO Maven Snapshot Repo</name>
          <url>http://maven.ispeco.com/snapshots</url>
          <releases>
            <enabled>false</enabled>
            <!-- always, daily(default), interval:15(minutes), never -->
            <updatePolicy>interval:60</updatePolicy>
            <checksumPolicy>fail</checksumPolicy>
          </releases>
          <snapshots>
            <!-- always, daily(default), interval:15(minutes), never -->
            <updatePolicy>interval:30</updatePolicy>
            <checksumPolicy>ignore</checksumPolicy>
          </snapshots>
        </repository>
      </repositories>
    </profile>

activeProfiles

在运行时手工激活的 profile。

xml
<activeProfiles>
    <activeProfile>ispeco</activeProfile>
    <!-- <activeProfile>anotherAlwaysActiveProfile</activeProfile> -->
  </activeProfiles>

通过命令行的方式激活

mvn package -P dev